数据库的范式理论
先扫盲: 超键(super key): 在关系中能唯一标识元组的属性集称为关系模式的超键 候选键(candidate key) :不含有多余属性的超键称为候选键 主键(primary key) :用户选作元组标识的一个候选键程序主键 比如一个小范围的所有人,没有重名的,考虑以下属性 身份
先扫盲:
超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键
候选键(candidate key):不含有多余属性的超键称为候选键
主键(primary key):用户选作元组标识的一个候选键程序主键
比如一个小范围的所有人,没有重名的,考虑以下属性
身份证 姓名 性别 年龄
身份证唯一,所以是一个超键
姓名唯一,所以是一个超键
(姓名,性别)唯一,所以是一个超键
(姓名,性别,年龄)唯一,所以是一个超键
--这里可以看出,超键的组合是唯一的,但可能不是最小唯一的
身份证唯一,而且没有多余属性,所以是一个候选键
姓名唯一,而且没有多余属性,所以是一个候选键
--这里可以看出,候选键是没有多余属性的超键
考虑输入查询方便性,可以选择 身份证 为主键
也可以 考虑习惯 选择 姓名 为主键
--主键是选中的一个候选键
第一范式:
所有的属性都是不可分割的原子单位。
第二范式:
如果关系模式R(U,F)中的所有非主属性都完全依赖于任意一个候选关键字,则称关系R 是属于第二范式。
第三范式:
如果关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递信赖,则称关系R是属于第三范式的
BC范式:(BCNF)
如果关系模式R(U,F)的所有属性(包括主属性和非主属性)都不传递依赖于R的任何候选关键字,那么称关系R是属于BCNF的。
举例说明:
第一范式(1NF):
如果关系模式R的每个关系都是r的属性值不可分割的原子值,则称关系R是第一范式的模式.
不满足第一范式的情况:关系R(name,address,phone)
----------------------------------------------------------------------
name address phone
AA 山西太原 2204446
AA 山西太原 8350524
----------------------------------------------------------------------
说明:phone可以再分(可以分为phone1和phone2).
*************************************************************************************
第二范式(2NF):
1):局部依赖:
对于依赖关系 W->A (A依赖于W),如果存在X归属于W,且X->A(A依赖于X),那么称W->A是局部依赖;否则称W->A是完全依赖.
比如:
关系模式R(sno,cno,grade,tname,taddr)
sno:学生学号;cno:课程编号;grade:成绩;tname:老师姓名;taddr:老师住址
(sno,cno)->(tname,taddr)(sno,cno决定于tname以及cno)是局部依赖,因为cno->(tname,taddr).
2):二范式定义:
如果关系模式R满足第一范式,且每个非主属性完全依赖于侯选键,则称R满足第二范式.
不满足第二范式的情况:
关系模式R(sno,cno,grade,tname,taddr)
sno:学生学号;cno:课程编号;grade:成绩;tname:老师姓名;taddr:老师住址
----------------------------------------------------------------------
sno cno grade tname taddr
102 001 95 张老师 山西太原....
103 001 98 张老师 山西太原....
104 002 95 李老师 中国北京....
105 003 90 刘老师 中国上海....
----------------------------------------------------------------------
说明:出现相同的tname,taddr三次
消除方法:分解关系模式R
----------------------------------------------------------------------
R1(sno,cno,grade)
sno cno grade
101 001 100102 001 95
103 001 98
104 002 95
105 003 90
R2(cno,tname,taddr)
cno tname taddr
001 张老师 山西太原....002 李老师 中国北京....
003 刘老师 中国上海....
----------------------------------------------------------------------
*************************************************************************************
第三范式(3NF):
1):传递依赖:如果X->Y,Y->A,且Y不依赖X和A不是Y的子集,那么称X->A是传递依赖.(A传递依赖于X)
2):三范式定义:
如果关系模式R是1NF,且每个非主属性都不依赖于R的侯选键,那么称R满足第三范式.
关系模式R2(cno,tname,taddr)是2NF模式,如果在R2中存在cno->tname,tname->taddr,那么cno->taddr就是个传递依赖,及不满足第三范式.
----------------------------------------------------------------------
cno tname taddr
001 张老师 山西太原....
002 李老师 中国北京....
003 刘老师 中国上海....
004 张老师 山西太原....
005 张老师 山西太原....
----------------------------------------------------------------------
说明:张老师开设了3门课程,上面就出现了3个元组,教师地址重复了3次.
消除方法:分解关系模式R2
----------------------------------------------------------------------
R3(cno,tname)
cno tname
001 张老师002 李老师
003 刘老师
004 张老师
005 张老师
R4(tname,taddr)
tname taddr
张老师 山西太原....李老师 中国北京....
刘老师 中国上海....
----------------------------------------------------------------------
再补充一下:
第四范式(4NF)
第四范式禁止主键列和非主键列一对多关系不受约束
第五范式(5NF)
第五范式将表分割成尽可能小的块,为了排除在表中所有的冗余.