美文网首页
数据库表设计规范

数据库表设计规范

作者: HueyYao | 来源:发表于2021-01-08 23:09 被阅读0次

数据库表设计规范

1.1、主键:

  • 表必须有主键;
  • 不使用更新频繁的列做主键;
  • 尽量不选择字符串列做主键;
  • 不使用 UUID MD5 HASH 做主键;
  • 默认使用非空的唯一键。

1.2、如无特殊要求,建议都使用 InnoDB 引擎;

1.3、默认使用 utf8mb4 字符集,数据排序规则使用 utf8mb4_general_ci;

原因:utf8mb4 为万国码,无乱码风险;与 utf8 编码相比,utf8mb4 能支持 Emoji 表情。

1.4、所有表、字段都需要增加 comment 来描述此表、字段所表示的含义;

比如:data_status TINYINT NOT NULL DEFAULT ‘1’ COMMENT ‘1代表记录有效,0代表记录无效’。

1.5、如无说明,表必须包含 create_time 和 update_time 字段,即表必须包含记录创建时间和修改时间的字段;

1.6、用尽量少的存储空间来存数一个字段的数据:

  • 能用 int 的就不用 char 或者 varchar;
  • 能用 tinyint 的就不用 int;
  • 使用 UNSIGNED 存储非负数值;
  • 只存储年使用 YEAR 类型;
  • 只存储日期使用 DATE 类型。

1.7、存储精确浮点数必须使用 DECIMAL 替代 FLOAT 和 DOUBLE;

原因:在存储的时候,FLOAT 和 DOUBLE 都存在精度损失的问题,很可能在比较值的时候,得到不正确的结果。

1.8、尽可能不使用 TEXT、BLOB 类型;

原因:会浪费更多的磁盘和内存空间,非必要的大量大字段查询会淘汰掉热数据,导致内存命中率急剧降低,影响数据库性能。如果实在有某个字段过长需要使用 TEXT、BLOB 类型,则建议独立出来一张表,用主键来对应,避免影响原表的查询效率。

1.9、禁止在数据库中存储明文密码;

1.10、索引设计规范:

a、需要添加索引的字段

  • UPDATE、DELETE 语句的 WHERE 条件列;
  • ORDER BY、GROUP BY、DISTINCT 的字段(原因可复习第 6 节);
  • 多表 JOIN 的字段(原因可复习第 8 节)。

b、单表索引建议控制在 5 个以内;

c、适当配置联合索引;

比如方便查询能走覆盖索引,或者几个字段同时作为条件的概率很高时,当然还有其他很多种情况可以设置联合索引,具体可以复习第 13 节

d、业务上具有唯一性的字段,添加成唯一索引;

遇到过几次字段在业务场景上要求唯一,但是该字段在数据库里的数据却出现了重复。因此在代码层考虑外,还需要在 MySQL 上的对应字段添加唯一索引。

e、在 varchar 字段上建立索引时,建议根据实际文本区分度指定索引长度;

原因:可以降低索引所占用的空间,并且很多时候,比如字符串基本是长度大于 20,但是只要建立长度为 20 的索引,就已经有很高的区分度了。可以使用 count(distinct left(列名, 索引长度))/count(*) 的区分度来确定。

f、索引禁忌:

  • 不在低基数列上建立索引,例如:性别字段。
  • 不在索引列进行数学运算和函数运算(原因,做函数操作可能会导致使用不了索引,具体可以复习第 4 节

1.11、不建议使用外键;

原因:外键会导致表与表之间耦合,update 与 delete 操作都会涉及相关联的表,十分影响 sql 的性能,甚至会造成死锁。高并发情况下容易造成数据库性能。

1.12、禁止使用存储过程、视图、触发器、Event ;

原因:高并发的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性。

1.13、单表列数目建议小于 30;

自《一线数据库工程师带你深入理解 MySQL》

相关文章

  • mysql 设计规范

    MySQL数据库设计规范目录规范背景与目的设计规范2.1 数据库设计2.1.1 库名2.1.2 表结构2.1.3 ...

  • MySQL之数据类型的选择

    引用 分享一份大佬的MySQL数据库设计规范,值得收藏 MySQL 高性能表设计规范 选择原则 更小的通常更好更小...

  • 阿里数据库开发规范:谁还敢说你的数据库设计的“烂”

    数据库设计几个规范: 数据库命名规范、数据库基本设计规范、数据库索引设计规范、数据库字段设计规范、数据库SQL开发...

  • Mysql 规范

    Mysql 规范 数据库命名规范总结 数据库基本设计规范 索引设计规范 数据库字段设计规范 数据库SQL开发规范 ...

  • MySQL 大表优化

    1 数据库基本设计规范 1.1 所用的表使用InnerDB存储引擎 1.2 所有的 表都要有备注信息 1.3 要尽...

  • 数据库规范

    数据库设计规范 [if !supportLists]1.[endif]表名列名小写、以下划线分隔 [if !sup...

  • 数据处理不规范,DB泪两行。一份非常完整的 MySQL 规范【值

    一、数据库命令规范 二、数据库基本设计规范 三、数据库字段设计规范 四、索引设计规范 五、常见索引列建议 六、如何...

  • 数据库规范

    目录 一、数据库命令规范 二、数据库基本设计规范 三、数据库字段设计规范 四、索引设计规范 五、常见索引列建议 六...

  • mysql+mongo表结构设计规范

    1 mysql表结构设计规范 1.1 适用场景 存储主要业务信息,默认使用此数据库。 1.2 设计要求 (1)表名...

  • 数据库的优化方案及如何提高查询效率

    数据库优化方案 优化索引,sql语句,分析慢查询 设计表的时候严格按照数据库设计规范来设计数据库 使用缓存,把京城...

网友评论

      本文标题:数据库表设计规范

      本文链接:https://www.haomeiwen.com/subject/ysyqaktx.html