数据库表设计的十八条规范

1、命名

1.1 见名知意

好名字:简洁明了,一目了然。
坏名字:不清晰、难以理解,造成混乱。
反例:用户名称字段:yong_hu_ming、用户_namenameuser_name_123456789
正例:用户名称字段:user_name(名字控制在30个字符以内)

1.2 大写

建议:使用小写字母,统一风格。
反例:PRODUCT_NAMEPRODUCT_name
正例:product_name

1.3 分隔符

建议:单词间用下划线(_)分隔。
反例:productnameproductNameproduct nameproduct@name
正例:product_name

1.4 表名

建议:带上业务前缀,便于分类管理。
订单相关:order_payorder_pay_detail
商品相关:product_spuproduct_sku

1.5 字段名称

建议:统一命名规则。
状态:status
创建时间:create_time
修改时间:update_time
删除状态: delete_status
外键:主键名+_id_sys_no

1.6 索引名

主键:idsys_no
普通索引和联合索引:ix_前缀(ix_product_status)
唯一索引:ux_前缀(ux_product_code)

2、字段类型

选择原则:尽可能选择占用存储空间小的字段类型,提高查询性能。
字符串长度固定:使用char类型。
字符串长度差异大:使用varchar类型。
布尔值:使用bit类型。
枚举字段:使用tinyint类型。
主键:使用bigint类型。
金额:使用decimal类型。
时间字段:使用timestampdatetime类型。

3、字段长度

varchar和char:字符长度。
其他类型:字节长度。
例如:bigint(4)中的4表示显示长度,实际长度是8个字节。

4、字段个数

建议:每表字段个数不超过20个,避免单表过于复杂,提升维护性。

5、主键

建议:创建主键,使用AUTO_INCREMENT或外部算法(如:雪花算法)生成主键,减少业务耦合。

6、存储引擎

建议:使用MySQL8默认的InnoDB存储引擎,支持事务和行级锁,提高数据安全性和性能。

7、NOT NULL

尽量明确字段NOT NULL,并设置默认值,避免插入数据时出错。
例子:alter table product_sku add column brand_id int(10) not null default 0;

8、外键

建议:互联网系统中不使用外键,避免因外键约束导致的性能问题,转而通过应用层保证数据一致性。

9、索引

建议:创建主键索引、普通索引和联合索引,提高查询效率。单表索引个数建议不超过5个。
数据重复率高的字段(如状态)不建议单独创建索引。

10、时间字段

建议:优先使用datetime类型保存日期和时间,范围更大,与时区无关。

11、金额字段

建议:使用decimal类型保存金额,避免浮点数精度丢失。
例如:decimal(10,2)表示最多8位整数和2位小数。

12、JSON字段

建议:使用MySQL的json字段类型,方便保存和查询结构化数据,适用于数据值不固定的需求场景。

13、唯一索引

建议:创建唯一索引时,相关字段不能包含NULL值,避免唯一性约束失效。

14、字符集

建议:使用utf8mb4字符集,支持更多字符,包括emoji表情,避免使用utf-8、导致的存储问题。

15、排序规则

建议:根据业务场景选择字符排序规则。常用的有utf8mb4_general_ci(不区分大小写)和utf8mb4_bin(区分大小写)。

16、大字段

建议:大字段定义成varchar类型,避免浪费存储空间。
对于特别大的数据,如合同等,建议使用MongoDB等NoSQL数据库保存,并在MySQL中存储其ID 。

17、冗余字段

建议:适当冗余字段提升查询性能,但需综合评估,避免数据不一致问题。
例如:订单表中冗余存储用户名称。

18、注释

建议:为表和字段添加详细注释,便于理解和维护。
特别是状态字段,需要详细描述各个值的含义,避免后期维护困扰。


MXROC
科技改变生活

推广

 继续浏览关于 数据库命名设计 的文章

 本文最后更新于 2024/07/23 19:52:07,可能因经年累月而与现状有所差异

 本文链接: MXROC > 数据库 > 数据库表设计的十八条规范