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’;
复制代码
为什么推荐用逻辑删除,不推荐物理删除呢?
- 为什么不推荐使用物理删除,因为恢

本文总结了21个MySQL表设计的经验准则,包括命名规范、字段类型选择、主键设计、字段长度考虑、优先使用逻辑删除、通用字段添加、避免字段过多、使用NOT NULL、索引设计、避免3NF、避免保留字、不使用外键、选择INNODB引擎、统一字符集、枚举类型注释、时间类型选择、不建议使用存储过程、1:N关系设计、大字段处理、分库分表策略以及SQL编写优化经验。
最低0.47元/天 解锁文章
665

被折叠的 条评论
为什么被折叠?



