工学数据库系统原理-第11章课件_第1页
工学数据库系统原理-第11章课件_第2页
工学数据库系统原理-第11章课件_第3页
工学数据库系统原理-第11章课件_第4页
工学数据库系统原理-第11章课件_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关系数据库的规范化设计是指面对一个现实问题,如何选择一个比较好的关系模式集合,即应该构造几个关系模式,每个关系由哪些属性组成。

规范化设计理论主要包括三个方面的内容:数据依赖、范式和模式设计方法。其中数据依赖起着核心的作用。数据依赖研究数据之间的联系,范式是关系模式的标准,模式设计方法是自动化设计的基础。规范化设计理论对关系数据库结构的设计起着重要的作用。

第11章关系数据规范化理论P2501 关系数据库的规范化设计是指面对一个现实问题,如何选择一个比例11-1设有一个关系模式R(TNAME,ADDRESS,CNO,CNAME),其属性分别表示教师姓名、教师地址、任教课程的编号和课程名。TNAMEADDRESSCNOCNAMEt1a1c1n1t1a1c2n2t1a1c3n3t2a2c4n4t2a2c5n2t3a3c6n4

在数据库设计中,如果一个关系模式设计得不好,就会出现像文件系统一样的数据冗余、异常、不一致等问题。图11.12例11-1设有一个关系模式R(TNAME,ADDRESS,该模式出现的问题有:

(1)数据冗余:如果一个教师教几门课程,那么这个教师的地址就要重复几次存储。

(2)操作异常:由于数据的冗余,在对数据操作时会引起各种异常:

①修改异常。例如教师t1教三门课程,在关系中就会有三个元组。如果他的地址变了,这三个元组中的地址都要改变。若有一个元组中的地址未更改,就会造成这个教师的地址不惟一,产生不一致现象。

3该模式出现的问题有:3②插入异常。如果一个教师刚调来,尚未分派教学任务,那么要将教师的姓名和地址存储到关系中去时,在属性CNO和CNAME上就没有值(空值)。在数据库技术中空值的语义是非常复杂的,对带空值元组的检索和操作也十分麻烦。

③删除异常。如果在是上图11.1中要取消教师t3的教学任务,那么就要把这个教师的元组删去,同时也把t3的地址信息从表中删去了。这是一种不合适的现象。4②插入异常。如果一个教师刚调来,尚未分派教学任务,TNAMEADDRESSTNAMECNOCNAMEt1a1t1c1n1t2a2t1c2n2t3a3t1c3n3

t2c4n4

t2c5n2

t3c6n4图11.2关系模式分解的实例

(a)关系模式R1的实例

(b)关系模式R2的实例

可以说,关系模式R不是一个好的模式。一个“好”的模式应当不会发生插入异常、删除异常、更新异常,数据冗余应尽量少。

规范化原则:“关系模式有操作异常或冗余问题,就分解它。”是否算最佳分解?那末,什么样的关系模式是最优的?标准是什么?如何实现?5TNAMEADDRESSTNAMECNOCNAMEt1a1t

如何构造合适的关系模式?

应构造几个关模式?

每个关系模式由哪些属性组成?

这就关系到数据库的逻辑设计问题6 如何构造合适的关系模式?

应构造几个关模式?

每个关系X函数决定Y,或Y函数依赖于X可表示为:X→Y如果有一个关系模式R(A1,A2,…,An),X和Y为{A1,A2,…,An}的子集,那么对于关系R中的任意一个x值,都只有一个y值与之对应,则称X函数决定Y,或Y函数依赖于X11.1.1函数依赖的基本概念11.1函数依赖P2487X函数决定Y,或Y函数依赖于X可表示为:11.1.1函数依赖函数依赖是属性间基本的一种依赖,它是关键码概念的推广。

定义1

设有关系模式R(U),X和Y是属性集U的子集,若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖(FunctionalDependency,简记为FD)于X,记作X→Y。FD是对关系模式R的一切可能的关系r定义的。对于r的任意两个元组,如果X值相同,则要求Y值也相同,即对一个X值有唯一个Y值与之对应。该定义类似于数学中的单值函数定义。

8函数依赖是属性间基本的一种依赖,它是关键码概念的推广。8

例11-2:有一个关于学生选课、教师任课的关系模式:

R(SNO,SNAME,CNO,GRADE,CNAME,TNAME,TAGE) 属性分别表示学生学号、姓名、选修课程的课程号、成绩、课程名、任课教师姓名和年龄等意义。 如果规定,每个学号只能有一个学生姓名,每个课程号只能决定一门课程,那么可写成下列FD形式:

SNO→SNAME CNO→CNAME 每个学生每学一门课程,有一个成绩,那么可写出下列FD:

(SNO,CNO)→GRADE 还可以写出其他一些FD:

CNO→CNAME,TNAME,TAGE)TNAME→TAGE注意:函数依赖不是指关系R的某个或某些关系满足的约束条件,而是指R的一切关系均要满足的约束条件。9 例11-2:有一个关于学生选课、教师任课的关系模式:对于函数依赖的定义注意以下三点:⑴函数依赖是一个基于关系模式(不是一个关系模式的特定实例)的函数概念,即如果一个关系模式R中存在函数依赖X→Y,则要求该模式的所有具体关系都满足X→Y。

⑵函数依赖不取决于属性构成关系的方式(即关系结构),而是关系所表达的信息本身的语义特性,我们只能根据这种语义信息确定函数依赖,没有其他途径。⑶函数依赖是数据库设计者对于关系模式的一种断言或决策,即在设计关系型数据库时不仅要设计关系结构,而且要定义数据依赖的条件,限制进入关系的所有元组都必须符合所定义的条件,否则拒绝接受输入。10对于函数依赖的定义注意以下三点:10

11.1.2一些术语和符号P249设有关系模式R(A1,A2,…,An),X和Y为(A1,A2,…,An)的子集,则有以下结论:(1)如果X→Y,但Y不包含于X,则称X→Y是非平凡的函数依赖。(2)如果Y函数不依赖于X,则记为XY。(3)如果X→Y

,则称X为决定因子。(4)如果X→Y

,并且,则Y→

X,记XY(5)如果X→Y

,并且对于X的任意一个真子集X’都有X’→Y,则称Y完全函数依赖于X,记为XfY。如果X’→Y成立,则称Y部分依赖于X,记为XpY1111.1.2一些术语和符号P249设有关系模式R

