Mysql数据库设计规范

882 阅读2分钟

1. 数据库命名规范

  1. 采用单词+下划线'_'组成
  2. 命名简洁明确(长度不能超过30个字符)
  3. 例如:user,stat,log,也可以wifi_user, wifi_stat,wifi_log 给数据库加个前缀
  4. 除非是备份数据库可以加0-9的自然数

2. 数据库表名命名规范

  1. 采用26 个英文字母(区分大小写)和0-9 的自然数(经常不需要)加上下划线'_'组成
  2. 命名简洁明确,多个单词用下划线'_'分隔。

3. 数据库表字段命名规范

  1. 单词+下划线组成
  2. 例: user_login, user_id
  3. 每个表中必须有自增主键,add_time(默认系统时间)
  4. 表与表之间的相关联字段名称要求尽可能的相同

4. 数据库表字段类型规范

用尽量少的存储空间来存储一个字段的数据

能用int就不用varchar,char,能用varchar(10)就不用varchar(255)

IP地址最好用INT类型

固定长度的类型最好使用char,例如:邮编

能使用tinyint就不要使用smallint, int

最好每个字段一个默认值,最好不能为Null

5. 数据库表索引规范

命名简洁明确,例如:user_login表,user_name字段的索引应为user_name_index唯一索引

为每个表创建一个主键索引

为每个表创建合理的索引

建立复合索引请慎重

6. 数据库范式

  1. 第一范式(1NF) :字段值具有原子性,不能再分(所有关系型数据库系统都满足第一范式)

    • 例如:姓名字段,其中姓和名是一个整体,如果区分姓和名那就必须设立两个字段
  2. 第二范式(2NF):一个表必须有主键,即每行数据都能被唯一区分

    • 备注:必须先满足第一范式
  3. 第三范式:一个表中不能包含其他相关表中非关键字段的信息,即表数据中不能用冗余字段

    • 备注:必须先满足第二范式
    • 一般不需要完全遵循第三范式,因为过度的工程化会导致项目过度细化而影响系统整体性能
    • 例如:老师和学生都有账号,密码等,如果把老师账号和学生账号冗余在其信息表内,而学生账号放在学生信息表内,其实没有影响其整体的存储,但这样的效率省了大量的join操作,提升了性能,(就算拆成几张表也无法节省内存,也只会占用更多的硬盘空间,或内存空间)血的教训!!!!