红色字体:强规则(强制使用);蓝色字体:弱规则(建议使用);绿色字体:案例
0.概述
背景
数据库是公司信息的核心,其应用水平的高低直接影响到公司业务的发展水平。如果数据库系统设计不合理,不仅会增加客户端和服务器端程序的编程和维护的难度,而且还会影响系统实际运行的性能。为了保证数据库运行在最佳的性能状态下,特制订此规范。
简介
本规范由以下三部分组成:
第一部分数据库设计规范。主要对数据库中对象(如表,索引,存储过程)等的名称及使用情况做了相关约定。
第二部分SQL编写规范。针对常用SQL,分页语句,常用函数及关联查询等SQL编写制定的规则及优化建议。
第三部分ibatisSqlMap编写规范,针对使用Ibatis框架时遵循的特殊编码约定。
适用范围
本规范适用于mysql5及以上版本。主要读者对象是在mysql上应用开发程序员,开发DBA以及SQL优化相关人员。
术语定义
规则:开发过程中强制必须遵守的原则。
建议:开发过程中必须加以考虑的原则,需要咨询DBA根据实际情况确定。
说明:对此规则或建议进行必要的解释。
示例:对此规则或建议从正、反两个方面给出。
1.命名规范
说明:指数据库对象如表(TABLE),索引(INDEX),序列(SEQUENCE)等的命名约定。
1.1基本命名原则
规则1.1.1:命名使用具有意义的英文词汇(或能明确表达含义的缩写),词汇中间以下划线分隔。
规则1.1.2:命名只能使用英文字母,数字,下划线,并以英文字母开头。(杜绝混用英文字母大小写,要求全部使用小
写字母)
规则1.1.3:避免用MySQL的保留字如level,关键字如type,text。
1.2表命名
建议1.2.1:同一个模块的表尽可能使用相同的前缀,表名称尽可能表达含义。
表名如果有前缀,尽量用库名或者库名缩写(不建议用例如“za”等字符作为前缀)
规则1.2.2:长度不超过25个字符。
规则1.2.3:不允许表名含义模糊(例如:report_a、report_b、report_c)
1.3字段命名
规则1.3.1:表达其实际含义的英文单词或简写。MySQL:布尔意义的字段以"is_"作为前缀,后接动词过去分词。
规则1.3.2:各表之间相同意义的字段应同名。MySQL:同时应保持类型及长度的一致。
建议1.3.3:外键字段用表名_字段名表示其关联关系。MySQL:禁止使用外键约束,在应用层实现关联关系。
sfa_opportunity.id=sfa_account.opportunity_id示例(MySQL):字段brmms_group.id被brmms_contact引用;
brmms_contact表中与之对应的字段命名为:group_id
1.4索引命名
规则1.4.1:idx_表名称_字段名:idx_表名称_字段名。如字段较多,则使用功能描述性英文单词。MySQL复合索引务必
应考虑最佳左前缀。
示例(普通索引):sample表member_id上的index:idx_sample_memberid。
示例(唯一索引):sample表member_id上唯一索引:uk_sample_memberid。
示例(符合索引):sample表member_id和order_id上的index:idx_sample_memberid_orderid。
1.5约束命名
规则1.5.1:主键约束:表名称_PK。
规则1.5.2:唯一约束:表名称_字段名_UK。MySQL:除主键外,需存在唯一性约束的,可通过创建以"uk_"为前缀的唯
一索引实现,但应用中需要同时有唯一性检查逻辑。
1.6序列命名
规则1.6.1:seq_表名。
2.对象设计使用规范
2.1常用数据类型
说明:以下为常用数据类型介绍,表设计时根据根据实际应用选择。
MySQL中,仅可以使用下文提及的数据类型,所有表、字段必须添加能够清楚表示其含义的注释(comment选
项)——状态类字段的注释中必须明确列出各状态值的说明。
DECIMAL(M,D):
当表示定点小数的情况下使用该类型。定点数在MySQL内部以二进制格式存储,比浮点数更精确,适合用来