第4章 范式理论
• 主属性:包含在一个候选码中的属性,称作主属性。
包含在任何一个候选键中的属性,叫主属性(Prime Attribute)。 不包含在任何主键中的属性称为非主属性(Nonprime Attribute),或 非键属性(Non-key Attribute)。
• 主码,简单地说,在一个关系表中主码能够唯一地标 识每一个元组。也就是说,元组在主码属性上是不能 有重复的。例如,把学生表的学号当主码的话,就不 能有两个学号是一样的学生。 主码是一个属性或属性 组。 • 候选码,一个关系表里只能有一个主码,成为主码的 条件是:能够唯一地标识每一个元组。凡是达到这个 条件的属性,都是候选码。主码就是从候选码里选出 来的。 主属性,当主码只有一个属性时,那主属性自 然是主码了。当主码是一个属性组时,这个属性组包 含的属性都是主属性。 换一种说法,非主属性就是除 开主码以外的属性。
• 主码与外部码提供了一个表示关系间联系的手段。 • create table 表名( 主码 列名 数据类型 [,列名 数据类型]……
[,primary key(列名 [,列名] …)]
[,foreign key (列名 [,列名] …) references 表名 (列名 [,列名] …)])
外码
6.2函数依赖练习
A 1 4 5 B 2 2 3 C 3 3 3
• 找出可能的函数依赖。
6.2函数依赖练习
有一个关于学生选课、教师任课的关系模式: R(S#, SNAME, C#, GRADE, CNAME, TNAME, TAGE) 属性分别表示学生学号、姓名、选修课程的课程号、成绩、 课程名、任课教师姓名和年龄等意义。 * 如果规定,每个学号只能有一个学生姓名,每个课程号只 能决定一门课程,那么可写出哪些形式的FD?
6.3关系规范化
• 关系数据库范式理论是数据库设计的一种理论指南和 基础,其既作为数据库设计优劣的判断依据,也可预 测数据库系统可能出现的问题。 • “范式” 是数据库设计过程中将要依据的准则,数 据库结构必须满足这些准则,这些准则被称为规范化 形式;在数据库设计过程中,对数据库进行检查和修 改并使之符合范式的过程叫规范化。 • 范式按照规范化的级别分为5种: • 第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、 第四范式(4NF)、第一范式(5NF)。 • 数据库设计过程中通常需要用到的是前三类范式。
6.1关系数据库设计中存在的问题
• 问题:麻烦! 好麻烦!!!
–插入异常: ① 元组插不进去; ② 插入一个元组却要求插入多个元组。 –删除异常: ① 删除时删掉了其他信息; ② 删除一个元组却删除了多个元组。 更新异常: 更新一个元组却要求更新多个元组。 数据冗余: 同一个数据在系统中多次重复出现。
举例:
例 关系Std(Sno, Sdept,Mname)中,有
Sno Sdept , Sdept Mname, Sno
传递
Mname
【例】关系模式R(学号,姓名,出生年月,系编号,系负责人) 在此关系模式中有如下函数依赖: 学号→系编号 系编号→学号 系编号→系负责人 因此,在R中存在传递函数依赖学号 T (相当于X→Y) (相当于Y→X) (相当于Y→Z) 系负责人。
例2:一个学校数据库中的唯一关系模式Student(U,F ) , 分解为三个关系模式 插入异常 其中 U={Sno,Sdept,Mname,Cname,Grade} Student(Sno,Sdept,Sno->Sdept); 不能插入一个没有 SC(Sno,Cname,Grade,(Sno,Cname)F={Sno->Sdept ,Sdept ->Mname, 数据冗余太大 学生的系 >Grade); (Sno,Cname) ->Grade } 系主任出现的次数
6.3关系规范化
• 定义
– 范式是对关系的不同数据依赖程度的要求。 – 通过模式分解将一个低级范式转换为若干个高 级范式的过程称作规范化(概念的纯粹化)。
2NF 3NF BCNF 4NF
5NF
第一范式(1NF)
• 定义
关系中每一分量不可再分。即不能以集合、 序列等作为属性值。
6.2函数依赖
建立一个描述学校教务的数据库:
学生的学号(Sno)、所在系(Sdept) 系主任姓名(Mname)、课程名(Cname) 成绩(Grade)
单一的关系模式 : Student <U、F>
U ={ Sno, Sdept, Mname, Cname, Grade }
根据如下描述写出依赖关系: ⑴ 根据学号可以确定学生的姓名; ⑵ 一个系有若干学生,但一个学生只属于一个系;
第6章 范式理论
目 录
本章要点 ● 数据库规范化问题的提出和主要内容 ● 函数依赖 ● 关系模式的分解 ● 关系模式的范式 教学目标 ●了解数据库规范化问题的产生和规范化的主要内容 ● 掌握函数依赖的相关概念 ● 熟悉关系模式的分解 ● 掌握关系模式的范式的概念及规范化过程
6.1关系数据库设计中存在的问题
Dept(Sdept,Mname,Sdept->Mname);
Sno
和该系学生选课总 Why? 数相同 某些数据依赖引起的! Cname Grade
删除异常
Sdept Mname:系主任
Mname
删除某系的一个学 生时(如毕业)会 删除系的相关信息
• 完全函数依赖:若函数依赖X Y成立,且X是能够推出Y的 最小集合,即不存在X的真子集Z,使Z Y成立,则称Y完全 函数依赖于X,简称Y完全依赖于X,记做 X Y ,否则称Y 部分函数依赖于X,简称Y部分依赖于X,记做 X Y
– 插入异常:如果没有职工具有8级工资,则8级工 资的工资数额就难以插入。 – 删除异常:如果仅有职工赵明具有4级工资,如果 将赵明删除,则有关4级工资的工资数额信息也随 之删除了。 – 数据冗余:职工很多,工资级别有限,每一级别 的工资数额反复存储多次。 – 更新异常:如果将5级工资的工资数额调为620, 则需要找到每个具有5级工资的职工,逐一修改。
6.2 函数依赖(Functional Dependency) 回顾:函数——熟悉的概念。 Y=f(x):x和Y之间数量上的对应关系。 给定x值,Y值与之对应。称x函数决定Y,或Y 函数依赖于x。 在关系数据库中讨论函数或函数依赖注 重的是语义上的关系。 如:省=f(城市) Y=f(x)
6.2函数依赖
• 外码:属性或属性组X不是关系模式R的码(既不是 主码也不是候选码),但X是另一个关系模式的码, 则称X是R的外部码,也称外码(Foreign key)。
• 如在SC(Sno,Cno,Grade)中,Sno不是码,但Sno 是关系模式S(Sno,Sdept,Sage)的码,则Sno是关 系模式SC的外部码
6.3函数依赖 • 候选码:
– 若关系中的某一属性组的值能唯一的标识 一个元组,而其任何真子集都不能再标识,则 工人(工号,身份证号,姓名,性别,部门).显然工号和身份证号 称该属性组为候选码。 都能够唯一标示这个关系,所以都是主属性,我们选取工号为 主码,那么身份证号就是候选码,反之,我们选择身份证号为 – 简单的说候选码就是没有被选为主码的主 主码,也可以让工号为候选码. 属性,当一个关系有多个属性可以唯一标示 时,就选取一个属性或者属性组为主码,剩下 的属性或属性组就称为候选码.
函数依赖:任给R(U),U为属性集,x、y为U的子集,如果 对于x的每个值,y有唯一确定的值与之对应,则称x决定y, 或y函数依赖于x。记为:x→y。 例1:关系模式Student(Sno,Sname,Ssex,Sage,Sdept) 中 , Sno函数决定Sname和Sdept ,或Sname和Sdept函数依赖于 Sno,记为 Sno -> Sname , Sno->Sdept 注:函数依赖是属性间的一种联系
SNo→SName SNo→SDept
SDept→MName
⑶ 一个系只有一名主任;
⑸ 每个学生所学的每门课程都有一个成绩。
⑷一个学生可以选修多门课程,每门课程有若干学生选修; (SNo,CName)→Score
F={SNo→SName, SNo→SDept, SDept→MName, (SNo,CName)→Score}
f
p
例:(SNo,CName)→SName SNo→SName (SNo,CName)→Score
(S N o , C N a m e ) S c o re
f
(S N o , C N a m e ) S N a m e
p
【例】有一关系模式S(学号,姓名,系名称,出生年月)。 在S中存在如下完全函数依赖: 学号 F 系名称,学号 F 出生年月 通常记为 学号→系名称,学号→出生年月 若无重名还存在学号←→姓名函数依赖
S#→SNAME C#→CNAME * 每个学生每学一门课程,有一个成绩,那么可写出什么形 式的FD? (S#,C#)→GRADE * 还写出其他什么形式的FD? C#→(CNAME, TNAME, TAGE) TNAME→TAGE
6.2函数依赖练习
• 设关系模式R(A,B,C,D),在R的关系中,属性值间有这样 的联系: (1) A值与B值有一对多的联系,即每个A值有多个B值 与之联系,而每个B值只有一个A值与之联系; (2) C值与D值之间有一对一联系,即每个C值只有一个 D值与之联系,每个D值只有一个C值与之联系。 试根据这些规则写出相应的函数依赖。 根据条件(1),有:B→A 根据条件(2),有:C→D 和 D→C
6.1关系数据库设计中存在的问题
• 解决之道:分解! 再分解!!! 原来数据库设计可以如此简单!
• 职工表
职工 赵明 钱广 孙志 李开 周祥 级别 4 5 6 5 6
级别表
级别 4 5 6 工资 500 600 700