第4讲 总第14讲 函数依赖及其公理 定理
基本内容
重点与难点
函数依赖
(1)函数依赖的定义
示例
(2)函数依赖的示例
表1
表2
(3)函数依赖的特性
(4)函数依赖的提取练习
完全函数依赖与传递函数依赖
(1)部分函数依赖与完全函数依赖的定义
(2)部分函数依赖与完全函数依赖的示例
(3)传递函数依赖的定义
(4)传递函数依赖的示例
函数依赖相关的几个重要概念
(1)候选键的定义
主键
主属性
超键
(2)候选键的示例
(3)外键
(4)逻辑蕴涵的定义
(5)闭包的定义
前言
基本内容
- 函数依赖
- 完全函数依赖与传递函数依赖
- 关于函数依赖的公理和定理
- 函数依赖集的最小覆盖
重点与难点
- 一组概念:函数依赖、部分函数依赖和完全函数依赖、传递函数依赖、候选键、非主属性、逻辑蕴涵、闭包、属性闭包、覆盖、最小覆盖等
- 关于函数依赖的公理和定理,相关的证明
- 求属性闭包的算法、求最小覆盖的算法
函数依赖
(1)函数依赖的定义
设$R(U)$是属性集合$U=\lbrace A_1,A_2,\cdots,A_n \rbrace $上的一个关系模式,$X$, $Y$是$U$上的两个子集,若对$R(U)$的任意一个可能的关系$r$, $r$中不可能有两个元组满足在$X$中的属性值相等而在$Y$中的属性值不等,则称**$X$函数决定$Y$**或$Y$函数依赖于$X$, 记作$X \to Y$。
示例
示例:$U=\lbrace 学号,姓名,年龄,班号,班长,课号,成绩 \rbrace$
- 学号函数决定姓名和年龄:
- $学号\to\lbrace 姓名,年龄\rbrace$
- 学号函数决定班长:
- $班号\to班长$
- 学号和课号函数决定成绩:
- $\lbrace 学号,课号\rbrace\to 成绩$
注:函数依赖的分析取决于对问题领域的限定和分析,取决于对业务规则的正确理解。
例如:问题领域中,学生是没有重名的,则有:年龄和家庭住址都函数依赖于姓名。
而在另一个问题领域中,学生是有重名的,则上述函数依赖是不成立的。
设计关系模式时,除给出属性全集外,还需给出数据依赖集合
(2)函数依赖的示例
示例:下列的表就是问题领域, 则存在的函数依赖有哪些呢?
表1
由于属性A上没有重复值,所以属性A可以决定B,A可以决定C
当B相同的时候,A有不同的值,所以B不能决定A
当B属性值相同的时候,C上的对应属性也是相同的,所以B能决定C
$A \to B$,$B \to C$,$A \to C$
表2
当属性A有相同的属性值时候,B上对应的属性值有不同值,所以A不能决定B
当属性A相同的时候,属性C对应的值也相同,所以A能决定C,$A \to C$
当属性A相同的时候,属性D对应的值也相同,所以A能决定D,$A \to D$
当属性B相同的时候,属性A对应的值不相同,所以B不能决定A,$B \nrightarrow A$
当属性B相同的时候,属性C对应的值不相同,所以B不能决定C
当属性B相同的时候,属性D对应的值相同,所以B能决定D,$B \to D$
当属性C相同的时候,属性A对应的值不相同,所以C不能决定A
(3)函数依赖的特性
(1)对$X \to Y$,但$Y\require{cancel} \cancel{\subset}X$, 则称$X\to Y$为非平凡的函数依赖;
(2)若$X \to Y$,则任意两个元组,若X上值相等,则Y上值必然相等,则称X为决定因素;
(3)若$X\to Y$ ,$Y\to X$, 则记作$X \leftrightarrow Y$,互相决定
(4)若Y不函数依赖于X,则记作$X \nrightarrow Y$;
(5)$X\to Y$,有基于模式R的,则要求对任意的关系r成立;有基于具体关系r的,则要求对某一关系r成立;
(6)如一关系r的某属性集X,r中根本没有X上相等的两个元组存在,则$X\to Y$恒成立;
(4)函数依赖的提取练习
请分析下列属性集上的函数依赖
$\textbf{学生(学号,姓名,班级,课号,课程名,成绩,教师,教师职务)}$
$\textbf{员工(员工码,姓名,出生日期,联系电话, 最后学历,毕业学校,培训日期,培训内容,职务变动日期,变动后职务 )}$
$\textbf{图书(书号,书名,出版日期,出版社,书架号,房间号)}$
$\textbf{客户(客户号,客户名称,类别,联系电话,产品编码,产品名称,数量,要货日期)}$
$\textbf{学生(学号,姓名,班级,课号,课程名,成绩,教师,教师职务)}$
- $学号\to \lbrace 姓名,班级 \rbrace$
- $课号\to 课程名$或者:
- $\lbrace班级,课号\rbrace\to 教师$
- $课号\to 教师$
- $\lbrace学号,课号\rbrace\to 教师$
- 这几个究竟选择哪一个,取决于对问题领域的理解.
- $\lbrace学号,课号\rbrace\rightarrow 成绩$
- $教师\to教师职务$
- $\lbrace班级,课号\rbrace\to教师$
$\textbf{客户(客户号,客户名称,类别,联系电话,产品编码,产品名称,数量,要货日期)}$
$客户号\to\lbrace客户名称,类别\rbrace$
$产品编码\to产品名称$
$\lbrace客户号,产品编码,要货日期\rbrace\to数量$
完全函数依赖与传递函数依赖
(1)部分函数依赖与完全函数依赖的定义
在$R(U)$中,
- 若$X\to Y$并且对于$X$的任何真子集$X’ $都有$X’ \nrightarrow Y$,则称$Y$完全函数依赖于$X$, 记为:$X\xrightarrow{f}Y$。
- 否则称Y部分函数依赖于$X$, 记为:$X\xrightarrow{f}Y$.
示例:$U=\lbrace学号,姓名,年龄,班号,班长,课号,成绩 \rbrace$
- $\lbrace学号,课号\rbrace \xrightarrow{f}U$
- 单独的学号不能决定U,单独的课号(真子集)不能决定U,所以是完全函数依赖
- $\lbrace学号,课号\rbrace \xrightarrow{p} 姓名$
- 单独的学号就可以决定姓名了,所以是部分函数依赖
- $\lbrace学号,课号\rbrace\xrightarrow{f} 成绩$
- 单独的学号(真子集),单独的课号(真子集)都不能决定成绩,所以是完全函数依赖.
部分依赖存在着非受控冗余
(2)部分函数依赖与完全函数依赖的示例
$学生(学号,姓名,班级,课号,课程名,成绩,教师,教师职务)$
- ${学号, 课号}\xrightarrow{f} U$; 但 ${学号, 课号}\xrightarrow{p} 姓名$
- ${学号, 课号}\xrightarrow{p} 课程名$
$员工(员工码,姓名,出生日期,联系电话, 最后学历,毕业学校,培训日期,培训内容)$
- ${员工码, 培训日期} \xrightarrow{p} U$;单独的员工码无法决定培训内容,培训日期可以决定培训内容.所以员工码加上培训日期来可以决定U
- ${员工码, 培训日期} \xrightarrow{p} {姓名,出生日期 }$,单独的员工码就可以决定该员工的姓名和出生日期了,所以是部分函数决定
$图书(书号,书名,出版日期,出版社,书架号,房间号)$
- $\lbrace书号,房间号,书架号\rbrace\to U$,书号可以决定书名,出版日期,出版社,
$客户(客户号,客户名称,类别,联系电话,产品编码,产品名称,数量,要货日期)$
$学生(学号,姓名,系号,系主任)$
(3)传递函数依赖的定义
在R(U)中,若$X\to Y$,$Y\to Z$ 且$Y\require{cancel} \cancel{\subset}X$,$Z\require{cancel} \cancel{\subset}Y$,$Z\require{cancel} \cancel{\subset}X$, $Y\nrightarrow X$, 则称Z传递函数依赖于X。
示例:$U=\lbrace学号,姓名,年龄,班号,班长,课号,成绩 \rbrace$
$学号\to班号$ ;$班号\to班长$,所以$学号\to班长$,(“班长”是传递依赖于 “学号”的。)
示例:$学生(学号,姓名,系号,系主任)$
$学号\to系号$; $系号\to系主任$,所以$学号\to系主任$(“系主任”是传递依赖于 “学号”的)
传递依赖存在着非受控冗余
(4)传递函数依赖的示例
$\textbf{商店(商店,商品,商品经营部,经营部经理)}$
- $\lbrace商店,商品经营部\rbrace\to经营部经理$
- $\lbrace商店,商品经营部\rbrace\to经营部经理$
所以有传递依赖:$\lbrace商店,商品\rbrace\to经营部经理$
$\textbf{学生(学号,姓名,班级,班主任,课号,课程名,成绩,教师,教师职务)}$
- $学号\to班级;班级\to班主任$;
- $\lbrace学号,课号\rbrace\to教师;教师\to教师职务$;
所以有传递依赖:$\lbrace学号,课号\rbrace\to教师职务$
$\textbf{员工(员工码,姓名,部门,部门经理)}$
- $员工码\to部门$
- $部门\to部门经理$
所以有传递依赖:$员工码\to部门经理$
图书(书号,书名,出版日期,出版社,书架号,房间号,管理员)
客户(客户号,客户名称,类别,联系电话,产品编码,产品名称,数量,要货日期)
函数依赖相关的几个重要概念
(1)候选键的定义
设K为R(U)中的属性或属性组合,若$K\xrightarrow{f}U$,则称K为(U)上的候选键(Candidate Key)。
- 唯一性
- 最小性
主键
(1)可任选一个候选键作为R的主键(Primary Key);
主属性
(2)包含在任一候选键中的属性称主属性(Prime Attribute),其他属性称非主属性;
超键
(3)若K是R的一个候选键,$S\supset K$, 则称S为R的一个超键(Super Key)。候选键是没有多余属性的超键,候选键带上任意个其他属性可被视为超键
唯一性,没有最小性
(2)候选键的示例
$\textbf{学生(学号,年龄,家庭住址,课程号,成绩,教师,教师职务)}$
学生(学号,年龄,家庭住址,课程号,成绩,教师,教师职务)
- 候选键:学号和课程号就可以决定所有的属性,所以学号和课程号就是一个候选键,$\lbrace学号,课程号\rbrace$
- 主属性:学号,课程号
- 非主属性:年龄,家庭住址,成绩,教师,教师职务.
$\textbf{商店(商店,商品,商品经营部,商品经营部经理)}$
候选键是??,非主属性是??
- 候选键:商店和商品可以决定商品经营部,商品经营部可以决定商品经营部经理,所以商店和商品可以决定所有的属性,所以候选键为商店和商品{商店,商品}
- 非主属性:商品经营部,商品经营部经理.
$\textbf{学生(学号,姓名,所属系别,系主任)}$
候选键是??,非主属性是??
候选键:学号
非主属性:姓名,所属系别,系主任
(3)外键
若R(U)中的属性或属性组合X并非R的候选键,但X却是另一关系的候选键,则称X为R的外来键(Foreign Key),简称外键。
示例:
$R=\lbrace合同号,合同名,签订日期,{\color{red}{供应商名}}\rbrace$
$S=\lbrace供应商名,地址,执照号,法人代表\rbrace$
合同号是关系R个候选键:$合同号\xrightarrow{f} \lbrace合同号,合同名,签订日期,供应商名\rbrace$
供应商名是关键S的候选键:$供应商名\xrightarrow{f}\lbrace供应商名,地址,执照号,法人代表\rbrace$
所以供应商名,在关系R中是外键
(4)逻辑蕴涵的定义
设F是关系模式R(U)中的一个函数依赖集合,X,Y是R的属性子集,如果从F中的函数依赖能够推导出$X\to Y$,则称F逻辑蕴涵$X\to Y$, 或称$X\to Y$是F的逻辑蕴涵。记作$F\models X\to Y$。
省略
(5)闭包的定义
被F逻辑蕴涵
的所有函数依赖
集合称为F的闭包(Closure),记作$F^+$