为统一数据库设计与使用标准,参考阿里巴巴的java开发手册,提炼了几条规范:
一、建表规约:
1、表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线之间只出现数字。 正例:getter_admin task_config level3_name 反例:get特然Admin,taskConfig,level_3_name 2、在表命名的时时,加上业务前缀,例如权限服务相关表,以priv_开头。便于后续的拆库操作。 3、表名、字段名长度上线不超过30 4、建表、建字段的时候必须增加对应的描述信息。 5、主键索引名为pk_表名_字段名,唯一索引名为uk_表名_字段名,普通索引名为idx_表名_字段名。 说明:pk_即primary key; uk_即unique key ; idx_ 即 index的简称。 6、表必备3个字段,id,create_time,update_time。 说明:其中id必为主键,create_time表示创建时间,update_time标识更新时间。create_time和update_time的类型必须为date_time,gmt格式。
二、索引规约:
1、超过三个表,禁止使用join。需要使用join的字段,数据类型必须绝对一致。多表关联查询时,保证被关联的字段需要有索引。 说明:即使说表join也要注意表索引,sql性能。 2、页面搜索严禁左模糊或者全模糊,如果确实需要,则走搜索引擎解决。 说明:索引文件具有B-Tree的最左前缀匹配特性,如果左边的值未确定,则无法使用此索引。
三、sql语句
1、严禁使用select * 。 2、使用ISNULL()来判断是否为NULL值。 说明:不能使用= <> 等符号。因为 select null=null 返回的是 null,select null<>null 返回的也是null 3、禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。 4、不能使用外键和级联,一切外键概念需要在应用层面解决。 说明:(概念解释)学生表中的student_id是主键,那么成绩表中的student_id则为外键。 如果更新学生表中的student_id,同时触发成绩表中的student_id更新,则为级联更新。 外键与级联更适用于单机低并发,不适用分布式、高并发集群。 级联更新更是强阻塞,存在数据更新风暴的风险。 外键影响数据库的插入速度。