数据库范式
基本概念
函数依赖
x→yx\rightarrow yx→y,当确定xxx的时候,yyy也可以确定
例:
学号→\rightarrow→姓名,当知道了学号,就知道了学生姓名
学号,课程号→\rightarrow→成绩,当知道了学号和课程号,就可以推出该学生在该课的成绩。
非平凡依赖
无效依赖关系:
学号,课程号→\rightarrow→可以推出学号,其中没有有效信息
完全依赖和不完全依赖,记为→F,→P\stackrel{F}{\rightarrow},\stackrel{P}{\rightarrow}→F,→P
学号,课程号→\rightarrow→成绩,学号课程号缺一不可。
学号,课程号→\rightarrow→院系,只需要学号就可确定。
候选码和超码
超码 →P\stackrel{P}{\rightarrow}→P全键
侯选码 →F\stackrel{F}{\rightarrow}→F全键
主属性
包含在候选码中的称为主属性
范式
第一范式
表项不可再分
第二范式
非主属性完全依赖于主属性
例表:(学号,院系,宿舍,课程号,成绩),不满足第二范式
修改为: (学号,课程号,成绩),(学号,院系,住址)
第三范式
非主属性无传递依赖到码
非主属性依赖于其它非主属性时,必不满足第三范式。
上述例子修改结果符合第二范式,但是注意到有学号→院系→住址学号\rightarrow院系\rightarrow住址学号→院系→住址
(学号,课程号,成绩),(学号,院系,住址)进一步分为
(学号,课程号,成绩),(学号,院系)(院系,住址)
BCNF
消除主属性对码的部份依赖和传递依赖
(学生,课程,老师)
假设一个老师只上一门课,,则候选码有(学生,课程),(学生,老师)
(学生,课程)→老师,(老师)→课程(学生,课程)\rightarrow老师,(老师)\rightarrow课程(学生,课程)→老师,(老师)→课程,主属性对主属性部份依赖了。
拆为(学生,老师),(老师,课程)。
多值依赖
X→→YX\rightarrow\rightarrow YX→→Y,当X确定时,Y为固定的几个值
例:一个教师可以教多门课,则有
教师→→课程教师\rightarrow\rightarrow课程教师→→课程