SQL中的范式 数据库中范式 SQL教程(六)
1. 什么是范式
关系数据库中的关系是要满足一定的要求的,满足不同程度的要求称为不同的范式。一个低一级的范式经过模式分解可以转换为高一级的范式集合。这种叫做规范化。
2.第一范式
每一列都是不可再分的数据单元。
如:学生表中,有3个字段 学号 姓名 家庭地址(XXX省XXX市),由于地址字段是可以再拆分的所以不满足第一范式。
改造为:学号 姓名 出生省份 出生城市既满足第一范式
3.第二范式
满足第一范式,且每一个非主属性完全依赖于一个候选码
如:学生表中 有 学号 姓名 选课号 出生日期 成绩 五个字段, 其中学号为主键,成绩并不依赖与学号,所以不满足第二范式。应该删除选课号,然后构建一张选课表。
4.第三范式
每一个非主属性既不传递依赖于码也不部分依赖于码。
如:学生表中 有 学号 姓名 学院 宿舍楼层 其中院系依赖与学号, 宿舍楼层依赖与学院。出现了宿舍楼层对学号的传递依赖。所以不满足第三范式。
进行改表:table1:学号 姓名 学院 ; table2:学院 楼层
5.BCNF BC范式
所有非主属性对每一个码都是完全依赖的
所有主属性对不包含他的每一个码都是完全依赖的
没有任何一组属性依赖与非码的任何一组属性。
如 学生表 学号 姓名 年龄 班级 在这个表中每个属性都是不可再分的,且每个属性都依赖与学号, 并且属性之间不存在传递依赖, 所以属性第三范式。并且所有属性都依赖于学号。
所以该表满足BC范式。区别第三范式和BC范式的区别就是看除了候选码外还有没有其他属性能够完全依赖与非码的属性。
6.第四范式
四范式就是指属性间不允许有非平凡且非函数依赖的多值依赖。什么是多值依赖,比如在一个学生表中 学号 姓名 选课号, 在这个表中每个值都是完全依赖于主码。但是一个学生会选择多门课,
这就产生了多值依赖。