数据库使用原则:
(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逻辑中实现