(软考)图示法求候选键,及快捷求候选键,和数据库模式分解的表格法,及无损连接分解的快捷判别方法

本文深入探讨了数据库理论中的关键概念,包括如何使用图示法求候选键,通过快捷方法判断候选键,以及无损连接分解的详细步骤和判断技巧。通过实例解析了函数依赖如何影响候选键的确定,并展示了无损连接分解的表格法判断过程。这些理论知识对于理解和设计高效数据库至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

求候选键

图示法求候选键

图示法求候选键的过程如下:
(1)将关系的函数依赖关系,用"有向图"的方式表示。  
(2)找出入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中所有结点,则该属性集即为关系模式的候选键。  
(3)若入度为0的属性集,不能遍历图中所有结点,则需要尝试性的将一些中间结点(既有入度,也有出度的结点),并入入度为0的属性集中,直至该集合能遍历所有结点,集合为候选键。

如果一个属性集,能唯一表示元组,且又不含有多余属性,那么这个属性集就是候选键。

例如:关系R(A,B,C)满足下列函数依赖F{A->B,A->C,B->AC},关系R的候选关键字为:

解答:

以入度为0的A出发作图,其中A、B遍历了所有的属性,则A、B是关系R的候选关键字。

快捷方法求候选键

若W是候选键,则必须满足两个条件:W的闭包是U;W没有冗余。

设关系模式R中,U=ABC.......等N个属性,U中的属性,在FD中有四种范围

  • 左右出现;
  • 只在左部出现;
  • 只在右部出现;
  • 不在左右出现;

算法:按以下步骤求候选键:

  • R:只在FD右部出现的属性,不属于候选码;
  • L:只在FD左部出现的属性,一定存在于某候选码当中;
  • N:外部属性一定存在于任何候选码当中;
  • 其他属性,逐个与L,N的属性组合,求属性闭包,直至X的闭包等于U,若等于U,则X为候选码

例1:R<U,F>,U=(ABCDEG),F={AB-->C,CD-->E,E-->A.A-->G},求候选码。  

  • 因G只在右边出现,所以G一定不属于候选码;
  • 而B,D只在左边出现,所以B,D一定属于候选码;
  • BD的闭包还是BD,则对BD进行组合,除了G以外,BD可以跟A,C,E进行组合;
  •   先看ABD

  ABD本身自包ABD,而AB-->C,CD-->E,A-->G,所以ABD的闭包为ABDCEG=U

  •   再看BDC

  CD-->E,E-->A,A-->G,BDC本身自包,所以BDC的闭包为BDCEAG=U

  •   最后看BDE

  E-->A,A-->G,AB-->C,BDE本身自包,所以BDE的闭包为BDEAGC=U

  因为(ABD)、(BCD)、(BDE)的闭包都是ABCDEG所以本问题的候选码有3个分别是ABC、BCD和BDE

 例2:举例R<U,F>,U=(ABCDEF),F={AB-->C,BD-->E,E-->A},求候选键 

因为BD只在FD的左边出现,故BD一定属于候选码当中;

又因F是FD的外部属性,所以F也属于候选码当中;

BDF的闭包是否等于U,若成立则BDF就是候选键。

BDF由于自包,所以有BDF,然后BD-->E,E-->A,而AB-->C,所以BDF是R的闭包。

判断是否为无损连接分解

表格法

和左边关系有关的就标a(列) , 没关系的标b(行列)。

设关系模式R=A1,…,An,R上成立的FD集F,R的一个分解p={R1,…,Rk}。无损连接分解的判断步骤如下:

  (1)构造一张k行n列的表格,每列对应一个属性Aj(1≤j≤n),每行对应一个模式Ri(1≤i≤k)。如果Aj在Ri中,那么在表格的第i行第j列处填上符号aj,否则填上符号bij。

  (2)把表格看成模式R的一个关系,反复检查F中每个FD在表格中是否成立,若不成立,则修改表格中的元素。修改方法如下:对于F中一个FD:X→Y,如果表格中有两行在X分量上相等,在Y分量上不相等,那么把这两行在Y分量上改成相等。如果Y的分量中有一个是aj,那么另一个也改成aj;如果没有aj,那么用其中的一个bij替换另一个(尽量把ij改成较小的数,亦即取i值较小的那个)。

  若在修改的过程中,发现表格中有一行全是a,即a1,a2,…,an,那么可立即断定p相对于F是无损连接分解,此时不必再继续修改。若经过多次修改直到表格不能修改之后,发现表格中不存在有一行全是a的情况,那么分解就是有损的。特别要注意,这里有个循环反复修改的过程,因为一次修改可能导致表格能继续修改。

  修改过程中要特别注意,若某个bij被改动,那么它所在列的所有bij都需要做相应的改动。为了明确这一点,举例说明。例如,我们根据FD“H→I”、“ K→L”来修改表格之前时的表格如表1所示(已经过多次修改,非初始表,空的单元表示省略):

表1 

 

H

I

J

K

L

R1

 

b12

 

 

b35

R2

a1

a2

 

a4

