数据库命名及设计简单规范

数据库命名及设计简单规范

命名规范

所有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脚本生成数据库结构设计文档
  • 版本化数据库
    详见数据库版本控制
  • 关注数据库设计可移植性