关系模式的范式
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SLC不是一个好的关系模式
Sno Sdept Sloc Cno Grade
s1
教育
1栋
c1
(3) 数据冗余度大
如果一个学生选修了10门课程, 那么他的Sdept和Sloc值就要重复存储了10次。
(4) 修改复杂
例如学生转系,在修改此学生元组的Sdept值的同时, 还可能需要修改住处(Sloc)。
如果这个学生选修了K门课,则必须无遗漏地修改K个 元组中全部Sdept、Sloc信息。
1NF
SLC
Sno Grade Cno
Sdept
Sloc
SLC的码为(Sno, Cno) SLC满足第一范式。
非主属性Sdept和Sloc部分函数依赖于码(Sno, Cno)
问:关系SLC是否存在数据冗余和更新异常?
SLC不是一个好的关系模式
Sno s1 Sdept 教育 Sloc 1栋 Cno c3 Grade
分析该模式的码(主键)和对主键的依赖关系。 Sdept 教育 Sloc 1栋 Cno C1 Grade 86
Sno s1
s2 s3 s4 s5
教育 人文 人文 信息
1栋 2栋 2栋 3栋
C1 C1 C2 C2
82 81 93 75
1NF
例: 关系模式 SLC(Sno, Sdept, Sloc, Cno, Grade) Sloc为学生住处,假设每个系的学生住在同一个 地方。 函数依赖包括: (Sno, Cno) f Grade Sno → Sdept (Sno, Cno) P Sdept Sno → Sloc (Sno, Cno) P Sloc Sdept → Sloc
1304725**** 0731-889**** 1304725**** 0731-889****
赵康
会带来什么样的问题?
如果某个人有10个移动号码,而绝大多数人只有 1个移动号码,那么显然绝大多数人的移动号码 栏下的信息将是“空”,造成资源的浪费。 存在更新异常的问题
1NF
规范关系模式成为1NF范式的方法
方法3:变1个关系模式为多个关系模式
姓名 刘永 职工号 10112 家庭住址 湘潭市桃园路100号
序号 1 2
10113 赵康 长沙市雨花路1330号 增加一个通讯号码表
职工号
10112 10112 10113
ቤተ መጻሕፍቲ ባይዱ
序号
1 2 3
电话号码
1304732**** 0731-597**** 1304725****
四、传递函数依赖
定义5.3 在关系模式R(U)中,如果X→Y,Y→Z, 且Y X,Y→X,则称Z传递函数依赖于X。 传递 记为:X → Z or X→TZ
(注: 如果Y→X, 即X←→Y,则Z直接依赖于X。)
例: 在关系Std(Sno, Sdept, Mname)中,有: Sno → Sdept,Sdept → Mname Mname传递函数依赖于Sno
三、完全函数依赖与部分函数依赖
定义5.2 在关系模式R(U)中,如果X→Y,并且对于X
的任何一个真子集X’,都有
X’
Y, 则称Y完全函数依赖于X,记作X
f
Y。
例: 在关系SC(Sno, Cno, Grade)中, (Sno, Cno)
f
Grade
由于:Sno →Grade,Cno → Grade,
关系模式的数据冗余和更新异常
Sno s1 S2 S3 S4 S5 S6 S7 Sdept 教育 教育 教育 教育 教育 教育 教育 Mname 张三 张三 张三 张三 张三 张三 张三 Cname 数据库 数据库 数据结构 数据结构 C语言 C语言 C语言 Grade 2 2 2 2 2 2 2
在设计关系模式的时候,遵循什么样的规则才 能够避免出现数据冗余和更新异常呢?
SC
Grade
Sno
Sno
Cno
Sdept
Sloc
2NF 2NF的定义
若关系模式R↔1NF,并且每一个非主属性 都完全函数依赖于R的码,则R↔2NF。 例:SLC(Sno, Sdept, Sloc, Cno, Grade) ↔1NF
SLC(Sno, Sdept, Sloc, Cno, Grade) ↔ 2NF SC(Sno, Cno, Grade) ↔ 2NF SL(Sno, Sdept, Sloc) ↔ 2NF 练习:分析模式SCI(sno,cno,grade,credit)是否满 足2NF,如果不满足,如何使其满足?(链接相关文件)
三、完全函数依赖与部分函数依赖
若X→Y,但Y不完全函数依赖于X,则称 Y部分函数依赖于X,记作X P Y。 在关系SC(Sno, Cno, Grade,Sdept) (Sno,Cno) →Sdept是什么依赖?
(Sno,Cno) F Grade是完全函数依赖 (Sno,Cno) P Sdept是部分函数依赖 因为Sno →Sdept成立,且Sno是(Sno,Cno)的真子集
对于违反1NF的关系模式,如何进行修改呢?尤其是出 现重复的属性。
1NF
规范关系模式成为1NF范式的方法
方法1:强制性的规定一条记录的一个属性只能有一个值
职工号
10112 10113
序号 姓名
1 2
电话号码
1304732**** 1304725****
家庭住址
湘潭市桃园路100号 长沙市雨花路1330号
(1) 插入异常
假设(Sno=s102,Sdept=教育,Sloc=1栋)的学生 还未选课,
因课程号是主属性,因此该学生的信息无法插入SLC。
(2) 删除异常
假定某个学生本来只选修了3号课程这一门课。现在因 身体不适,他连3号课程也不选修了。 因课程号是主属性,此操作将导致该学生信息的整个元 组都要删除。
通讯工具类型
移动电话 固定电话 移动电话
4
10113
0731-889****
固定电话
1NF
第一范式是对关系模式的最起码的要求。 不满足第一范式的数据库模式不能称为 关系数据库。 但是满足第一范式的关系模式是不是一 个好的关系模式,也就是能够避免数据 冗余和更新异常的出现呢?
1NF
例: 关系模式 SLC(Sno, Sdept, Sloc, Cno, Grade) Sloc为学生住处,假设每个系的学生住在同一个 地方。
1NF
原因
SLC(Sno, Sdept, Sloc, Cno, Grade) Sdept、 Sloc部分函数依赖于码。
解决方法
SLC分解为两个关系模式,以消除这些部分函数依赖
SC(Sno, Cno, Grade) SL(Sno, Sdept, Sloc)
1NF
SLC Sno Grade Cno SL Sloc Sdept
1NF 2 NF 3 NF BCNF 4 NF 5 NF
某一关系模式R为第n范式,可简记 为R↔nNF。
1NF
1NF的定义 如果一个关系模式R的所有属性都是不可分的 基本数据项,表中的每一行,有且仅仅有唯一 的行值,则R↔1NF。 例:职工表,规定不同职工有不同的职工号
姓名
Sno S1 S2 S3 S4 S5 S6 S7 …… Sdept 教育 教育 教育 教育 教育 教育 教育 …… Sloc 1栋 1栋 1栋 1栋 1栋 1栋 1栋 ……
SL
2NF
例:2NF关系模式 SL(Sno, Sdept, Sloc)中
函数依赖:
Sno→Sdept Sdept→Sloc Sno→Sloc Sloc传递函数依赖于Sno,即 SL中存在非主属性对码的传递 函数依赖。
可以知道(SNO,CNO)能够决定R的全部属 性,并且是1个候选键。
二、平凡函数依赖与非平凡函数依赖
在关系模式R(U)中,对于U的子集X和Y,
如果X→Y,但Y X,则称X→Y是非平凡的函数依赖 若X→Y,但Y X, 则称X→Y是平凡的函数依赖 例:在关系SC(Sno, Cno, Grade)中, 非平凡函数依赖: (Sno, Cno) → Grade 平凡函数依赖: (Sno, Cno) → Sno (Sno, Cno) → Cno
2NF(续)
采用投影分解法将一个1NF的关系分解为多个 2NF的关系,可以在一定程度上减轻原1NF关 系中存在的插入异常、删除异常、数据冗余度 大、修改复杂等问题。 将一个1NF关系分解为多个2NF的关系,并不 能完全消除关系模式中的各种异常情况和数据 冗余。
2NF
例:2NF关系模式SL(Sno, Sdept, Sloc)中
刘永 赵康 赵康
序号
1 2 3
职工号
10112 10113 10113
电话号码
1304732**** 1304725**** 1304725**** 0731-597**** 0731-889**** 0731-889****
家庭住址
湘潭市桃园路100号 长沙市雨花路1330号 长沙市雨花路1330号
SD
DL
3NF
3NF的定义
定义5.8 关系模式R<U,F> 中若不存在这样 的码X、属性组Y及非主属性Z(Z Y), 使得 X→Y,Y → X,Y→Z,成立,则称R<U,F> ↔ 3NF。 例, SL(Sno, Sdept, Sloc) ↔ 2NF SL(Sno, Sdept, Sloc) ↔ 3NF SD(Sno, Sdept) ↔ 3NF DL(Sdept, Sloc) ↔ 3NF
Y=f(x)
R(SNO, SNAME,CNO,GRADE,CNAME,TNAME,TAGE)
例如:
R(SNO, SNAME,CNO,GRADE,CNAME,TNAME,TAGE)
规则:
1个学生选1门课有1个成绩;
每个学生有1个姓名; 每个课程号仅有1门课程号名,每门课程只 有1个任课教师
5.2.3 关系模式的范式
范式是符合某一种级别的关系模式的集合。 范式的种类:
第一范式(1NF) 第二范式(2NF) 第三范式(3NF) BC范式(BCNF) 第四范式(4NF) 第五范式(5NF)
范式化的过程就是从数据存储中移去数据冗余, 消除异常的过程。
5.2.3 范式
各种范式之间存在联系:
3NF
将一个2NF关系分解为多个3NF的关系后,并不 能完全消除关系模式中的各种异常情况和数据冗 余。
若R↔3NF,则R的每一个非主属性既不部分 函数依赖于候选码也不传递函数依赖于候选码。
如果关系模式R符合3NF,但它的主属性对候
刘永 赵康
这样做会带来什么问题? 信息损失
1NF
规范关系模式成为1NF范式的方法
方法2:将重复的属性值分解为多个属性
职工号 移动号码 固定电话 家庭住址
湘潭市桃园路100号 长沙市雨花路1330号 长沙市雨花路1330号
序号
姓名
1
2 3
刘永
赵康
10112
10113 10113
1304732**** 0731-597****
3NF
若R↔3NF,则R的每一个非主属性既不部分函
数依赖于候选码也不传递函数依赖于候选码。
如果R↔3NF,则R也是2NF。
3NF
到此为止,进过修改后的模式是否不存 在冗余和异常了呢?
SLC(Sno, Sdept, Sloc, Cno, Grade) ↔1NF SLC(Sno, Sdept, Sloc, Cno, Grade) ↔ 2NF * SC(Sno, Cno, Grade) ↔ 2NF SL(Sno, Sdept, Sloc) ↔ 2NF SL(Sno, Sdept, Sloc) ↔ 2NF SL(Sno, Sdept, Sloc) ↔ 3NF * SD(Sno, Sdept) ↔ 3NF * DL(Sdept, Sloc) ↔ 3NF
SL Sdept
Sno Sloc
函数依赖图
2NF
解决方法
采用投影分解法,把SL分解为两个关系模式, 以消除传递函数依赖:
SD(Sno, Sdept)
DL(Sdept, Sloc)
SD的码为Sno, DL的码为Sdept。
2NF
SD的码为Sno, DL的码为Sdept。 Sno Sdept Sdept Sloc
5.2.1 函数依赖
一、函数依赖
二、平凡函数依赖与非平凡函数依赖
三、完全函数依赖与部分函数依赖
四、传递函数依赖
一、函数依赖
定义5.1 设R(U)是一个属性集U上的关系模式,X和Y
是U的子集。 若对于R(U)的任意一个可能的关系r,r中不可能存在
两个元组在X上的属性值相等, 而在Y上的属性值不等,
则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。 X称为这个函数依赖的决定属性集(Determinant)。