【强制】表设计必须有表主键,并且主键不能提供给外部系统,给外部系统的必须使用业务主键,如user表的业务主键设计,如下
id 表主键,自增,表主键不能像外部系统提供
xxx_id 为业务主键,使用IdGenerater(id生成工具类生成,见附件),可以提供给外部系统,使用bigint存储
【强制】表必须有主键,如果使用auto_increment作为自增主键,注意导出初始化脚本时不要设置起始值。
【强制】枚举类型使用tinyint类型
【强制】单表字段数不要太多,最多不要大于50个,且尽可能的少用字符型数据类型
【强制】日期的数据(不包含时分秒的),使用int(11)存储(如,yyyy、yyyyMM、yyyyMMdd),时间的数据((包含时分秒的)),使用datetime存储。
【强制】每个表都必须包含两个保留字段:create_time(创建时间),update_time(最后修改时间)creater varchar(50)(创建人),updater varchar(50)(修改人),设置为非空字段属性。这两个字段不包含额外的业务逻辑。
【强制】每个表设置is_del(0为未删除,1为删除)标记位字段,设置为非空,默认为0的字段属性,生产环境不允许物理删除。特殊表再议
【强制】表和列定义的时候必须加上comment,并能精确描述表和列的含义。类型、状态等字段必须明确给出各个值代表的含义;金钱等计量字段必须给出精确的计量单位;外键字段必须明确给出关联的表和字段
【强制】若需要JOIN的字段(连接键),字段名称、数据类型、长度和单位必须保持绝对一致,避免隐式转换
【强制】禁止使用TEXT、BLOB类型(大文本、大文件、大照片存放在文件系统),可以把文件放到文件服务器中,数据库只存url
【强制】不推荐使用enum,set。因为它们浪费空间,且枚举值写死了,变更不方便。推荐使用tinyint或smallint
【强制】如果有业务流转的加字段:业务流水号
【强制】如果一次操作多张表需要查看修改或者回退操作的,加操作流水号
【强制】禁止创建外键约束,外键约束由应用程序控制。外键会导致表与表之间耦合,update与delete操作都会涉及相关联的表,影响sql 的性能,甚至会造成死锁。
【强制】排序字段都不允许为空,并设置默认值。