好的数据库结构会加快数据库响应时间/节省磁盘空间/便于管理,以下是优化后的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`),