龙空技术网

备考高级系统分析师-数据库-函数依赖-键与约束-范式-模式分解

等红灯的民工 298

前言:

此时朋友们对“数据库如何分解3nf算法”大体比较关怀,大家都想要了解一些“数据库如何分解3nf算法”的相关资讯。那么小编在网上收集了一些对于“数据库如何分解3nf算法””的相关资讯,希望大家能喜欢,你们一起来学习一下吧!

先祝大家元宵节快乐,依旧坚守工作岗位的离家伙伴们可以在忙碌的空隙中,给家人去个电话。

我继续肝了,本章讲述的内容有点多,有函数依赖,键与约束,范式,模式分解,其中最重要的还是范式,前边的函数依赖,跟键与约束,也是为了学习范式(1NF,2NF,3NF,BCNF,还有第四范式,第五范式,感兴趣的自己查查吧,考试也就只考到3NF)储备理论与概念知识,模式分解也有点不好理解,但是选择题只有1分,咱们的目的是为了通过考试,可以有的放矢,感兴趣的小伙伴可以深究下,我自己认为范式对于实际工作中对于数据库表的设计也是帮助极大的,也让自己获益匪浅。

1.函数依赖

给定一个X,能唯一确定一个Y,就称X确定Y,或者说Y依赖于X,例如Y=X*X函数。

函数依赖又可扩展以下两种规则:

部分函数依赖:A可确定C,(A,B)也可确定C,(A,B)中的一部分(即A)可以确定C,称为部分函数依赖。

传递函数依赖:当A和B不等价时,A可确定B,B可确定C,则A可确定C,是传递函数依赖;若A和B等价,则不存在传递,直接就可确定C。

函数依赖的公理系统(Armstrong)

关系模式R<U,F>,U是关系模式R的属性全集F是关系模式R的一个函数依赖集

对于R<U,F>来说有以下的:

自反律:若Y⊆X⊆U,则X→Y为F所逻辑蕴含。

增广律:若X→Y为F所逻辑蕴含,且Z⊆U,则XZ→YZ为F所逻辑蕴含。

传递律:若X→Y和Y→Z为F所逻辑蕴含,则X→Z为F所逻辑蕴含。

合并规则:若X→Y,X→Z,则X→YZ为F所蕴涵。

伪传递率:若X→Y,WY→Z,则XW→Z为F所蕴涵。

分解规则:若X→Y,Z⊆Y,则X→Z为F所蕴涵

2.键与约束

需要理解基本概念,这样才能更好的帮助我们去理解范式!有时候叫键有时候叫码,先上概念如下:

超键:能唯一标识此表的属性的组合

候选键:超键中去掉冗余的属性,剩余的属性是候选键。

主键任选一个候选键,即可作为主键。

外键其他表中的主键

主属性:候选键内的属性为主属性其他属性为非主属性

2.1上例子,有时候举例子是个不错的学习概念的方式:

以学生表为例(包含学号,身份证号,姓名,年龄),假设学号,身份证号是唯一标识,超键只要包含学号,身份证号即可,比如(学号,身份证号),(学号,身份证号,姓名),(学号,身份证号,姓名,年龄),以上都属于超键,有没有冗余没有关系!

候选键就是(学号,身份证号),去掉冗余的属性。

主键就是,学号或者身份证号,任选一个候选键即可。

实体完整性约束:即主键约束,主键值不能为空,也不能重复

参照完整性约束:即外键约束,外键必须是其他表中已经存在的主键的值或者为空

用户自定义完整性约束自定义表达式约束,如设定年龄属性的值必须在0到150之间。

3.范式3.1第一范式

关系中的每一个分量必须是一个不可分的数据项。通俗地说,第一范式就是表中不允许有小表的存在。比如,对于如下的员工表,就不属于第一范式:

实例:用一个单一的关系模式学生来描述学校的教务系统:学生(学号,学生姓名,系号,系主任姓名,课程号,成绩)

依赖关系:(学号->学生姓名,学号->系号,系号->系主任姓名,学号->课程号,(学号,课程号)->成绩)

3.2第二范式

如果关系R属于1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R属于2NF.

通俗地说,2NF就是在1NF的基础上,表中的每一个非主属性不会依赖复合主键中的某一个列

按照定义,上面的学生表就不满足2NF,因为学号不能完全确定课程号和成绩(每个学生可以选多门课)。

将学生表分解为:

学生(学号,学生姓名,系编号,系名,系主任)

选课(学号,课程号,成绩)。

每张表均属于2NF。

第二范式,消除了非主属性对于主属性的部分函数依赖!部分函数依赖只存在于联合主键里,主键是多个的才存在部分函数依赖!对于只有一个主键,它必然满足第二范式!

3.3第三范式

满足1NF的基础上,表中不存在非主属性对码的传递依赖

继续上面的实例,学生关系模式就不属于3NF,因为学生无法直接决定系主任和系名,是由学号->系编号,再由系编号->系主任,系编号->系名,因此存在非主属性对主属性的传递依赖。

学生表进一步分解为

学生(学号,学生姓名,系编号)

系(系编号,系名,系主任)

选课(学号,课程号,成绩)

每张表均属于3NF。

3.4 BC范式

BC范式BCNF,是指在第三范式的基础上进一步消除主属性对于码的部分函数依赖和传递依赖

通俗的来说,就是在每一种情况下,每一个依赖的左边决定因素都必然包含候选键,如下:

