这是我参与「第五届青训营」伴学笔记创作活动的第12天
前言
由于开发前数据库设计的比较仓促,导致后续在开发过程中一些字段设计出现了问题,甚至某个表都出现了一些不可调和的问题。例如,在Video表下的update_time(更新时间)从来都没用过,占用了资源等等诸多问题。
无奈之下,我们只能重新设计整个数据库。接下来我会讲解一下数据库设计的理念,我们在建库建表时需要严格地遵守,这次还可以重新来过,下一次的结果很可能就无法挽回,这是我们谁都无法预料的事情,我们要把风险掌握在可控范围内。
数据库设计规范
数据库设计规范主要包括命名约定、数据库表基本规范、字段规范。我这里主要对前两种规范进行讲解。
1. 命名约定
- 禁止对数据库名称、表名称和字段名称使用 [MySQL] 保留字。
- 库名称、表名称和字段名称使用通用英语而不是编码,并且名称与业务和产品线相关联。对于汉语词汇的英文翻译,可以参考常用术语来选择对应的英文词汇。
- 库名、表名、字段名必须为名词的复数形式,并使用小写字母,多个名词加下划线分隔单词。MySQL有一个配置参数lower_case_table_names
- lower_case_table_names=1,即数据库表名以小写形式存储,不区分大小写。
- lower_case_table_names=0,则数据库表名存储为实际情况,大小写敏感。
- lower_case_table_names=2,则按原样存储,但以小写形式进行比较。
- 如果大小写和案例混合,则可能共存多个表,例如ABC,BAC,CAB等,这很容易导致混淆。
2. 库表基础规范
- 表字符集使用 UTF8MB4 字符集,校验字符集使用 utf8mb4_general_ci。
- 所有表都需要注释,除主键外的字段都需要注释
- 使用 InnoDB 存储引擎。
- 控制单个表中的字段数
- 默认存储引擎从 MySQL 5.5 版本开始为 InnoDB,从 5.7 版本开始放弃 MyISAM 用于系统表。
- 类状态类型应注明主值的含义,如“0-离线,1-在线”
总结
我们设计表结构以满足项目的需求。在我们完成要求的同时,我们应该合乎逻辑并减少冗余。