b25

R3

a1

b12

 

a4

b35

R4

 

b12

 

 

b35

  R2、R3所在行的H分量都为a1,根据FD“H→I”,需要修改这两行对应的I分量,而R2所在行的I分量为a2,因此,要将R3所在行的I分量b12修改为a2,注意到,R1、R4所在行的H分量也为b12,因此,这两行对应的I分量也必须修改为a2。R2、R3所在行的K分量都为a4,根据FD“K→L”,需要修改这两行对应的L分量,于是将R3所在行的L分量b35修改为较小的b25,同时注意到,R1、R4所在行的L分量也为b35,因此,这两行对应的L分量也必须修改为b25。修改后的表格如表2所示:

  表2

 

H

I

J

K

L

R1

 

a2

 

 

b25

R2

a1

a2

 

a4

b25

R3

a1

a2

 

a4

b25

R4

 

a2

 

 

b25

例题

  设关系模式 R为 R(H,I,J,K,L),R上的一个函数依赖集为 F={H→J,J→K,I→J,JL→H},分解 (38) 是无损连接的。

  供选择的答案:

   A. p={HK,HI,IJ,JKL,HL} B. p={HIL,IKL,IJL}

  C. p={HJ,IK,HL} D. p={HI,JK,HL}

  试题分析:

  根据上述判断方法,我们列出选项B(分解成三个关系模式R1(HIL)、R2(IKL)、R3(IJL) )的初始表如表3所示:

  表3 选项B的初始表

 

H

I

J

K

L

HIL

a1

a2

b13

b14

a5

IKL

b21

a2

b23

a4

a5

IJL

b31

a2

a3

b34

a5

  对于函数依赖集中的H→J、J→K对表3进行处理,由于属性列H和属性列J上无相同的元素,所以无法修改。但对于I→J在属性列I上对应的1、2、3行上全为a2元素,所以,将属性列J的第一行b13和第二行b23改为a3。修改后如表4所示:

表4 选项B的中间表 

 

H

I

J

K

L

HIL

a1

a2

a3

b14

a5

IKL

b21

a2

a3

a4

a5

IJL

b31

a2

a3

b34

a5

  对于函数依赖集中的JL→H在属性列J和L上对应的1、2、3行上为a3、a5元素,所以,将属性列H的第二行b21和第三行b31改为a1。修改后如表5所示:

  表5 选项B的结果表

 

H

I

J

K

L

HIL

a1

a2

a3

b14

a5

IKL

a1

a2

a3

a4

a5

IJL

a1

a2

a3

b34

a5

  从表5可以看出,第二行为a1、a2、a3、a4、a5,所以分解p是无损的。

  有一种特殊情况要注意:分解后的各个关系模式两两均无公共属性。由于是模式分解,那么任一一个分解后的关系模式覆盖的属性集不可能是分解前的整个全部属性U,因此初始表中不存在全是a的行。又注意到,分解后的各个关系模式两两均无公共属性,表明任两行在任一列上都没有相同的分量,这导致整个表格无法修改,保持初始状态。而初始状态不存在全是a的行,因此这种特殊情况的分解是有损的。

  例如,函数依赖集合FD,将关系模式R(ABCDEF)分解成R1(AB)、R2(CDE)、R3(F),那么这种分解肯定是有损的。考试中可能碰到这种情况,那么一眼就可以判断出结果,从而节省了时间。

无损连接分解的快捷判别方法

  首先要申明,这种快捷方法是有前提的,前提就是分解后的关系模式只有两个。其内容为:

 若关系模式R(U,F)中,被分解为p={R1, R2}是R的一个分解,若R1∩R2 → R1 - R2或者R1∩R2 → R2 - R1,则为无损连接

设ρ={R1,R2}是R的一个分解,F是R上的FD集,那么分解ρ相对于F是无损分解的充分必要条件是:(R1∩R2)→(R1–R2)(R1∩R2)→(R2–R1)。

这个“或”字很重要,这里表示(R1∩R2)→(R1–R2)、(R1∩R2)→(R2–R1)中只要有一个成立就行。这里的求交相减运算的对象是关系模式的属性。

例题

  关系模式R(U,F),其中U={W,X,Y,Z},F={WX→Y,W→X, X→Z,Y→W}。那么下列分解中是无损分解的是。

  供选择的答案:

  A.p={R1(WY),R2(XZ)} B.p={R1(WZ),R2(XY)}

  C.p={R1(WXY),R2(XZ)} D.p={R1(WX),R2(YZ)}

  试题分析:

  A选项,R1∩R2为空,肯定不满足条件

  B选项,R1∩R2为空,肯定不满足条件。

  C选项,R1∩R2={X},R1-R2={WY},R2-R1={Z},根据函数依赖集,X→Z成立,所以满足条件。

  D选项,R1∩R2为空,肯定不满足条件。

总结

  模式分解无损性判别的源泉仍然是普通的表格法。这种快捷方法只不过是根据这种表格法推断出来的而已,是它的一个特列。但是这种快捷方法却往往非常有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿啄debugIT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值