首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事

数据库关系模式有哪些类型?

发布网友 发布时间:2022-04-23 11:13

我来回答

2个回答

懂视网 时间:2022-04-08 04:21

=> R1(Tname(CK), Addr) R2(C#(PK), Cname, Tname(FK))

模式分解有一套规范化的分解标准,称为范式(本章重点,见后续小节)

11.2 函数依赖

函数依赖(Functional Dependency,FD)是指一个关系模式中一个属性集和另一个属性集间的多对一关系,如选课关系SC(S#, C#, Score),给定(S#,C#)只有一个Score对应,不同(S#,C#)对应的Score值允许相等

(1)形式化定义

X、Y是关系模式R(U)属性集U的子集,R(U)的实例r中的两个元组t1、t2,若t1[X]==t2[X]可以导出t1[Y]==t2[Y],则称Y函数依赖于X,记作X→Y

同一个关系模式可以有不同的FD,FD和应用相关;FD是对现实世界的断言,检测FD正确性只能通过考察属性的含义

形式化定义关系模式为R(U, D, dom, F)

  • R为关系模式名
  • U是一个属性集
  • D是U中属性的值所来自的域
  • Dom是属性向域的映射集合
  • F是属性间的依赖关系
  • 关系模式设计就是寻求一个最小FD集T,一旦实现T则可以实现所有FD

    (2)函数依赖的平凡性

    若X→Y且Y是X的子集,则X→Y是平凡FD(子集必然依赖),否则是称FD不平凡;平凡FD无实际意义,可以通过消除平凡FD来缩小FD集

    (3)函数依赖闭包

    函数依赖有以下推理规则,称为Armstrong公理:

  • 自反律:若B是A的子集,则A→B
  • 增广律:若A→B,则AC→BC
  • 传递律:若A→B且B→C,则A→C
  • 自含律:A→A
  • 分解律:若A→BC,则A→B且A→C
  • 合并律:若A→B且A→C,则A→BC
  • 复合律:若A→B且C→D,则AC→BD
  • 函数依赖集F逻辑蕴含的函数依赖的全体构成的集合称为函数依赖F的闭包,记做F+,通过一系列推理规则可以求得F的闭包并判断某一函数依赖X→Y是否能够由F推出(即判断X→Y是否属于F+)

    (4)属性闭包

    判断X→Y是否能够由F推出就去构造F+计算量比较大,其实只需构造**属性X的闭包**X+即可,X+是所有能够用A推出的属性集合(即函数依赖于A的属性集合)

    (5)最小函数依赖集

    最小函数依赖集F必须满足以下性质:

  • F的每个FD的右边只有一个属性
  • F不可约,即F中的每个X→Y,F-{X→Y}与F不等价
  • F的每个FD的左部不可约,即删除任意FD左边的任何一个属性后的F’不等价于F
  • 求某个函数依赖集的最小函数依赖集的步骤如下:

    1. 分解律让右边无多属性,消除冗余属性
    2. 用推理规则消去左边多属性冗余
    3. 消除剩余冗余FD

    11.3 关系模式的分解

    关系模式R(U)的一个分解p={Ri(Ui)}满足U=∪{Ui},模式分解必须是无损连接并且需要保持函数依赖

    (1)无损连接

    无损连接是指:某关系模式的事例r按照关系模式分解成多个关系r1,…,rk,若r1,…,rk的自然连接(Join操作)等于r,则称该模式分解是无损的

    (2)测试无损连接

    Chase方法能够检测完全的无损连接,设有n个属性的模式R分解为k个模式Ri,有如下Chase过程:

    1. 构造一个k行n列的表格,每行对应一个模式Ri,每列对应一个属性Aj,若Aj在模式Ri中则表格[i][j]中填入aj,否则填入bij
    2. 扫描F中的每个FD X→Y
    3. 若表格中有两行在X分量上相等,在Y分量上不相等则修改Y:若Y的分量中是个是aj,则另一个也修改为aj
    4. 如果没有aj,则用其中一个bij替换另一个符号(i是所有b中最小的行数)
    5. 重复2、3、4一直到表格不能修改为止
    6. 若此时表格中有一行全是a,则该分解是无损连接的分解

    当模式分解是简单的二元分解时(即p={R1,R2}),p是无损连接的分解当且仅当下面FD之一成立:

  • R1和R2两模式属性的交集 → R1与R2两模式属性的差集
  • R1和R2两模式属性的交集 → R2与R1两模式属性的差集
  • (3)保持函数依赖

    保持函数依赖是指关系模式R的FD集F在分解后仍在数据库模式中保持不变,这是模式分解的第二个条件

    形式化的定义分解后F在模式Ri上的投影为:

    πRi(F)={X→Y|X→Y∈F+?X、Y?Ri}

    若分解p满足如下条件则称p**保持函数依赖**:

    (?i=1kπRi(F))+=F+

    11.4 关系模式的范式

    范式xNF即是满足特定要求的模式,将低一级范式的关系模式通过模式分解转换为高一级范式的关系模式集合的过程叫做规范化

    范式从低级到高级依次为:1NF、2NF、3NF、BCNF、4NF、5NF,高一级的范式总是低一级范式的真子集

    根据关系模式R的不可约FD集F,可以画出节点是属性或属性集,边是由被依赖节点指向依赖节点的有向图来辅助分析关系模式,叫做函数依赖图

    注:复习时间关系ppt中范式的例子来不及整理了

    (1)1NF

    1NF要求关系模式R的每一个实例r均满足:r中的每一个元组t的每一个属性中只有一个值,这是关系模式的基本要求

    不满足1NF的关系模式有二义性!

    (2)2NF

    假定:R只有一个候选码,且该候选码为主码

    R∈1NF且R的每一个非主属性(非候选码的其他属性)都完全函数依赖于主码时,R∈2NF

    A完全依赖于W是指:W→A且A不依赖于任何一个W的真子集X,W是主键也可能包括多个属性{X、Y},非主属性A不能局部函数依赖于X或Y

    不满足2NF的关系模式可能存在[插入异常、删除异常、更新异常和数据冗余],通过画出函数依赖图无损分解非2NF得到2NF,但2NF也不能完全消除上述问题

    (3)3NF

    假定:R只有一个候选码,且该候选码为主码

    R∈2NF且R的每一个非主属性都不传递依赖于主码时,R∈3NF

    称A传递依赖于Y则有:Y→X,X→A,并且Y不依赖于X(即Y不等于X)、A不是X的子集

    不满足3NF的关系模式也可能存在[插入异常、删除异常、更新异常和数据冗余],通过打破传递依赖链条,把关系模式分解成多个子关系模式

    (4)BCNF

    BCNF是3NF处理R有多个候选码的扩展,当R有多个候选码时即使R∈3NF,也可能出现[插入异常、删除异常、更新异常和数据冗余],这时需要分解为BCNF范式

    如果关系模式R的所有不平凡的、完全的函数依赖的决定因素(左边的属性集)都是候选码,则R∈BCNF

    若要求保持函数依赖和无损联接,则总可以达到3NF,但不一定满足BCNF;因为BCNF可以达到无损连接,但不一定保持函数依赖

    11.5 关系模式分解为范式的分解算法

    (1)保持函数依赖地分解R到3NF

    算法步骤:

    1. 求出R的最小函数依赖集F
    2. 把所有不在F中出现的属性组成一个关系模式R’,并在U中去掉这些属性
    3. 若F中存在X→A且XA=U,则算法结束输出{R’,R(U)},否则继续下一步
    4. 对F中的FD按相同的左部分组构成一个关系模式Ri(Ui),Ui包括了该组FD涉及的所有属性
    5. 去掉{Ri(Ui)}中属性集Ui是其他某个关系模式属性集Uj子集的关系模式Ri,得到最终的分解p={R1,R2,…,Rk,R’},p能够保持函数依赖地把R分解到3NF

    (2)无损连接且保持函数依赖地分解R到3NF

    算法步骤:

    1. 按算法(1)中步骤求出保持函数依赖的3NF分解,设q={R1,R2,…,Rk}
    2. 设X是R的主码,p={R1,R2,…,Rk,R(X)}
    3. 若X是q中某个Ri(Ui)属性集Ui的子集,则删除p中的R(X)
    4. 输出p,p能够无损连接且保持函数依赖地把R分解到3NF

    (3)无损联接地分解R到BCNF

    算法步骤:

    1. p={R}
    2. 检查p中各关系模式是否满足BCNF,是则终止输出p
    3. 设p中S(Us)非BCNF,则必存在X→A且X不是S的候选码:S分解为S1(XA)和S2(Us-A),把p中的S替换为S1、S2,跳转至第二步

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    数据库复习11——关系模式与范式

    标签:数据库   关系模式   范式   无损连接   函数依赖   

    热心网友 时间:2022-04-08 01:29

    在关系数据库中有型和值两种类型结构。关系模式是型,关系是值,关系模式是对关系的描述。

    描述一个关系需要从以下两个方面来定义:第一方面,关系实质上是一个二维表,表的每一行为一个元组,每一列为一个属性。一个元组就是该关系所涉及的属性集的笛卡儿积的一个元素。关系是元组的集合,因此关系模式必须指出这个元组集合的结构,即它由哪些属性构成,这些属性来自哪些域,以及属性与域之间的映象关系。

    第二方面,一个关系通常是由赋予它的元组语义来确定的。元组语义实质上是一个n目谓词(n是属性集中属性的个数)。凡使该n目谓词为真的笛卡儿积中的元素(或者说凡符合元组语义的那部分元素)的全体就构成了该关系模式的关系。

    1.3.1关系数据库基本概念关系数据中,关系模式涉及众多概念、术语,初学者对这方面不容易把握与理解,以下用通俗易懂的语言来对这些概念及术语作简单的介绍。

    1.关系关系(Relation)是指数据库中实体的信息,也就是数据库中二维表的数据。一个关系就是一个数据库表的值,表中的内容是对应关系模式在某个时刻的值,称为一个关系。例如,关系A表示数据库有一张名字为A的数据表所记录的所有数据。关系数据库中每一个关系都具有以下六方面的性质:((1)列是同质的。即每一列中的分量为同一类型的数据,来自同一个域。

    (2)不同的列可出自同一个域,称其中的每列为一个属性,不同的属性要给予不同的属性名。

    (3)列的顺序无所谓。即列的次序可以任意交换。

    (4)任意两个元组不能完全相同。

    (5)行的顺序无所谓。即行的次序可以任意交换。

    (6)分量必须取原子值。即每一个分量都必须是不可分的数据库属性。

    2.模式模式(Schema)是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,也称逻辑模式。有以下几方面性质:((1)一个数据库只有一个模式。

    (2)模式是数据在逻辑级上的视图。

    (3)以某一种数据模型为基础。

    定义模式时不仅要定义数据的逻辑结构,包括数据项的构成、名字、类型、取值范围等,而且要定义与数据有关的安全性、完整性要求,定义这些数据之间的联系。

    3.关系模式关系模式(RelationSchema)描述的是与关系相对应的二维表的表结构,即关系中包含哪些属性,属性来自哪些域,以及与域之间的映象关系。

    关系模式与关系的区别:((1)关系模式描述了关系数据结构和语义,是关系的型。而关系是一个数据集合,是关系模式的值,是关系模式的一个实例。

    (2)关系实际上就是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为数据库操作会不断地更新数据库中的数据。

    4.元组元组(Tuple)是关系数据库中的基本概念,一个关系表中的每行就是一个元组。也就是说数据库表中的每条记录都是一个元组,表结构的每列就是一个属性,在二维表里,元组也称为记录。元组可表示一个关系或关系之间的联系。

    一般情况下,一个关系数据表中的每条记录均有一个唯一的编号(记录号),这个编号也叫元组号。

    5.码码(Key)是关系数据库系统中的基本概念。所谓码,就是能唯一标识实体的属性集,是整个属性集,而不是单个属性。在关系数据库中,码包括多种类型,如超码、候选码和主码。

    ((1)超码(SuperKey)。超码是一个或多个属性的集合,这些属性可以在一个实体集中唯一地标识一个实体。如果K是一个超码,那么K的任意超集也是超码,也就是说如果K是超码,那么所有包含K的集合也是超码。例如,学生是一个实体,则学生的集合是一个实体集,而超码用来在学生的集合中区分不同的学生。假设学生(实体)具有多个属性:学号,身份证号,姓名,性别。因为通过学号可以找到唯一一个学生,所以{学号}是一个超码,同理{学号,身份证号}、{学号,身份证号,姓名}、{学号,身份证号,姓名,性别}、{身份证号}、{身份证号,姓名}、{身份证号,姓名,性别}也是超码。在这里,因为不同的学生可能拥有相同的姓名,所以姓名不可以区别一个学生,即{姓名}不是一个超码,{性别}、{姓名,性别}也不是。

    (2)候选码(CandidateKey)。候选码是可以唯一标识一个元组的最少的属性集合。候选码是从超码中选出的,因此候选码也是一个或多个属性的集合。因为超码的范围太广,很多是无用的,所以候选码是最小超码,它们的任意真子集都不能成为超码。例如,如果K是超码,那么所有包含K的集合都不能是候选码;如果K,J都不是超码,那么K和J组成的集合{K,J}有可能是候选码。

    虽然超码可以唯一标识一个实体,但是可能大多数超码中含有多余的属性,所以需要候选码。

    例如学生表,学生(学号,姓名,年龄,性别,专业),其中的学号是可以唯一标识一个元组,所以学号可以作为候选码。既然学号都可以作候选码,那么学号和姓名这两个属性的组合就可以唯一区别一个元组。此时的学号可以成为码,学号和姓名的组合也可以成为码,但是学号和姓名的组合不能成为候选码,因为即使去掉姓名属性,剩下的学号属性也完全可以唯一地标识一个元组。也就是说,候选码中的所有属性都是必需的,缺少任何一个属性,都不能唯一标识一个元组。

    (3)主码(PrimaryKey)。主码是从多个候选码中任意选出一个作为主键,这个被选中的候选码就称为主码。如果候选码只有一个,那么候选码就是主码。虽然说主码的选择是比较随意的,但在实际开发中还是需要一定的经验,不然开发出来的系统会出现问题。一般来说,主码都应该选择那些从不或者极少变化的属性。

    例如,在一个职工实体中,职工(职工号,姓名,入职时间,部门,岗位,工资,职级,工龄,电话),职工号可以用来唯一确定实体中的一个元组,所以职工号是一个候选码。如果实体属性——姓名、入职时间、部门三者组合也能唯一地确定一个元组,则(姓名,入职时间,部门)也是一个候选码。在上述两个候选码中任选一个均可作为职工实体的主码,一般来说直接选择职工号作为实体的主码是最为简单方便的。

    1.3.2关系模式的定义关系是数据库二维表中的数据记录,关系模式是数据库二维表的表结构,关系是动态的,关系模式是静态的。

    关系模式可由六个元素来描述,分别是R、U、D、dom、I、F。其中,R为关系的名称;

    U为组成该关系的属性名的集合;D为U集合中属性的域集合;dom为属性集U向域集D的映射;I为完整约束集合;F为属性间数据的依赖关系集合。

    一个关系模式通常表示为R(U,D,dom,I,F),也可以忽略其他元素,直接简化为R(U)或R(A1,A2,A3,…,An),其中A1,A2,A3,…,An为属性名。

    例如,在一个选课模块中,包含“学生”“课程”“选修”等关系实体。“学生”实体的属性有SNO(学号)、SNAME(姓名)、AGE(年龄)、SEX(性别)、SDEPT(系部),其中“学号”为主键;“课程”实体的属性有CNO(课程号)、CNAME(课程名称)、CDEPT(系部)、TNAME(教师),其中“课程号”为主键;“选修”实体的属性有GRADE(成绩)、SNO(学号)、CNO(课程号),其中“学号”和“课程号”为联合主键。学生和课程之间是多对多的关联关系,即一个学生可以同时选修多门课程,一门课程也可以同时被多个学生选修。这种多对多的关联关系可以通过“选修”关系实体作为中间桥接实体,变成两个一对多的实体关联关系,如图所示。

    图学生选课实体

    从图的实体关系图中可以得到选课模块的实体关系模式集——学生关系、课程关系、选修关系,具体关系模式如下:学生关系模式Student(SNO,SNAME,AGE,SEX,SDEPT);

    课程关系模式Course(CNO,CNAME,CDEPT,TNAME);

    选修关系模式StudentCourse(SNO,CNO,GRADE)。

    对以上定义的三个关系模式实例化,插入初始化数据后,可得到学生、课程、选修三个关系的实例,如图所示。图中矩形框圈住部分为选课模块中的关系模式(表结构);椭圆框圈住部分为选课模块中的关系(数据)。整个选课模块的表环境由关系模式与关系两部分共同组成,缺一不可。关系模式的分解标准关系模式的规范化过程实际上就是关系模式的“分解”过程,即把逻辑上的信息放在的关系模式中。分解是解决数据冗余的主要方法,也是规范化的一条原则——关系模式有冗余问题就要分解。

    数据库设计者在进行关系数据库设计时,应参照模式规范化理论,尽可能使数据库模式保持高的标准。一般尽量把关系数据库设计成巴斯−科德范式(BCNF)的模式集,如果设计成巴斯−科德范式(BCNF)模式集时达不到保持函数依赖的标准,那么只能降低要求,设计成第三范式(3NF)的模式集,以达到保持函数依赖和无损分解的基本要求。

    学生、课程、选修三个关系的实例

    1.分解的定义一个关系模式可以分解成众多子关系模式,分解方式不同,得到的子关系模式也不同。

    关系模式的分解是指把某一个关系模式按照某一种方式进行分解得到的所有子关系模式。

    如关系模式R按照某一种方式分解,可以得到一个关系集ρ={R1,R2,…,Rn}。其中属性集U=U1∪U2∪…∪Un,并且不能存在Ui⊆Uj,1≤i,j≤n。

    函数依赖关系集F=F1∪F2∪…∪Fn,其中F1,F2,…,Fn是F在U1,U2,…,Un上的投影。

    2.分解的标准把低级的关系模式分解成高级的关系模式的方法不是唯一的,只要能够保证分解后的关系模式与原关系模式等价,就是一个完整、标准的分解方法。关系模式的标准分解方法应同时达到以下两方面的要求:((1)分解具有无损连接性。

    (2)分解要保持函数依赖性。

    具有无损连接性的分解保证信息不会丢失,但无损连接不一定能解决插入异常、删除异常、修改复杂、数据冗余等问题,如要解决这些问题,则要考虑更高的关系数据范式理论原则。

    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com