上图中,候选键有两种情况:组合键(S,T)或者(S,J),依赖集为{SJ-T,T-J},可知,STJ三个属性都是主属性,因此其达到了3NF(无非主属性),然而,第二种情况,即(S,J)为候选键的时候,对于依赖T->J,T在这种情况不是候选键,即T-J的决定因素不包含任意候选码,因此上图不是BCNF。

要使上图关系模式转换为BCNF也很简单,只需要将依赖T->J变为TS->J即可,这样其左边决定因素就包含了候选键之一S。

真题来喽:

1.给定关系模式R(U,F),U={A,B,C,D},F={AB→C,CD→B}。关系R( ),且分别有()。

A.只有1个候选关键字ACB B.只有1个候选关键字BCD

C.有2个候选关键字ACD和ABD D.有2个候选关键字ACB和BCD

A.0个非主属性和4个主属性 B.1个非主属性和3个主属性

C.2个非主属性和2个主属性 D.3个非主属性和1个主属性

2.设有关系模式R(E,N,M,L,Q),其函数依赖集为F={E→N,EM→Q,M→L}.则关系模式R达到了( );该关系模式()。

A.1NF B.2NF C.3NF D.BCNF

A.无需进行分解,因为已经达到了3NF

B.无需进行分解,因为已经达到了BCNF

C.尽管不存在部分函数依赖,但还存在传递依赖,所以需要进行分解

D.需要进行分解,因为存在冗余、修改操作的不一致性、插入和删除异常

解析:题目1的主要原则就是,

1.依赖集中从未在右边出现过的属性必然是候选键之一,然后就得到了A,D。

2.最后把B和C挨个加到A,D中,看是否能推出右边的属性。答案C A。

题目2,思路也是先找到候选键,找候选键的方式,就按照题目1来,得到候选键(E,M),正好满足了非主属性对主属性的部分函数依赖,不满足第二范式,所以就是第一范式了,答案选A,D。

4.模式分解

考试一般会考,保持依赖还是不保持依赖,有损分解还是无损分解,不会很难。

范式之间的转换一般都是通过拆分属性,即模式分解,将具有部分函数依赖和传递依赖的属性分离出来,来达到一步步优化,一般分为以下两种:

保持函数依赖分解

对于关系模式R,有依赖集F,若对R进行分解,分解出来的多个关系模式,保持原来的依赖集不变,则为保持函数依赖的分解。另外,注意要消除掉冗余依赖(如传递依赖)。

实例:设原关系模式R(A,B,C),依赖集F(A->B,B->C,A->C),将其分解为两个关系模式R1(A,B)和R2(B,C),此时R1中保持依赖A->B,R2保持依赖B->C,说明分解后的R1和R2是保持函数依赖的分解,因为A->C这个函数依赖实际是一个冗余依赖,可以由前两个依赖传递得到,因此不需要管。

主要原理就是分解后的关系模式的函数依赖,依旧能还原出分解前关系模式的函数依赖!

保持函数依赖的判断(补充,第2点不强求)

1、如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的(这是一个充分条件)。判断的最简单方法,看函数每个依赖的左右两边属性是否都在同一个分解的模式中。

2、如果上述判断失败,并不能断言分解不是保持依赖的,还要使用下面的通用方法来做进步判断。

该方法的表述如下:

算法二:(比较麻烦可以忽略,一般考试只要第一种方法判断,基本就能搞定了)

对F上的每一个a→β使用下面的过程:

result:=a;

while(result发生变化)do

for each分解后的Ri

t=(resultnRi)+nRi

result=resultUt

例题:假设关系模式R(U,F),属性集U={A,B,C),函数依赖集F={A→B,B→C).若将其分解为p={R1(U1, F1), R2(U2, F2)),其中U1={A, B),U2={A,C}。那么,分解p()。

A.有损连接但保持函数依赖

B.既无损连接又保持函数依赖

C.有损连接且不保持函数依赖

D.无损连接但不保持函数依赖

答案:D

解析:首先,该分解,U1保持了依赖A->B,然而B->C没有保持,因此针对B->C需要用第点算法来判断:

(了解下吧,有的放矢)result=B, result∩U1=B, B+=BC,BC∩U1=B,result=BUB=B,result没变,然后,result再和U2交是空,结束了,不保持函数依赖。

注意,这里B+,+的意思是代表由B能够推导出的其他所有属性的集合,这里,B->C,因此B+=BC。

无损分解:分解后的关系模式能够还原出原关系模式,就是无损分解,不能还后就是有损。

当分解为两个关系模式,可以通过以下定理判断是否无损分解:

定理:如果R的分解为p={R1,R2},F为R所满足的函数依赖集合,分解p具有无损连接性的充分必要条件是R1R2->(R1-R2)或者R1R2->(R2-R1)

当分解为三个及以上关系模式时(考试中比较少,知道就可以),可以通过表格法求解,如下:

考题来喽:

1.给定关系模式R<U,F>,U={A,B,C,D,E},F={B→A,D→A,A→E,AC→B},则R的候选关键字为(),分解p={R1(ABCE),R2(CD)} ()。

A.CD B.ABD C.ACD D.ADE

A.具有无损连接性,且保持函数依赖

B.不具有无损连接性,但保持函数依赖

C.具有无损连接性,但不保持函数依赖

D.不具有无损连接性,也不保持函数依赖

解析:候选键怎么推,上边有介绍,答案A,第二问,带入公式R1R2->(R1-R2)或者R1R2->(R2-R1),有损的,不保持函数依赖!

感谢大伙点赞+关注的支持,是我持续学习更新的动力,关注公众号:Coding-9527,跟大伙一起学习,成长,进步!

标签: #数据库如何分解3nf算法