前言
作为后端开发,我们经常需要设计数据库表。
今天给大家分享 21 个设计 MySQL 表的经验准则,希望对大家有所帮助。
1. 命名规范
数据库表名、字段名、索引名等都需要命名规范,可读性高(一般要求用英文),让别人一看命名,就知道这个字段表示什么意思。
比如一个表的账号字段,反例如下:
acc_no,1_acc_no,zhanghao
正例:
account_no,account_number
-
表名、字段名必须使用小写字母或者数字,禁止使用数字开头,禁止使用拼音,并且一般不使用英文缩写。
-
主键索引名为
pk_字段名
;唯一索引名为uk_字段名
;普通索引名则为idx_字段名
。
2. 选择合适的字段类型
设计表时,我们需要选择合适的字段类型,比如:
-
尽可能选择存储空间小的字段类型,就好像数字类型的
tinyint、smallint、int、bigint
,要从左往右开始选择。 -
小数类型如金额,则选择
decimal
,禁止使用float
和double
。 -
如果存储的字符串长度几乎相等,使用
char
定长字符串类型。 -
varchar
是可变长字符串,不预先分配存储空间,长度不要超过5000
。 -
如果存储的值太大,建议字段类型修改为
text
,同时抽出单独一张表,用主键与之对应。 -
同一表中,所有
varchar
字段的长度加起来,不能大于65535
。如果有这样的需求,请使用TEXT/LONGTEXT
类型。
3. 主键设计要合理
主键设计的话,最好不要与业务逻辑有所关联。有些业务上的字段,比如身份证,虽然是唯一的,一些开发者喜欢用它来做主键,但是不是很建议哈。主键最好是毫无意义的一串独立不重复的数字,比如UUID
,又或者Auto_increment
自增的主键,或者是雪花算法生成的主键等等。
4. 选择合适的字段长度
先问大家一个问题,大家知道数据库字段长度表示字符长度还是字节长度嘛?
其实在 mysql 中,
varchar
和char
类型表示字符长度,而其他类型的则都表示字节长度。比如char(10)
表示字符长度是 10,而bigint(4)
表示显示长度是4
个字节,但是因为 bigint 实际长度是8
个字节,所以bigint(4)的实际长度就是 8 个字节。
我们在设计表的时候,需要充分考虑一个字段的长度,比如一个用户名字段(它的长度 5~20 个字符),你觉得应该设置多长呢?可以考虑设置为 username varchar(32)
。字段长度一般设置为 2 的幂(也就是2 的 n
次方)。
5. 优先考虑逻辑删除,而不是物理删除
什么是物理删除?什么是逻辑删除?
-
物理删除:把数据从硬盘中删除,可释放存储空间。
-
逻辑删除:给数据添加一个字段,比如
is_deleted
,以标记该数据已经逻辑删除。
物理删除就是执行delete
语句,如删除account_no =‘666’
的账户信息 SQL 如下:
delete from account_info_tab whereaccount_no ='666';
逻辑删除呢,就是这样:
update account_info_ta