数据库设计的原则
创建表的属性
字符集选utf-8_mb4
排序规则:utf8mb4_0900_ai_ci
字段设计规则:
1.所有的表都必须有几个公共字段,方便联表查询。
自增ID
id必为主键,类型为unsigned bigint、单表时自增、步长为 1。若业务场景需要或未来有分库分表扩展需求,类型为unsigned bigint,建议采用唯一id设计,如SnowFlake雪花ID算法,请最后考虑UUID。
创建时间&修改时间
创建时间create_time和修改时间update_time这两个字段,每个表都必须有! 数据类型为datetime。
注意,一定要用数据的时间戳,自动生成。不要通过代码去操作这两个字段。推荐使用AOP去自动处理。
有了这两个字段。你可以追溯到数据的时间点,创建和修改的时间点。极大方便你在某些情况下的排查数据问题。
创建人&修改人
创建人create_by和修改人update_by两个字段,每个表也都必须有。数据类型为unsigned bigint(关联用户id)或varchar(关联登录名,确保不变)
还是和前面一个原因,出问题的时候可以追溯起因,否则遇上日志过久无法查看或者其他原因出现未知数据,都不知道数据怎么来的,需要花非常大的代价查看日志、代码等。
软删除
只能逻辑删除,不能物理删除。
2.id等数字类型的字段,不能只是bigint,应该是bigint unsigned,bigint有符号,bigint unsigned无符号
3.varchar默认长度为32,不要用255,用不了那么多
4.所有字段都必须是非空,必须有默认值,字符型的默认值为一个空字符值串,数字型的默认值为数值0。
5.数据库中所有布尔型中数值0表示为假;数值1表示为真
6.选择更简单的数据类型。例如,比较整数的代价小于比较字符,因为字符集和排序规则使字符比较更复杂
命名规范
1.总则
(1)所有命名采用26个英文大小写字母和0-9这十个自然数,加上下划线_组成。不能出现其他字符(注释除外)。
(2)长度不超过30个字符。
(3)实际名字尽量描述实体的内容,由英文单词、单词组合或单词缩写组成,不以数字和_开头。
(4)命名中禁止使用SQL关键字。
(5)对象名尽量短。
2.表
表以单数形式名词或名词短语命名。如果表名仅有一个单词,那么建议不使用缩写,而是用完整的单词。
数据表 t_inf_<系统标识>_<表标识>
编码表 t_cod_<系统标识>_<表标识>
系统表 t_sys_<系统标识>_<表标识>
统计表 t_sta_<系统标识>_<表标识>
临时表 t_tmp_<系统标识>_<表标识>
日志表 t_log_<系统标识>_<表标识>
3.字段
采用有意义的字段名,应该是易于理解,能表达字段功能的英文单词或单词缩写,一般不超过三个英文单词。
系统中所有属于内码的字段(仅用于表示唯一性和程序内部用到的标识性字段),名称取为:ID。
系统中属于是业务范围内的编号的字段,其代表一定的业务信息,这样的字段建议命名为CODE,其数据类型为VARCHAR,该字段需加唯一索引。
字段名不要与表名重复
不要在列的名称中包含数据类型。
4.主键
PK_<表名>