胖达君的超级工具

数据库设计三范式与反范式

2019-08-21  本文已影响0人  我问你瓜保熟吗

MySql设计与优化系列笔记:
一、数据库设计三范式与反范式
二、MySql表设计与优化

第一范式:

1、数据库的所有字段都是单一属性,不能再被拆分
2、单一属性由基本的数据类型构成
3、数据库的表都是二维的(行和列)

错误示例:字段包含姓名、年龄、身高、出生年月日等多个属性,可以继续拆分

第一范式错误样表

正确示例
第二范式的问题:字段出现大量重复数据;存在新增异常、更新异常、删除异常;
当新增课程信息,但没有学生信息时,会出现部分字段空白,称为插入异常。
当高芳芳同学转学离开后,法律系课程信息也会被删除,这称之为删除异常
当李小明同学转系到法律系,除了系名要更改,系主任等字段也要同时跟着更改,这成为更新异常

第一范式正确样表

第二范式

目的:通过拆表解决第一范式中数据冗余的问题。单并没有解决增删改异常的问题
1、要符合第一范式
2、必须要有一个主键(一列或多列)
3、其它字段可由主键确定

第二范式样表,像学生信息和课程信息进行拆分,由主键进行关联
当删除高芳芳时,法律系也会被删除,产生删除异常。如果需要避免,则需要引入第三范式

第二范式样表

第三范式

1、要求符合第二范式
2、字段要直接依赖于主键,不允许简介依赖(第二范式样表中:系主任与学号无关,与系名挂钩)
3、

第三范式,分析数据关系拆分实体,产生主表与从表,解决了存在的增删改异常的问题,但是产生了大量的主从表

第三范式样表

反范式设计

范式设计 取出完整地址信息 反范式设计

只需要 select * from .. 即可

通过字段冗余,变成单表查询,降低sql复杂度
因存在字段冗余,当更新操作时,需要进行额外的从表更新操作,需要多次更新操作
不合理的凡范式设计会让表变得臃肿

上一篇 下一篇

猜你喜欢

热点阅读