结合网上资料与项目实际情况,总结下列MYSQL数据库设计规范。
一、MYSQL数据库设计规范
1、数据库命名规范
采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,禁止使用mysql保留字;
命名简洁明确(长度不能超过30个字符);
例如:vr_mmo;
除非是备份数据库可以加0-9的自然数:vr_mmo_20171210;
2、数据库表名命名规范
采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,禁止使用mysql保留字;
命名简洁明确,多个单词用下划线'_'分隔;
静态表的表名增加s_的前缀,动态表的表名增加d_的前缀。
例如:用户表d_user, 物品类型表s_itemtype
表前缀'player_'可以有效的把相同关系的表显示在一起;
3、数据库表字段名命名规范
采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,禁止使用mysql保留字;
命名简洁明确,多个单词用下划线'_'分隔;
例如:player表字段 id, name, login_time;
每个表中必须有自增主键;
使用配置表的ID做为字段,字段名要体现出对应的表。比如物品表item有个字段是物品类型对应itemtype的id,那物品表的相应字段应该为itemtypeId。
表与表之间的相关联字段名称要求尽可能的相同;
4、数据库表字段类型规范
用尽量少的存储空间来存数一个字段的数据;
例如:能使用tinyint就不要使用smallint,能使用smallint就不要使用int,能使用int就不要使用varchar、char,能用varchar(16)就不要使用varchar(256),只有配置表(总体尺寸小)才不需要遵守;
字符转化为数字(能转化的最好转化,同样节约空间、提高查询性能);
建议使用UNSIGNED存储非负数值;
固定长度的类型最好使用char,例如:邮编;
所有字段均定义为NOT NULL,给每个字段一个默认值(NULL字段很难查询优化、NULL字段的索引需要额外空间、NULL字段的复合索引无效);
在扩充表字段的时候,通常建议在原表的尾部添加字段,不要在中间插入。这样在更新时,可以提前更新表结构,后更新代码。减少因版本更新不同步,导致的字段错位和混乱,甚至导致数据丢失等严重后果;
5、数据库表索引规范
命名简洁明确,例如:item表owner字段的索引应为owner_index唯一索引;
为每个表创建一个主键索引,推荐使用UNSIGNED自增列作为主键;
哪些情况需要建立索引:出现在where的字段,较频繁地作为查询条件的字段
不适合建立索引:字段更新太频繁,唯一性太差的字段(比如性别)
建立复合索引请慎重,不用外键(由程序保证约束),建立索引可以加快查询速度,但是索引的创建和维护需要消耗时间和物理空间。
6、简单熟悉数据库范式
第一范式(1NF):字段值具有原子性,不能再分(所有关系型数据库系统都满足第一范式);
例如:姓名字段,其中姓和名是一个整体,如果区分姓和名那么必须设立两个独立字段;
第二范式(2NF):一个表必须有主键,即每行数据都能被唯一的区分;
备注:必须先满足第一范式;
第三范式(3NF):一个表中不能包含其他相关表中非关键字段的信息,即数据表不能有冗余字段;
备注:必须先满足第二范式;
备注:平衡范式与冗余,效率优先;
二、MYSQL数据库设计原则
1、核心原则
不在数据库做运算;
控制列数量(字段少而精,字段数建议在20以内);
2、sql类原则
当只要一行数据时使用 LIMIT 1(提高查询性能,预防非预期错误)
sql语句尽可能简单(一条sql只能在一个cpu运算,大语句拆小语句,减少锁时间,一条大sql可以堵死整个库);
减少与数据库交互次数,尽量采用批量SQL语句
禁用count(*);
使用union all替代union(union有去重开销);
少用连接join;
使用group by;
使用同类型比较;
三、sql提交要求
1、结构更新sql、数据sql、函数sql、清库sql分开提交,分别为vr_mmo_update.sql、vr_mmo_data.sql、vr_mmo_clean.sql
vr_mmo.sql 表的初始版本
vr_mmo_update.sql 以增量方式提交的表和过程函数的修改
vr_mmo_clean.sql 清库sql
vr_mmo_data.sql 库的初始数据,一般只包含配置数据,只维护当前的版本
2、提交sql要包含功能说明、作者、提交时间、表的注释、字段注释,增加字段要使用after避免刷库顺序导致的bug
3、增加的sql语句加到文件尾,如果是版本内的修改要在原有提交处修改
4、提交的sql以固定格式的注释开头:
########################################################################################################
## 功能单 :76153【VR-MMO】xxxxxxx
## 提交者 :xxx
## 提交日期:xxxx年x月x日18:00:00
########################################################################################################
本文转自:
Mysql数据库、表设计规范指南 - Boom__Clap - 博客园 (cnblogs.com)