我设计数据库常用的几个原则

MySQL5.7为例,在一个项目中的数据库schema中建表

〇、建库

统一字符集和排序规则

规则

库的默认字符集选择utf8mb4,表、字段默认上级

库的排序规则选择utf8mb4_general_ci,表、字段默认上级

好处

统一排序规则,防止不必要的隐式转换,库级先指定,表级,字段级默认上级即可。

一、命名法

如果是大小写敏感的数据库【MySQL】就用蛇形命名法【小写+下划线】

如果是大小写不敏感的数据库【SQL Server】就用大驼峰式【大小写】

二、望文生义,自说明

百度百科中,望文生义:汉语成语,意思是指不了解某一词句的确切涵义或来源缘由,光从字面上去牵强附会,做出不确切的解释。

规则

在数据库设计中,表名字段名一定要用有意义的名词,即自说明,每一个名词都是由有意义的英文或者通用英文缩写组成。鉴别方式:使用百度搜索字段名中的单词,可以搜索到,则命名没问题。

例子

公司可以使用 corporation 或者缩写corp,不能用gongsi,下图为搜索缩写的结果

我设计数据库常用的几个原则

数量可以使用 quantity 或者缩写qty,不能用shuliang、numb(糟糕的选择,单词意义是麻木的; 失去知觉的; 迟钝的; 呆滞的)、num。下图为缩写搜索的结果

我设计数据库常用的几个原则

注意:缩写必须是约定俗成的,是行业通用的,否则宁可字段过长也不要缩写。不规范的缩写会导致表名易用性和可维护性变差。对开发人员和维护人员极其不友好。

好处

使不了解表结构的人,直接看表名、字段名就可以知道表、字段的意义。尽量不查备注,因为查看备注也需要花时间,对开发的编码流畅性干扰很大。

注意:
1、字段名要简短、易于理解、无歧义。
2、虽然已经望文生义、自说明,但是不意味着可以省略备注,每个表和字段还是有必要加上备注的,防止出现歧义。

三、字段统一 规则

意义相同的字段就算在不同表中也要保持字段名相同、保持类型相同。
所以备注要言简意赅,如果不同表出现相同字段,只要全库搜索备注就能找到相同意义的字段,这样就可以维持字段统一

好处

1、依旧是望文生义,当已经习惯于一个字段名,该字段在其他表中出现对开发识别字段意义有帮助

2、当两个表的数据相互传递时,可以使用相同属性名反射实现set、get方法,给开发提供便利

3、类型相同防止字段比较时出现隐式类型转换

四、模块分组

如果系统设计中划分了模块,各模块的表名中必须加了相同的模块简称前缀

例子

字典表模块中的

我设计数据库常用的几个原则

计量单位表dict_unit

公司表dict_corp

系统模块中的

我设计数据库常用的几个原则

用户表sys_user

角色表sys_role

好处

相同模块的表在工具中查看时是排列在一起的。方便查找相关表。

五、主键名

主键id不能统一命名为id,有要加上表信息,即用户表user主键user_id

规则

不要使用统一id当主键名,要有修饰词

例子

用户属于某公司,即用户表中需要存储公司表的主键作为外键【即使不建立外键】

用户表使用user,公司表使用corp

如果在公司表中主键id使用id,但在user表中主键id也是id,必然user表的外键公司id 应该是corp_id,这样会导致一个结果当user表和corp表联结时,

联结条件必须是user.corp_id = corp.id

如果联结的表过多时表名使用别名a,b,u,c时极其容易写错,还不容易排查错误

而如果user表主键定义为user_id,corp表主键定义为corp_id,user表中的公司id外键也定义为corp_id,

这样当表联结时,联结条件写为user.corp_id=corp.corp_id,联结条件一目了然。提高了SQL的可读性,节省了阅读SQL时表联结键的确认时间。

好处

节省开发时间,就算一次节省半秒,上千次之后也会节省十分钟,作为一个项目经理或dba,就算你做不到给开发减轻工作量,也不能拖后腿吧。

符合字段统一原则。

六、尽量not null 规则

在设计字段时尽量使用not null不可空。

数字类型默认0,字符串类型默认''零长度的字符串。

日期类型如果可以默认当前时间。

我知道作为开发人员嫌不可空麻烦,但是实际上可以在实体的getter方法中改写

数字可以return userId ==null?0:userID;

字符串可以return name ==null?"":name.trim();

日期可以return dt==null?new DateTime();

以上写法可以保证你的实体在插入时肯定不空,虽然开发写起来麻烦,但是好处多多。

好处

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgsfj.html