数据库命名及设计简单规范
数据库命名及设计简单规范
命名规范
所有schema对象的命名使用其英语含义,杜绝使用汉语拼音以及汉语拼音首字母缩写。
sql脚本中sql标准关键字用大写,所有用户自定义对象名字用小写。
尽量不要用缩写词,如用缩写词一定要容易辨识,不要太简略。
表
tb_
表名以前缀tb_开头,后面跟表的实际名字,如果表名字需要几个单词来表单,单词之间用下划线_分隔,全部用小写字母。如:
tb_orders
tb_have_multi_words
如多个模块有名字重复的表,可以在表名字前添加模块名,并用下划线分隔。
用户维护字典表使用dic_格式,如有与用户维护字典表名字冲突的应用系统内部维护字典表使用dic__system。
字段
字段名字不要带表名字前缀,因为表名字本身就是字段的名字空间。如用多个单词,每个单词间用下划线_分隔。字段名全部使用小写字母。
主键命名有点儿例外,如果主键是没有业务含义的逻辑主键,名字可以直接用id,如果是业务主键则要用_id的格式
字段是顺序码可以用id命名,如果字段是按特定规范的固定编码可以用code命名。
如果字段是boolean类型,不要使用is前缀,实体生成工具产生getter/setter方法时可能会出现意想不到的结果。
约束
所有约束都要命名,而不要依赖数据库系统默认生成的名字。这里提及的表名不要带tb_前缀
- 检查约束Check Constraints
ck___,比如订单表的订单号只能大于零,可以这样命名如下:
ck_orders_orderid_gt_zero - 非空约束Not-Null Constraints
nn__
注:因为PostgreSQL在违反非空约束时,根本不提及非空约束的名字,所以非空约束在PostgreSQL中可以不命名。 - 唯一约束Unique Constraints
uk__,如果是组合字段,则把所有的字段都添加到后面,用下划线分隔。 - 主键约束Primary Keys
pk_,因为主键只有一个,可以不用指名主键字段名。一个表只能有一个单一字段主键,而且一定要把主键放在表的第一个字段。 - 外键约束Foreign Keys
fk___
视图
vw_
存储过程
sp_
函数
fn_
触发器
tr_
表空间
ts_
数据文件
设计规范
- 每个表都应该有主键,根据实际情况采用业务主键或逻辑主键皆可
- 避免使用复合主键
- 尽量使用各种约束来规范表数据
- 尽量符合数据库设计范式,一般达到第三范式就可以了
- 为可空字段设定默认值
因为NULL值是不确定的,程序中处理起来比较繁琐,应该为所有允许不提供值的字段设定默认值。 - 避免使用触发器
- 尽量少用存储过程,特别是业务逻辑不能写在存储过程中。数据统计时可以适当使用存储过程。
- 根据建库sql脚本,自动生成数据库结构设计文档,而不是在多处维护文档
可以通过注释机制,自定义一些注释元字符,建库脚本中合理注释,然后通过程序或shell脚本处理sql脚本生成数据库结构设计文档 - 版本化数据库
详见数据库版本控制 - 关注数据库设计可移植性