Mysql设计规范
数据库命名规范
- 采取24个英文字母**(区分大小写)**和0-9的自然数(很少)和下划线_组成
- 命名简洁明了(不能超过30字符)
- 备份数据库可以加标识 如user_db_20200724
数据库表名命名规范
- 采取24个英文字母**(区分大小写)**和0-9的自然数(很少)和下划线_组成
- 命名简洁明了,多个单词以下划线隔开 user_login
数据库字段名命名规范
- 采取24个英文字母**(不区分大小写)**和0-9的自然数(很少)和下划线_组成
- 命名简洁明了,多个单词以下划线隔开 user_login
- 每个表必须要自增主键,插入数据的记录时间add_time
数据库表字段类型规范
- 用尽量少的存储空间来存储数据
- 能用int就不用varchar、char,能用varchar(16)就不用varchar(256)
- IP地址最好用int类型
- 固定长度的类型最好用char 如邮编
- 能用tinyint就不用smallint,int
- 最好给每个字段一个默认值,最好不能为null(null字段很难查询优化、null字段的索引需要额外空间,null字段的复合索引无效)
- 少用text,能用varchar就用varchar
数据库表索引规范
- 命名简介明确,如:user_login表user_name字段的索引应为user_name_index为唯一索引
- 为每个表建一个主键索引
- 为每个表建立合理的索引
- 建立复合索引需谨慎
- 合理利用索引(改善查询,但降低修改效率,索引不是越多越好)
- 字段字符必须建前缀索引
- 不在索引做列运算
- InnoDB主键推荐使用自增列(主键建立聚簇索引,主键不应该被修改,字符串不应该做主键)
- 不用外键(由程序保证约束)
三大范式
范式:设计数据库时,需要遵循的一些规范.
各种规范呈递次规范,且后一级的范式都符合前一级的范式,越高的范式数据库冗余(重复度)越小.
要遵循后面的范式,必须也同时遵循前面的范式.
六种范式:
第一范式(1NF)
每一列都是不可分割的原子数据项
这个图显示可以分割的列
这个才符合第一范式
第一范式的问题:
- 冗余特别多
- 删除数据会导致附属信息也被删除(如学生毕业对应的系信息消失)
- 如果只添加系这样的数据不合法
第二范式(2NF)
把表拆分,删去冗余数据。
原本:
拆分后:
第二范式解决了数据冗余的问题
第三范式(3NF)
在第二范式的基础上,消除了所有的传递依赖
解决了数据添加和删除不合法的问题.
- 三大范式解决了数据添加不合法的问题
巴斯-科德范式(BCNF)
第四范式(4NF)
第五范式(5NF):完美范式
一般只用前三种,常用,且冗余已很小.