目录
参考:数据库设计的那些事
Ch1 需求分析
简介
What
数据库设计是根据业务系统的具体需要,结合我门所选用的DBMS(数据库管理系统),为这个业务系统构造出最优的数据存储模型,并建立好数据库中的表结构及表与表之间的关联关系的过程。使之能有效的对应用系统中的数据进行存储,并可以高效的对已经存储的数据进行访问。
Why
步骤
- 需求分析
- 逻辑设计
- 物理设计
- 维护优化
需求分析的重要性
- 1.了解系统中所要存储的数据
- 2.了解数据的存储特点
- 3.了解数据的生命周期
需求分析内容
- 1.实体及实体之间的关系(1对1,1对多,多对多)
- 2.实体所包含的属性有什么?
- 3.哪些属性或属性的组合可以唯一标识一个实体
需求分析实例
以一个小型的电子商务网站为例,在这个电子商务网站的系统中包括了几个核心模块: 用户模块,商品模块,订单模块,购物车模块,供应商模块。
- 用户模块
- 商品模块
- 订单模块
- 购物车模块
- 供应商模块
Ch2 逻辑设计
- 将需求转化为数据库的逻辑模型
- 通过ER图的形式对逻辑模型进行展示
设计范式
问题:操作异常(增、删、改)、数据冗余
第一范式(单一属性——拆分列)
第二范式(消除部分依赖——拆分表)
第三范式(消除传递依赖——拆分表)
BC范式(Boyce-Codd Normal Form, BCNF)(消除非平凡的函数依赖——拆分表)
Ch3 物理设计
数据库管理系统
- 成本、操作系统、开发语言
商业数据库(成本、 版权)
开源数据库
MySQL
- 存储引擎
- MyISAM(不支持事务)
- *Innodb(支持事务)
定义数据库、表及字段规范
- 命名规范:可读性、表意性、长名
- 字段类型:字符慢于数字、列长度要小
字段类型选择
- 存储空间
- 查询性能
char VS varchar
- 优先考虑char
- 50Byte以内,char,否则varchar
decimal VS float
- decimal:精确数据
- float:存储开销小
时间类型
- int:长度小,使用不方便,2038年限制 (生日)
- datetime:(订单时间)
- 时间粒度
主键
- 业务主键(标识业务)
- 数据库主键(优化存储)
外键
- 降低效率
- 增加成本
不建议使用
触发器
- 降低效率
- 数据异常
- 逻辑复杂
不建议使用
预留字段
- 类型未知
- 内容未知
- 维护成本
严禁使用
反范式化设计
- 减少表关联数量
- 增加读取效率
适度
反范式化
Ch4 维护优化
- 数据字典
- 第三方工具
- 备注字段
- 导出数据字典
- 索引
- 建立(where, group by, order by;可选择性高(重复少)的列放索引前面;数据类型不要太长)
- 维护(不要太多;定期维护索引碎片;
sql中不要使用强制索引
)
- 表结构
- 使用在线工具
- 维护数据字典
- 控制表宽度、大小
- 适合操作(批量操作、禁止使用select *、控制使用自定义函数、不要使用全文索引)
- 水平拆分、垂直拆分
- 垂直拆分(控制宽度、经常一起查询的列放一起、大字段拆分到附加表)
- 水平拆分(控制表大小、主键hash)
参考:
数据库设计的那些事