好的数据库结构会加快数据库响应时间/节省磁盘空间/便于管理,以下是优化后的mysql数据库范例
一. 命名规则
表名/字段全部小写 ,多个单词下划线分割
user
/user_name
- 禁止使用数据库保留关键字
- 表名不应超过3个单词
用单数形式
user
- 表名/字段名必须体现内容信息,提高可读性
- 字段尽量不可为空,可为空必须指定默认值
二. 字段类型选择及长度
--
-- 表的结构 `user`
--
CREATE TABLE `user` (
`user_id` int(20) NOT NULL,
`user_name` varchar(60) NOT NULL,
`user_phone` char(11) NOT NULL,
`user_auth_key` char(32) NOT NULL,
`user_password_hash` char(60) NOT NULL,
`user_password_rese_token` char(60) DEFAULT NULL,
`user_verification_token` varchar(60) NOT NULL,
`user_email` varchar(100) NOT NULL,
`user_avatar_path` varchar(140) DEFAULT NULL,
`user_status` tinyint(1) DEFAULT 1,
`created_at` int(10) DEFAULT NULL,
`updated_at` int(10) DEFAULT NULL,
`user_info_login_ip` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
三. 为每个表指定主键 PRIMARY KEY
/ INDEX
唯一/ UNIQUE
索引
每个表只能定义一个主键
每个表必须指定一个:
PRIMARY KEY
自增主键(主键即不可重复/不可为空/索引)-- 说明 ALTER TABLE `表名` ADD PRIMARY KEY(`字段名`);
搜索时需要用到的字段指定为:
INDEX
索引-- 说明 ALTER TABLE `表名` ADD INDEX(`字段名`);
不可重复空的字段指定为:
UNIQUE
唯一-- 说明 ALTER TABLE `表名` ADD UNIQUE(`字段名`);
四. 外键约束
外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)
-- 说明 ALTER TABLE `内键表名` ADD CONSTRAINT `外键名` FOREIGN KEY (`内键字段名`) REFERENCES `外键表名` (`外建字段名`); -- 范例 ALTER TABLE `user_info` ADD CONSTRAINT `UserInfo` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`),