21个MySQL表设计的经验准则

本文介绍了21个MySQL表设计的经验准则,包括命名规范、字段类型选择、主键设计、字段长度选择、逻辑删除优于物理删除、通用字段添加、字段数量限制、使用NOT NULL、索引设计、范式理论的应用、避免使用保留字、不使用外键、选用InnoDB存储引擎、字符集选择、枚举类型注释、时间类型选择、存储过程和触发器的使用、1:N关系设计、大字段处理、分库分表策略以及SQL编写优化技巧。
摘要由CSDN通过智能技术生成

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中, varcharchar 类型表示字符长度,而其他类型表示的长度都表示字节长度。比如 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';` 
为什么推荐用逻辑删除,不推荐物理删除呢?
  • 为什么不推荐使用物理删除,因为恢复数据很困难

  • 物理删除会使自增主键不再连续

  • 核心业务表 的数据不建议做物理删除,只适合做状态变更。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值