(6)如果X→Y(非平凡的函数依赖,并且Y→

X)、Y→

Z,则称Z传递函数依赖于X。例11-3:P249例11.111.212(6)如果X→Y(非平凡的函数依赖,并且Y→X)、11.2关系规范化P251

设用U表示关系模式R的属性全集,即U={A1,A2,…,An},用F表示关系模式R上的函数依赖集,则关系模式R可表示为R(U,F)。1、候选码设K为R(U,F)中的属性,若KfU,则K为R的候选码(K为决定R全部属性值的最小属性组)。11.2.1关系模式中的码

1311.2关系规范化P251设用U表示关系模式R的属性主码:关系R(U,F)中可能有多个候选码,则选其中一个作为主码全码:候选码为整个属性组主属性:在R(U,F)中,包含在任一候选码中的属性非主属性:在R(U,F)中,不包含在任一候选码中的属性例11-4:P251例11.3和11.41414

2、外码用于在关系表之间建立关联的属性(组)称为外码。1515

关系模式的好与坏,用什么标准衡量?这个标准就模式的范式(NormalForms,简记为NF)。范式的种类与数据依赖有着直接的联系,基于FD的范式有1NF、2NF、3NF、BCNF等多种。在不提及FD时,关系中是不可能有冗余的问题,但是当存在FD时,关系中就有可能存在数据冗余问题。1NF是关系模式的基础;2NF已成为历史,一般不再提及;在数据库设计中最常用的是3NF和BCNF。11.2.2范式P251

