课程名称:数据库设计那些事
课程章节:物理设计
课程讲师:sqlercn
课程内容:
步骤
- 选择合适的数据库管理系统
- 定义数据库、表及字段的命名规范
- 根据所选的DMBS系统选择合适的字段类型
- 反范式化设计(合理的冗余)
Mysql常用的存储引擎(推荐使用Innodb)
命名规则
应遵循以下原则
- 可读性原则
- 使用大写和小写来格式化名字以获得良好的可读性(例如使用大驼峰命名法将fullname命名为FullName)
- 表意性原则
- 通过名字可表示出对象的含义
- 对于表,表的名称应可体现表的存储内容
- 对于存储过程,过程的名称应可体现其功能
- 长命性原则
- 尽少的使用缩写,因为有些缩写是有歧义的
字段类型选择
- 当一个列可以选择多种数据类型时,应优先考虑数字类型,其次是日期或二进制类型,最后是字符类型
- 对于相同级别的数据类型,应优先选择占用空间小的数据类型
char和varchar如何选择
- 若存储的数据长度差不多一致,建议使用char,否则varchar
- 若列中最大数据长度小于50Byte,建议使用char(如果这个列很少使用,则基于节省空间和减少I/O的考虑,还是可以选择varchar)
decimal和float如何选择
- decimal存储精度高,若存储精确数据要使用decimal类型
- float存储空间小,若存储不精确数据(不需要精确到小数点后很多位)可选用float
如何选择主键
- 区分业务主键和数据库主键
- 业务主键用于标识业务数据,进行表与表之间的关联
- 数据库主键用于优化数据库存储,一些情况下业务主键和数据库主键可以相同,若表没有设置主键,Innodb会优先选择非空列唯一索引当做主键,否则会生成6个字节的隐含主键
- 根据数据库的类型,考虑主键类型是否要顺序增长
- 有些数据库是按主键的顺序逻辑存储的
- 主键的字段类型所占空间要尽可能的小
- 对于使用聚集索引方式存储的表,每个索引后都会附加主键信息
避免使用外键约束
但是相关联的列上一定要建立索引
避免使用触发器
- 会降低数据导入的效率、可能出现意想不到的数据异常、会使业务逻辑变得复杂
严禁使用预留字段
反范式化设计
为了性能和读取效率的考虑而适当的对第三范式的要求进行违反
课程收获
学到了在数据库物理设计阶段的一些范式、准则和综合考虑的设计方法