数据库规范

189 阅读2分钟

数据库使用原则:

(1) 减少数据访问[减少磁盘访问]

(2) 返回更少数据[减少网络传输或磁盘访问]

(3) 减少交互次数[减少网络传输]

(4) 索引原则:高选择性(定位到表中的少量数据)

数据库命名规范

不能使用与数据库相关的关键字,例如 index、desc、 range、 match、 delayed 等, 请参考 MySQL 官方保留字。(dev.mysql.com/doc/refman/…

  • 全部小写,下划线分割单词
  • 名字禁止超过32字符
  • 索引pk_(主键) uk_(唯一索引) idx_(普通索引)开头命名
  • sys_表:系统基础表;mid_表:中间表;mokuai_yewu:业务表
  • 字段名:描述当前业务的字段,都需要加前缀,比如:project_name,project_code等; 独立字段,与业务相关时,使用其原名,比如:项目的ins_id(机构),area_id(区划),leader_dept(牵头单位)等
  • 编号类:id统一使用bigint,code统一使用varchar()

常用的一些英文:

  • 子类型和类型:sub_type和type
  • 父ID和levelPath:yewu_parent_id和yewu_level_path
  • 区划:area_id,area_code
  • 机构:ins_id, ins_code
  • arch档案,duty履职

索引规范

  • 主键,建议使用自增作为主键
  • 所有的表必须有显式主键
  • 单个表索引尽量不要超过5个
  • 单个索引不超过5个字段
  • 避免冗余和重复索引
  • 索引外键等字段,禁止为空

查询规范

  • 避免大表的Join操作
  • 尽量不要select * ,如果确认一定要所有字段,可以使用,如果不是,请写明字段
  • 用Union all替代union;union all不会自动去重
  • 少用子查询
  • 查询时,整数禁止添加引号,字符串一定要添加引号,避免索引失效
  • 尽量不要是用not in / not like 等反向查询
  • 尽量避免在 where 子句中对索引字段进行表达式和函数操作
  • groupby时,禁止查询非groupby中字段

枚举规范

  • 类型,全部从1开始
  • 状态,全部从0开始,0为初始状态或正常状态
  • 注释:使用"XXX类型:1-xxx;2-yyy;3-zzz"
  • 注释:使用"XXX类型,参考sys_param中的xxx"
  • 内容全部需要配置到sys_param表中

其他规范

  • 所有的表都需要创建人,修改人,创建时间,修改时间,is_delete(0-正常 1-删除 2-被删除)
  • 业务表必须有创建人机构和机构树路径
  • 所有的表都需要添加注释,尽量使用utf8mb4
  • 非负数尽量使用unsigned
  • 时间尽量使用datetime
  • 表字段数量建议控制在 20个以内。和磁盘扇区相关,有兴趣可以了解一下
  • 不要在数据库里进行数学计算
  • 不要使用float和double,使用decimal或者 x * 100
  • 禁止设置表之间的物理外键。外键关联在sql逻辑中实现