基本概念
函数依赖
x
→
y
x\rightarrow y
x→y,当确定
x
x
x的时候,
y
y
y也可以确定
例:
学号
→
\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
→
→
Y
X\rightarrow\rightarrow Y
X→→Y,当X确定时,Y为固定的几个值
例:一个教师可以教多门课,则有
教师
→
→
课程
教师\rightarrow\rightarrow课程
教师→→课程