16关系模式的好与坏,用什么标准衡量?这个标准就模式的范式(

对于各种范式之间的联系有:5NF4NF2NFBCNF3NF1NF范式越高、规范化的程度越高,关系模式就越好。17对于各种范式之间的联系有:5NF4NF2NFBCNF1、第一范式

定义:

如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是第一范式(firstnormalform,简记为1NF)的模式。满足1NF的关系称为规范化的关系,否则称为非规范化的关系。关系数据库研究的关系都是规范化的关系。例如关系模式R(NAME,ADDRESS,PHONE),如果一个人有两个电话号码(PHONE),那么在关系中至少要出现两个元组,以便存储这两个号码。1NF是关系模式应具备的最起码的条件。

非规范模式变为1NF:(1)把不含单纯值的属性分解为多个原子值。(2)把关系模式分解。181、第一范式定义:如果关系模式R的每个关系r的属性值都2、第二范式

定义如果关系模式R是1NF,且每个非主属性完全函数依赖于候选键(主码),那么称R是第二范式(2NF)的模式。如果数据库模式中每个关系模式都是2NF,则称数据库模式为2NF的数据库模式。192、第二范式19例11-5:

设关系模式R(SNO,CNO,GRADE,TNAME,TADDR)的属性分别表示学生学号、选修课程的编号、成绩、任课教师姓名和教师地址等意义。(SNO,CNO)是R的候选键。R上有两个FD:(SNO,CNO)→(TNAME,TADDR)和CNO→(TNAME,TADDR),因此前一个FD是局部依赖,R不是2NF模式。此时R的关系就会出现冗余和异常现象。譬如某一门课程有100个学生选修,那么在关系中就会存在100个元组,因而教师的姓名和地址就会重复100次。如果把R分解成R1(CNO,TNAME,TADDR)和R2(SNO,CNO,GRADE)后,局部依赖(SNO,CNO)→(TNAME,TADDR)就消失了。R1和R2都是2NF模式。

20例11-5:设关系模式R(SNO,CNO,GRADE,

算法:

分解成2NF模式集的算法设关系模式R(U),主键是W,R上还存在FDX→Z,并且Z是非主属性和XW,那么W→Z就是一个局部依赖。此时应把R分解成两个模式R1(XZ),主键是X; R2(Y),其中Y=U-Z,主键仍是W,外键是X(REFERENCESR1)。利用外键和主键的联接可以从R1和R2重新得到R。如果R1和R2还不是2NF,则重复上述过程,一直到数据库模式中每一个关系模式都是2NF为止。

如:在关系模式R(SNO,CNO,GRADE,TNAME,TADDR)中,W={SNO,CNO}Z={TNAME,TADDR},X={CNO},Y={SNO,CNO,GRADE}21算法:分解成2NF模式集的算法213、第三范式

定义如果X→Y,Y→A,且Y→X和A∈Y,那么称X→A是传递依赖(A传递依赖于X)。

定义如果关系模式R是2NF,且每个非主属性都不传递依赖于R的主码,那么称R是第三范式(3NF)的模式。如果数据库模式中每个关系模式都是3NF,则称其为3NF的数据库模式。223、第三范式定义如果X→Y,Y→A,且Y→X和A

例11-6:

在上例中,R2是2NF模式,而且也已是3NF模式。但R1(CNO,TNAME,TADDR)是2NF模式,却不一定是3NF模式。如果R1中存在函数依赖CNO→TNAME和TNAME→TADDR,那么CNO→TADDR就是一个传递依赖,即R1不是3NF模式。此时R1的关系中也会出现冗余和异常操作。譬如一个教师开设五门课程,那么关系中就会出现五个元组,教师的地址就会重复五次。如果把R2分解成R21(TNAME,TADDR)和R22(CNO,TNAME)后,CNO→TADDR就不会出现在R21和R22中。这样R21和R22都是3NF模式。

23例11-6:在上例中,R2是2NF模式,而且也已是

算法

分解成3NF模式集的算法 设关系模式R(U),主键是W,R上还存在FDX→Z。并且Z是非主属性,ZX,且X不是候选键,这样W→Z就是一个传递依赖。此时应把R分解成两个模式: R1(XZ),主键是X; R2(Y),其中Y=U-Z,主键仍是W,外键是X(REFERENCESR1)。 利用外键和主键相匹配机制,R1和R2通过联接可以重新得到R。 如果R1和R2还不是3NF,则重复上述过程,一直到数据库模式中每一个关系模式都是3NF为止。24 算法分解成3NF模式集的算法24违反3NF的传递依赖的三种情况

部分依赖键是超键传递依赖25违反3NF的传递依赖的三种情况部分依赖键是超键传递依赖254、BCNF定义如果关系模式R是1NF,且每个属性都不传递依赖于R的候选键,那么称R是BCNF的模式。如果数据库模式中每个关系模式都是BCNF,则称为BCNF的数据库模式。如果R是BCNF模式,那么R也是3NF模式。设F是关系模式R的FD集,如果对F中每个非平凡的FDX→Y,都有X是R的超键,那么称R是BCNF的模式。一个满足BCNF的关系模式有:所有非主属性对每一个码都是完全函数依赖;所有的主属性对每一个不包含它的码,也是完全函数依赖;没有任何属性完全函数依赖于非码的任何一组属性。264、BCNF定义如果关系模式R是1NF,且每个属性都不传

Boyce-Codd范式(BCNF)是根据RayBoyce(SQL的创建者之一)以及EdgarCodd(关系数据库之父)的名字来命名的。它是第二范式和第三范式的替代品,并且构建得更好,它包含了第二范式和第三范式的内在意义,但使用了一种更普通的方式进行重新表述。要注意的是,满足BCNF时,不会提到第二范式或第三范式。BCNF覆盖了这两个范式

实体满足第一范式。所有属性完全依赖于某个键。如果所有的判定都是一个键,则实体满足BCNF。让我们逐个看看后两条规则。27Boyce-Codd范式(BCNF)是根据Ray

例11-7:关系模式S(SNO,SNAME,SDEPT,AGE),假定SNAME也具有唯一性,那么S就有两个键,这两个键都由单个属性组成,彼此不相交。其他属性不存在对键的传递依赖与部分依赖,所以S是3NF。同时S中除SNO,SNAME外没有其他决定因素,所以S也是BCNF。28例11-7:关系模式S(SNO,SNAME,SD

例11-8:关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。每一教师只教一门课。每门课有若干教师,某一学生选定某门课,就对应一个固定的教师。由语义可得到如下的函数依赖。(S,J)→T;(S,T)→J;T→J。这里(S,J)、(S,T)都是候选键。STJ是3NF,因为没有任何非主属性对键函数传递依赖或部分函数依赖。但STJ不是BCNF模式,是因为T是决定因素,而T不包含键。3NF和BCNF是在函数依赖的条件下对模式分解所能达到的分离程度的测度。一个数据库中的关系模式如果都是BCNF,那么在函数依赖范畴内,它已经实现彻底的分离,已消除了插入和删除异常。29例11-8:关系模式STJ(S,T,J)中,S表对于存在数据冗余、插入异常、删除异常问题的关系模式,应采取将一个关系模式分解为多个关系模式的方法进行处理,但是这种分解过程必须是“可逆”的,即模式分解的结果应该能重新映像到分解前的关系模式。模式分解的准则:(1)模式分解必须具有无损连接性。(2)模式分解能够保持函数依赖11.3

关系模式分解的准则P254

30对于存在数据冗余、插入异常、删除异常问题的关系模式,应采取将

定义设F是在关系模式R上成立的函数依赖的集合,X→Y是一个函数依赖。如果对于R的每个满足F的关系r也满足X→Y,那么称F逻辑蕴涵X→Y,记为F⊨X→Y。

定义设F是函数依赖集,被F逻辑蕴涵的函数依赖全体构成的集合,称为函数依赖集F的闭包(closure),记为F+。即F+={X→Y|记为F⊨X→Y。}

说明:即使一个小的函数依赖集F,其闭包F+也是很大的,一般情况下总有。

研究逻辑蕴涵的目的是利用推理的方法,从一组已知的函数依赖推导出另一组函数依赖,从而找出所有函数依赖F+。31定义设F是在关系模式R上成立的函数依赖的集合,X→Y定义F是关系模式R(U)的一个函数依赖集,记为R(F,U)。如果若干个关系模式的集合ρ={R1(U1,F1),R2(U2,F2),…,Rk(Uk,Fk)}其中:⑴

/*关系模式R的属性全集U是分解后所有小关系模式的属性集Ui的并集*/⑵对于每个i,j(1≤i,j≤k),有UiUj

/*分解的小属性集间不会相互为子集*/⑶Fi={X→Y|X→Y∈F+∧XY∈Ui}/*Fi(i=1,2,…,k)是F在Ui上的投影*/则称ρ是关系模式R(F,U)的一个分解。

定义实际上仅给出了模式分解必须满足的基本条件,有时也会出现将原模式存储信息丢失的现象。

3232无损分解例11-8:设关系模式R(ABC),分解成ρ={AB,AC}。见下页图33无损分解例11-8:设关系模式R(ABC),分解成ρ={CrABCr1ABr2A111111112112未丢失信息的分解

(b)(c)(a)4C343rABCr1ABr2ACr1r2AB1141114111231213111212(a)(b)(c)(d)丢失信息的分解

图分解后的关系可以通过自然连接还原。而下图分解后的关系通过自然连接后不能还原。称比r多出来的元组为”噪音”34CrABCr1ABr2A111111112112未丢失信息的

定义设R是一个关系模式,F是R上的一个FD集。R分解成数据库模式ρ={R1,…,Rk}。如果对R中满足F的每一个关系r,都有r=πR1(r)⋈πR2(r)⋈…⋈πRk(r)那么称分解ρ相对于F是“无损联接分解”(losslessjoindecomposition),简称为“无损分解”,否则称为“损失分解”(lossydecomposition)。上例中给出了“无损分解”和“损失分解”的例子。35定义设R是一个关系模式,F是R上的一个FD集。R分

例11-9:设关系模式R(ABC)分解成ρ={AB,BC}。(a)和(b)分别是模式AB和BC上的值r1和r2,(c)是r1⋈r2的值。显然πBC(r1⋈r2)≠r2。这里r2中元组(b2c2)就是一个悬挂元组,由于它的存在,使得r1和r2不存在泛关系r。

r1ABr2BCABCa1b1a1b1c1bc1b12c2(a)关系r1(b)关系r2rr12(c)rr12

模式分解的目的就是为了消除冗余和操作异常现象,但有时会产生存储泛关系中无法存储的信息(悬挂元组)。36例11-9:设关系模式R(ABC)分解成ρ={AB

算法

无损分解的测试①构造一张k行n列的表格,每列对应一个属性Aj(1≤j≤n),每行对应一个模式Ri(1≤i≤k)。如果Aj在Ri中,那么在表格的第i行第j列处填上符号aj,否则填上bij。②把表格看成模式R的一个关系,反复检查F中每个FD在表格中是否成立,若不成立,则修改表格中的值。修改方法如下:对于F中一个FDX→Y,如果表格中有两行在X值上相等,在Y值上不相等,那么把这两行在Y值上也改成相等的值。如果Y值中有一个是aj,那么另一个也改成aj;如果没有aj,那么用其中一个bij替换另一个值(尽量把下标ij改成较小的数)。一直到表格不能修改为止。(这个过程称为chase过程)③若修改的最后一张表格中有一行是全a,即a1a2…an,那么称ρ相对于F是无损分解,否则称损失分解。37算法无损分解的测试37(F1)初始表格

(F1)修改后的表格

例11-10:设关系R(ABCD),R分解成ρ={AB,BC,CD},如果R上成立的函数依赖集F1={B→A,C→D},则ρ对F1是否为无损分解?如果F1换为F2={A→B,C→D}呢?本行全是a,是无损连接

ABCDABa1a2b13b14BCb21a2a3b24CDb31b32a3a4

ABCDABa1a2b13b14BCa1a2a3a4CDb31b32a3a4

ABCDABa1a2b13b14BCb21a2a3b24CDb31b32a3a4

ABCDABa1a2b13b14BCb21a2a3a4CDb31b32a3a4无a行,是有损连接(F2)初始表格

(F2)修改后的表格

38(F1)初始表格(F1)修改后的表格对于分解为两个模式的情况,可根据下列定理分解:

定理设ρ={R1,R2}是关系模式R的一个分解,F是R上成立的FD集,那么分解ρ相对于F是无损分解的充分必要条件是:(R1∩R2)→(R1-R2)或(R1∩R2)→(R2-R1)。说明:该定理中的两个函数依赖不一定属于F,只要属于F+即可。例11-11:设有关系模式R({SNO,Sname,CNO,Grade},{SNO→Sname,(SNO,CNO)→Grade})的一个分解为:ρ={R1({SNO,Sname},{SNO→Sname}),R2({SNO,CNO,Grade},{(SNO,CNO)→Grade})}因为R1∩R2=SNO,R1-R2=Sname,所以R1∩R2→R1-R2,即SNO→Sname,它属于F,由定理可知,分解具有无损性连接。如果两个关系模式间的公共属性集至少包含其中一个关系模式的主健,则此分解是无损分解。39对于分解为两个模式的情况,可根据下列定理分解:保持函数依赖分解

保持函数依赖分解的意义:在作任何数据输入和修改时,只要每个关系模式本身的函数依赖约束可满足,就可以确保整个数据库中数据的语义完整性不受破坏。40保持函数依赖分解保持函数依赖分解的意义:在作

定义设F是属性集U上的FD集,Z是U的子集,F在Z上的投影用πZ(F)表示,定义为πZ(F)={X→Y|X→Y∈F+,且XYZ}

定义设ρ={R1,…,RK}是R的一个分解,F是R上的FD集,如果有∪πRi(F)=F,那么称分解ρ保持函数依赖集F。

定理

ρ保持函数依赖分解的充要条件是41定义设F是属性集U上的FD集,Z是U的子集,F在Z上的WNOWSWNOWGWNOWSWGW18级W12000W18级2000W26级W21600W26级1600W36级W31400W36级1400

例11-12:

设关系模式R(WNO,WS,WG)的属性分别表示职工的工号、工资级别和工资数目。如果规定每个职工只有一个工资级别,并且一个工资级别只有一个工资数目,那么R上的FD有WNO→WS和WS→WG。

(c)rr12(a)关系r1(b)关系r2

R1上FD是F1={WNO→WS},R2上的FD是F2={WNO→WG}。但从这两个FD推导不出在R上成立的FDWS→WG,因此分解ρ把WS→WG丢失了,即ρ不保持F。

如果R分解成ρ={R1,R2},其中R1={WNO,WS},R2={WNO,WG},可以验证这个分解是无损分解。42WNOWSWNOWGWNOWSWGW18级W12000W18一个无损连接不一定具有函数依赖保持性,反之一个具有函数依赖保持性的分解也不一定是无损连接。例11-13:

设R(ABCD),F={A→B,C→D},ρ={R1({A,B},{A→B}),R2({C,D},{C→D})}。因为F={A→B,C→D}F1∪F2={A→B,C→D}所以F+=(F1∪F2)+

即分解ρ具有依赖保持性,易验证ρ不具有无损性。43一个无损连接不一定具有函数依赖保持性,反之一个具有函数依赖保例11-14:设R(ABC),F={A→B,C→B},ρ={R1({A,B},F1),R2({A,C},F2)},其中F1={A→B},F2={A→C}。因为R1∩R2=A,R1-R2=B,R2-R1=C所以R1∩R2→R1-R2

因为A→B∈F,但F+≠(F1∪F2)+可见ρ具有无损分解,但不具有保持函数依赖分解。44例11-14:设R(ABC),F={A→B,C→B},ρ=数据库设计者在进行关系数据库设计时,一般尽可能设计成BCNF模式集。如果设计成BCNF模式集时达不到保持函数依赖和无损分解的特点,那么只能降低要求,设计成3NF模式集,以求达到保持函数依赖和无损分解的特点。

45数据库设计者在进行关系数据库设计时,一般尽可能设计成B一个好的数据库模式设计方法应符合三条原则:表达性涉及到数据库模式的等价问题,即数据等价和语义等价,分别用无损分解和保持函数依赖分解来衡量。分离性是指在关系中只存储有直接联系的属性值,而不要把有间接联系的属性值放在一张表中。应该把有间接联系的属性值放在不同的表中。实际上“分离”就是清除冗余和异常现象。如能达到这个目的,就分离。分离的基准是一系列范式。在分解成BCNF模式集时,分离与依赖等价有时是不兼容的。最小冗余性要求分解后的模式个数和模式中属性总数应最少。目的是节省存储空间,提高操作效率,消除不必要的冗余。但要注意,实际使用时并不一定要达到最小冗余,因为有时带点冗余对提高查询速度是有好处的。46一个好的数据库模式设计方法应符合三条原则:46本章小结本章讨论如何设计关系模式问题。关系模式设计得好与坏,直接影响到数据冗余度、数据一致性等问题。要设计好的数据库模式,必须有一定的理论为基础。这就是模式规范化理论。在数据库中,数据冗余是指同一个数据存储了多次,由数据冗余将会引起各种操作异常。通过把模式分解成若干比较小的关系模式可以消除冗余。函数依赖X→Y是数据之间最基本的一种联系,在关系中有两个元组,如果X值相等那么要求Y值也相等。FD有一个完备的推理规则集。47本章小结本章讨论如何设计关系模式问题。关系模式设计得好与坏,关系模式在分解时应保持“等价”,有数据等价和语义等价两种,分别用无损分解和保持依赖两个特征来衡量。前者能保持泛关系在投影联接以后仍能恢复回来,而后者能保证数据在投影或联接中其语义不会发生变化,也就是不会违反FD的语义。但无损分解与保持依赖两者之间没有必然的联系。4848范式是衡量模式优劣的标准,范式表达了模式中数据依赖之间应满足的联系。如果关系模式R是3NF,那么R上成立的非平凡FD都应该左边是超键或右边是非主属性。如果关系模式R是BCNF,那么R上成立的非平凡的FD都应该左边是超键。范式的级别越高,其数据冗余和操作异常现象就越少。49范式是衡量模式优劣的标准,范式表达了模式中数据依赖之间应满足分解成BCNF模式集的算法能保持无损分解,但不一定能保持FD集。而分解成3NF模式集的算法既能保持无损分解,又能保持FD集。关系模式的规范化过程实际上是一个“分解”过程:把逻辑上独立的信息放在独立的关系模式中。分解是解决数据冗余的主要方法,也是规范化的一条原则:“关系模式有冗余问题就分解它”。50分解成BCNF模式集的算法能保持无损分解,但不一定能保持FD课堂练习:

设有关系模式R(运动员编号,比赛项目,成绩,比赛类别,比赛主管),如果规定:每个运动员每参加一个比赛项目,只有一个成绩;每个比赛项目只属于一个比赛类别;每个比赛类别只有一个比赛主管。试回答下列问题:⑴根据上述规定,写出模式R的基本FD和关键码;⑵说明R不是2NF的理由,并把R分解成2NF模式集;⑶进而分解成3NF模式集。51课堂练习:51解:⑴基本的FD有3个:(运动员编号,比赛项目)→成绩比赛项目→比赛类别 比赛类别→比赛主管R的关键码为(运动员编号,比赛项目)。⑵R有两个这样的FD:(运动员编号,比赛项目)→(比赛类别,比赛主管) 比赛项目→(比赛类别,比赛主管) 可见,前一个FD是部分(局部)函数依赖,所以R不是2NF模式。 如果把R分解成 R1(比赛项目,比赛类别,比赛主管) R2(运动员编号,比赛项目,成绩)这里,R1和R2都是2NF模式。52解:⑴基本的FD有3个:52⑶R2已是3NF模式。 在R1中,存在两个FD: 比赛项目→比赛类别 比赛类别→比赛主管 因此,“比赛项目→比赛主管”是一个传递依赖,R1不是3NF模式。 R1应分解为 R11(比赛项目,比赛类别) R12(比赛类别,比赛主管) 这样,ρ={R11,R12,R2}是一个3NF模式集。

53⑶R2已是3NF模式。53 关系数据库的规范化设计是指面对一个现实问题,如何选择一个比较好的关系模式集合,即应该构造几个关系模式,每个关系由哪些属性组成。

规范化设计理论主要包括三个方面的内容:数据依赖、范式和模式设计方法。其中数据依赖起着核心的作用。数据依赖研究数据之间的联系,范式是关系模式的标准,模式设计方法是自动化设计的基础。规范化设计理论对关系数据库结构的设计起着重要的作用。

第11章关系数据规范化理论P25054 关系数据库的规范化设计是指面对一个现实问题,如何选择一个比例11-1设有一个关系模式R(TNAME,ADDRESS,CNO,CNAME),其属性分别表示教师姓名、教师地址、任教课程的编号和课程名。TNAMEADDRESSCNOCNAMEt1a1c1n1t1a1c2n2t1a1c3n3t2a2c4n4t2a2c5n2t3a3c6n4

在数据库设计中,如果一个关系模式设计得不好,就会出现像文件系统一样的数据冗余、异常、不一致等问题。图11.155例11-1设有一个关系模式R(TNAME,ADDRESS,该模式出现的问题有:

(1)数据冗余:如果一个教师教几门课程,那么这个教师的地址就要重复几次存储。

(2)操作异常:由于数据的冗余,在对数据操作时会引起各种异常:

①修改异常。例如教师t1教三门课程,在关系中就会有三个元组。如果他的地址变了,这三个元组中的地址都要改变。若有一个元组中的地址未更改,就会造成这个教师的地址不惟一,产生不一致现象。

56该模式出现的问题有:3②插入异常。如果一个教师刚调来,尚未分派教学任务,那么要将教师的姓名和地址存储到关系中去时,在属性CNO和CNAME上就没有值(空值)。在数据库技术中空值的语义是非常复杂的,对带空值元组的检索和操作也十分麻烦。

③删除异常。如果在是上图11.1中要取消教师t3的教学任务,那么就要把这个教师的元组删去,同时也把t3的地址信息从表中删去了。这是一种不合适的现象。57②插入异常。如果一个教师刚调来,尚未分派教学任务,TNAMEADDRESSTNAMECNOCNAMEt1a1t1c1n1t2a2t1c2n2t3a3t1c3n3

t2c4n4

t2c5n2

t3c6n4图11.2关系模式分解的实例

(a)关系模式R1的实例

(b)关系模式R2的实例

可以说,关系模式R不是一个好的模式。一个“好”的模式应当不会发生插入异常、删除异常、更新异常,数据冗余应尽量少。

规范化原则:“关系模式有操作异常或冗余问题,就分解它。”是否算最佳分解?那末,什么样的关系模式是最优的?标准是什么?如何实现?58TNAMEADDRESSTNAMECNOCNAMEt1a1t

如何构造合适的关系模式?

应构造几个关模式?

每个关系模式由哪些属性组成?

这就关系到数据库的逻辑设计问题59 如何构造合适的关系模式?

应构造几个关模式?

每个关系X函数决定Y,或Y函数依赖于X可表示为:X→Y如果有一个关系模式R(A1,A2,…,An),X和Y为{A1,A2,…,An}的子集,那么对于关系R中的任意一个x值,都只有一个y值与之对应,则称X函数决定Y,或Y函数依赖于X11.1.1函数依赖的基本概念11.1函数依赖P24860X函数决定Y,或Y函数依赖于X可表示为:11.1.1函数依赖函数依赖是属性间基本的一种依赖,它是关键码概念的推广。

定义1

设有关系模式R(U),X和Y是属性集U的子集,若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖(FunctionalDependency,简记为FD)于X,记作X→Y。FD是对关系模式R的一切可能的关系r定义的。对于r的任意两个元组,如果X值相同,则要求Y值也相同,即对一个X值有唯一个Y值与之对应。该定义类似于数学中的单值函数定义。

61函数依赖是属性间基本的一种依赖,它是关键码概念的推广。8

例11-2:有一个关于学生选课、教师任课的关系模式:

R(SNO,SNAME,CNO,GRADE,CNAME,TNAME,TAGE) 属性分别表示学生学号、姓名、选修课程的课程号、成绩、课程名、任课教师姓名和年龄等意义。 如果规定,每个学号只能有一个学生姓名,每个课程号只能决定一门课程,那么可写成下列FD形式:

SNO→SNAME CNO→CNAME 每个学生每学一门课程,有一个成绩,那么可写出下列FD:

(SNO,CNO)→GRADE 还可以写出其他一些FD:

CNO→CNAME,TNAME,TAGE)TNAME→TAGE注意:函数依赖不是指关系R的某个或某些关系满足的约束条件,而是指R的一切关系均要满足的约束条件。62 例11-2:有一个关于学生选课、教师任课的关系模式:对于函数依赖的定义注意以下三点:⑴函数依赖是一个基于关系模式(不是一个关系模式的特定实例)的函数概念,即如果一个关系模式R中存在函数依赖X→Y,则要求该模式的所有具体关系都满足X→Y。

⑵函数依赖不取决于属性构成关系的方式(即关系结构),而是关系所表达的信息本身的语义特性,我们只能根据这种语义信息确定函数依赖,没有其他途径。⑶函数依赖是数据库设计者对于关系模式的一种断言或决策,即在设计关系型数据库时不仅要设计关系结构,而且要定义数据依赖的条件,限制进入关系的所有元组都必须符合所定义的条件,否则拒绝接受输入。63对于函数依赖的定义注意以下三点:10

11.1.2一些术语和符号P249设有关系模式R(A1,A2,…,An),X和Y为(A1,A2,…,An)的子集,则有以下结论:(1)如果X→Y,但Y不包含于X,则称X→Y是非平凡的函数依赖。(2)如果Y函数不依赖于X,则记为XY。(3)如果X→Y

,则称X为决定因子。(4)如果X→Y

,并且,则Y→

X,记XY(5)如果X→Y

,并且对于X的任意一个真子集X’都有X’→Y,则称Y完全函数依赖于X,记为XfY。如果X’→Y成立,则称Y部分依赖于X,记为XpY6411.1.2一些术语和符号P249设有关系模式R

(6)如果X→Y(非平凡的函数依赖,并且Y→

X)、Y→

Z,则称Z传递函数依赖于X。例11-3:P249例11.111.265(6)如果X→Y(非平凡的函数依赖,并且Y→X)、11.2关系规范化P251

设用U表示关系模式R的属性全集,即U={A1,A2,…,An},用F表示关系模式R上的函数依赖集,则关系模式R可表示为R(U,F)。1、候选码设K为R(U,F)中的属性,若KfU,则K为R的候选码(K为决定R全部属性值的最小属性组)。11.2.1关系模式中的码

6611.2关系规范化P251设用U表示关系模式R的属性主码:关系R(U,F)中可能有多个候选码,则选其中一个作为主码全码:候选码为整个属性组主属性:在R(U,F)中,包含在任一候选码中的属性非主属性:在R(U,F)中,不包含在任一候选码中的属性例11-4:P251例11.3和11.46714

2、外码用于在关系表之间建立关联的属性(组)称为外码。6815

关系模式的好与坏,用什么标准衡量?这个标准就模式的范式(NormalForms,简记为NF)。范式的种类与数据依赖有着直接的联系,基于FD的范式有1NF、2NF、3NF、BCNF等多种。在不提及FD时,关系中是不可能有冗余的问题,但是当存在FD时,关系中就有可能存在数据冗余问题。1NF是关系模式的基础;2NF已成为历史,一般不再提及;在数据库设计中最常用的是3NF和BCNF。11.2.2范式P251

69关系模式的好与坏,用什么标准衡量?这个标准就模式的范式(

对于各种范式之间的联系有:5NF4NF2NFBCNF3NF1NF范式越高、规范化的程度越高,关系模式就越好。70对于各种范式之间的联系有:5NF4NF2NFBCNF1、第一范式

定义:

如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是第一范式(firstnormalform,简记为1NF)的模式。满足1NF的关系称为规范化的关系,否则称为非规范化的关系。关系数据库研究的关系都是规范化的关系。例如关系模式R(NAME,ADDRESS,PHONE),如果一个人有两个电话号码(PHONE),那么在关系中至少要出现两个元组,以便存储这两个号码。1NF是关系模式应具备的最起码的条件。

非规范模式变为1NF:(1)把不含单纯值的属性分解为多个原子值。(2)把关系模式分解。711、第一范式定义:如果关系模式R的每个关系r的属性值都2、第二范式

定义如果关系模式R是1NF,且每个非主属性完全函数依赖于候选键(主码),那么称R是第二范式(2NF)的模式。如果数据库模式中每个关系模式都是2NF,则称数据库模式为2NF的数据库模式。722、第二范式19例11-5:

设关系模式R(SNO,CNO,GRADE,TNAME,TADDR)的属性分别表示学生学号、选修课程的编号、成绩、任课教师姓名和教师地址等意义。(SNO,CNO)是R的候选键。R上有两个FD:(SNO,CNO)→(TNAME,TADDR)和CNO→(TNAME,TADDR),因此前一个FD是局部依赖,R不是2NF模式。此时R的关系就会出现冗余和异常现象。譬如某一门课程有100个学生选修,那么在关系中就会存在100个元组,因而教师的姓名和地址就会重复100次。如果把R分解成R1(CNO,TNAME,TADDR)和R2(SNO,CNO,GRADE)后,局部依赖(SNO,CNO)→(TNAME,TADDR)就消失了。R1和R2都是2NF模式。

73例11-5:设关系模式R(SNO,CNO,GRADE,

算法:

分解成2NF模式集的算法设关系模式R(U),主键是W,R上还存在FDX→Z,并且Z是非主属性和XW,那么W→Z就是一个局部依赖。此时应把R分解成两个模式R1(XZ),主键是X; R2(Y),其中Y=U-Z,主键仍是W,外键是X(REFERENCESR1)。利用外键和主键的联接可以从R1和R2重新得到R。如果R1和R2还不是2NF,则重复上述过程,一直到数据库模式中每一个关系模式都是2NF为止。

如:在关系模式R(SNO,CNO,GRADE,TNAME,TADDR)中,W={SNO,CNO}Z={TNAME,TADDR},X={CNO},Y={SNO,CNO,GRADE}74算法:分解成2NF模式集的算法213、第三范式

定义如果X→Y,Y→A,且Y→X和A∈Y,那么称X→A是传递依赖(A传递依赖于X)。

定义如果关系模式R是2NF,且每个非主属性都不传递依赖于R的主码,那么称R是第三范式(3NF)的模式。如果数据库模式中每个关系模式都是3NF,则称其为3NF的数据库模式。753、第三范式定义如果X→Y,Y→A,且Y→X和A

例11-6:

在上例中,R2是2NF模式,而且也已是3NF模式。但R1(CNO,TNAME,TADDR)是2NF模式,却不一定是3NF模式。如果R1中存在函数依赖CNO→TNAME和TNAME→TADDR,那么CNO→TADDR就是一个传递依赖,即R1不是3NF模式。此时R1的关系中也会出现冗余和异常操作。譬如一个教师开设五门课程,那么关系中就会出现五个元组,教师的地址就会重复五次。如果把R2分解成R21(TNAME,TADDR)和R22(CNO,TNAME)后,CNO→TADDR就不会出现在R21和R22中。这样R21和R22都是3NF模式。

76例11-6:在上例中,R2是2NF模式,而且也已是

算法

分解成3NF模式集的算法 设关系模式R(U),主键是W,R上还存在FDX→Z。并且Z是非主属性,ZX,且X不是候选键,这样W→Z就是一个传递依赖。此时应把R分解成两个模式: R1(XZ),主键是X; R2(Y),其中Y=U-Z,主键仍是W,外键是X(REFERENCESR1)。 利用外键和主键相匹配机制,R1和R2通过联接可以重新得到R。 如果R1和R2还不是3NF,则重复上述过程,一直到数据库模式中每一个关系模式都是3NF为止。77 算法分解成3NF模式集的算法24违反3NF的传递依赖的三种情况

部分依赖键是超键传递依赖78违反3NF的传递依赖的三种情况部分依赖键是超键传递依赖254、BCNF定义如果关系模式R是1NF,且每个属性都不传递依赖于R的候选键,那么称R是BCNF的模式。如果数据库模式中每个关系模式都是BCNF,则称为BCNF的数据库模式。如果R是BCNF模式,那么R也是3NF模式。设F是关系模式R的FD集,如果对F中每个非平凡的FDX→Y,都有X是R的超键,那么称R是BCNF的模式。一个满足BCNF的关系模式有:所有非主属性对每一个码都是完全函数依赖;所有的主属性对每一个不包含它的码,也是完全函数依赖;没有任何属性完全函数依赖于非码的任何一组属性。794、BCNF定义如果关系模式R是1NF,且每个属性都不传

Boyce-Codd范式(BCNF)是根据RayBoyce(SQL的创建者之一)以及EdgarCodd(关系数据库之父)的名字来命名的。它是第二范式和第三范式的替代品,并且构建得更好,它包含了第二范式和第三范式的内在意义,但使用了一种更普通的方式进行重新表述。要注意的是,满足BCNF时,不会提到第二范式或第三范式。BCNF覆盖了这两个范式

实体满足第一范式。所有属性完全依赖于某个键。如果所有的判定都是一个键,则实体满足BCNF。让我们逐个看看后两条规则。80Boyce-Codd范式(BCNF)是根据Ray

例11-7:关系模式S(SNO,SNAME,SDEPT,AGE),假定SNAME也具有唯一性,那么S就有两个键,这两个键都由单个属性组成,彼此不相交。其他属性不存在对键的传递依赖与部分依赖,所以S是3NF。同时S中除SNO,SNAME外没有其他决定因素,所以S也是BCNF。81例11-7:关系模式S(SNO,SNAME,SD

例11-8:关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。每一教师只教一门课。每门课有若干教师,某一学生选定某门课,就对应一个固定的教师。由语义可得到如下的函数依赖。(S,J)→T;(S,T)→J;T→J。这里(S,J)、(S,T)都是候选键。STJ是3NF,因为没有任何非主属性对键函数传递依赖或部分函数依赖。但STJ不是BCNF模式,是因为T是决定因素,而T不包含键。3NF和BCNF是在函数依赖的条件下对模式分解所能达到的分离程度的测度。一个数据库中的关系模式如果都是BCNF,那么在函数依赖范畴内,它已经实现彻底的分离,已消除了插入和删除异常。82例11-8:关系模式STJ(S,T,J)中,S表对于存在数据冗余、插入异常、删除异常问题的关系模式,应采取将一个关系模式分解为多个关系模式的方法进行处理,但是这种分解过程必须是“可逆”的,即模式分解的结果应该能重新映像到分解前的关系模式。模式分解的准则:(1)模式分解必须具有无损连接性。(2)模式分解能够保持函数依赖11.3

关系模式分解的准则P254

83对于存在数据冗余、插入异常、删除异常问题的关系模式,应采取将

定义设F是在关系模式R上成立的函数依赖的集合,X→Y是一个函数依赖。如果对于R的每个满足F的关系r也满足X→Y,那么称F逻辑蕴涵X→Y,记为F⊨X→Y。

定义设F是函数依赖集,被F逻辑蕴涵的函数依赖全体构成的集合,称为函数依赖集F的闭包(closure),记为F+。即F+={X→Y|记为F⊨X→Y。}

说明:即使一个小的函数依赖集F,其闭包F+也是很大的,一般情况下总有。

研究逻辑蕴涵的目的是利用推理的方法,从一组已知的函数依赖推导出另一组函数依赖,从而找出所有函数依赖F+。84定义设F是在关系模式R上成立的函数依赖的集合,X→Y定义F是关系模式R(U)的一个函数依赖集,记为R(F,U)。如果若干个关系模式的集合ρ={R1(U1,F1),R2(U2,F2),…,Rk(Uk,Fk)}其中:⑴

/*关系模式R的属性全集U是分解后所有小关系模式的属性集Ui的并集*/⑵对于每个i,j(1≤i,j≤k),有UiUj

/*分解的小属性集间不会相互为子集*/⑶Fi={X→Y|X→Y∈F+∧XY∈Ui}/*Fi(i=1,2,…,k)是F在Ui上的投影*/则称ρ是关系模式R(F,U)的一个分解。

定义实际上仅给出了模式分解必须满足的基本条件,有时也会出现将原模式存储信息丢失的现象。

8532无损分解例11-8:设关系模式R(ABC),分解成ρ={AB,AC}。见下页图86无损分解例11-8:设关系模式R(ABC),分解成ρ={CrABCr1ABr2A111111112112未丢失信息的分解

(b)(c)(a)4C343rABCr1ABr2ACr1r2AB1141114111231213111212(a)(b)(c)(d)丢失信息的分解

图分解后的关系可以通过自然连接还原。而下图分解后的关系通过自然连接后不能还原。称比r多出来的元组为”噪音”87CrABCr1ABr2A111111112112未丢失信息的

定义设R是一个关系模式,F是R上的一个FD集。R分解成数据库模式ρ={R1,…,Rk}。如果对R中满足F的每一个关系r,都有r=πR1(r)⋈πR2(r)⋈…⋈πRk(r)那么称分解ρ相对于F是“无损联接分解”(losslessjoindecomposition),简称为“无损分解”,否则称为“损失分解”(lossydecomposition)。上例中给出了“无损分解”和“损失分解”的例子。88定义设R是一个关系模式,F是R上的一个FD集。R分

例11-9:设关系模式R(ABC)分解成ρ={AB,BC}。(a)和(b)分别是模式AB和BC上的值r1和r2,(c)是r1⋈r2的值。显然πBC(r1⋈r2)≠r2。这里r2中元组(b2c2)就是一个悬挂元组,由于它的存在,使得r1和r2不存在泛关系r。

r1ABr2BCABCa1b1a1b1c1bc1b12c2(a)关系r1(b)关系r2rr12(c)rr12

模式分解的目的就是为了消除冗余和操作异常现象,但有时会产生存储泛关系中无法存储的信息(悬挂元组)。89例11-9:设关系模式R(ABC)分解成ρ={AB

算法

无损分解的测试①构造一张k行n列的表格,每列对应一个属性Aj(1≤j≤n),每行对应一个模式Ri(1≤i≤k)。如果Aj在Ri中,那么在表格的第i行第j列处填上符号aj,否则填上bij。②把表格看成模式R的一个关系,反复检查F中每个FD在表格中是否成立,若不成立,则修改表格中的值。修改方法如下:对于F中一个FDX→Y,如果表格中有两行在X值上相等,在Y值上不相等,那么把这两行在Y值上也改成相等的值。如果Y值中有一个是aj,那么另一个也改成aj;如果没有aj,那么用其中一个bij替换另一个值(尽量把下标ij改成较小的数)。一直到表格不能修改为止。(这个过程称为chase过程)③若修改的最后一张表格中有一行是全a,即a1a2…an,那么称ρ相对于F是无损分解,否则称损失分解。90算法无损分解的测试37(F1)初始表格

(F1)修改后的表格

例11-10:设关系R(ABCD),R分解成ρ={AB,BC,CD},如果R上成立的函数依赖集F1={B→A,C→D},则ρ对F1是否为无损分解?如果F1换为F2={A→B,C→D}呢?本行全是a,是无损连接

ABCDABa1a2b13b14BCb21a2a3b24CDb31b32a3a4

ABCDABa1a2b13b14BCa1a2a3a4CDb31b32a3a4

ABCDABa1a2b13b14BCb21a2a3b24CDb31b32a3a4

ABCDABa1a2b13b14BCb21a2a3a4CDb31b32a3a4无a行,是有损连接(F2)初始表格

(F2)修改后的表格

91(F1)初始表格(F1)修改后的表格对于分解为两个模式的情况,可根据下列定理分解:

定理设ρ={R1,R2}是关系模式R的一个分解,F是R上成立的FD集,那么分解ρ相对于F是无损分解的充分必要条件是:(R1∩R2)→(R1-R2)或(R1∩R2)→(R2-R1)。说明:该定理中的两个函数依赖不一定属于F,只要属于F+即可。例11-11:设有关系模式R({SNO,Sname,CNO,Grade},{SNO→Sname,(SNO,CNO)→Grade})的一个分解为:ρ={R1({SNO,Sname},{SNO→Sname}),R2({SNO,CNO,Grade},{(SNO,CNO)→Grade})}因为R1∩R2=SNO,R1-R2=Sname,所以R1∩R2→R1-R2,即SNO→Sname,它属于F,由定理可知,分解具有无损性连接。如果两个关系模式间的公共属性集至少包含其中一个关系模式的主健,则此分解是无损分解。92对于分解为两个模式的情况,可根据下列定理分解:保持函数依赖分解

保持函数依赖分解的意义:在作任何数据输入和修改时,只要每个关系模式本身的函数依赖约束可满足,就可以确保整个数据库中数据的语义完整性不受破坏。93保持函数依赖分解保持函数依赖分解的意义:在作

定义设F是属性集U上的FD集,Z是U的子集,F在Z上的投影用πZ(F)表示,定义为πZ(F)={X→Y|X→Y∈F+,且XYZ}

定义设ρ={R1,…,RK}是R的一个分解,F是R上的FD集,如果有∪πRi(F)=F,那么称分解ρ保持函数依赖集F。

定理

ρ保持函数依赖分解的充要条件是94定义设F是属性集U上的FD集,Z是U的子集,F在Z上的WNOWSWNOWGWNOWSWGW18级W12000W18级2000W26级W21600W26级1600W36级W31400W36级1400

例11-12:

设关系模式R(WNO,WS,WG)的属性分别表示职工的工号、工资级别和工资数目。如果规定每个职工只有一个工资级别,并且一个工资级别只有一个工资数目,那么R上的FD有WNO→WS和WS→WG。

(c)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论