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_tab set is_deleted = 1 where account_no ='666';`
为什么推荐用逻辑删除,不推荐物理删除呢?
-
为什么不推荐使用物理删除,因为恢复数据很困难
-
物理删除会使自增主键不再连续
-
核心业务表 的数据不建议做物理删除,只适合做状态变更。