数据库设计那些事儿
序言:做工程过程中,总感觉数据库设计太草率了,每个表想的仅仅是如何将数据存起来,但有时候我觉得也应该想一下“有效存储”和“高效读取”。
数据库为什么要设计?
对数据进行有效地存储,高效地访问。
步骤:
需求分析——逻辑设计——物理设计——维护优化
一、需求分析
寻找实体
实体包含属性、唯一标识属性、存储特点
分析实体之间的关系
二、逻辑设计
ER图:实体——正方形、属性——圆形、菱形——关系
例如:
可能出现问题:操作操作异常(插入异常、更新异常、删除异常)和数据冗余
所以有了设计范式NF:第一范式、第二范式、第三范式和BC范式
- 第一范式:属性不可再分,也就是数据库的表都是二维表。
不能出现这样的:
- 第二范式:
对于单关键字的表都是符合第二范式的。
对于好几个属性组成关键字的表中,不能存在非关键字段对任意候选关键字段的部分函数依赖
解决办法:拆分关系表,每一个关键字带出相应属性组成新表
- 第三范式:不能存在非关键字段对任意候选关键字段的传递函数依赖
解决办法:拆分关系表
- BC范式:如果表是复合关键字,则复合关键字之间也不能存在函数依赖关系
解决办法:拆分关系表
三、物理设计
需要考虑的问题:
1.选择合适的数据库
2.定义数据库、表及字段的命名规则
3.根据所选的DBMS系统选择合适的字段类型
优先选择数字类型,其次是日期或二进制类型,最后是字符类型。相同级别优先选择占用空间小的数据类型。
4.反范式化设计:减少表的关联数量、提高读取效率
四、维护优化
1.维护数据字典
2.维护索引
3.维护表结构
4.在适当的时候对表进行水平拆分或垂直拆分
数据库设计绝没有那么简单,这里就先记录一下大概的东西。
参考慕课网:http://www.imooc.com/learn/117