如何求r的候选键

Python012

如何求r的候选键,第1张

解法:从函数依赖集出发,把所有属性分为4类

1、L类:全部出现在函数依赖的左半部

2、R:全部出现在函数依赖的右半部

3、LR:出现在函数依赖的左右两边

4、N:不出现在函数依赖中

可能成为候选键的有L类,LR类和N类

对于L类,求出它的闭包,若包含所有属性,则说明其为候选键,且为唯一候选键.

对于LR类,求出其闭包,若包含所有属性,则为候选键,若不包含,在找出其中一个属性结合.

对于N类,直接加至候选键即可.

对于你的题目

L:无

R:z

LR:w,x,y

N:无

先排除z

在LR中,w的闭包为{w,y,z,x}

x的闭包为{x,z}

y的闭包为{y,w}

wx的闭包为{w,x,y,z}

wy的闭包为{w,y}

xy的闭包为{x,y,z,w}

wxy的闭包为{x,z,y,w}

由此可见,候选键为{w,wx,xy,xyw}

可从候选键中选取一个作为主键.

刚好学了这个,就在这回答一下,要是还有什么问题可以问我.

我有空了再看看,有什么问题会给你回复的.

首先分析一下候选码,是WY,有非主属性部分函数依赖,所以是1NF。简单看一下分解,这个分解可以发现Y->U函数依赖丢了。这里其实就是相当于Y->U, U->V,被分解为YV和UV,这显然是有损的。

如果非要用算法证明就需要构建矩阵了,不过我们可以化简一下矩阵

YU V

R1(YV) yb12 v

R2(UV) b21uv

我们可以看到,无论如何应用函数依赖对这个矩阵进行转换,都无法使其中一行变成yuv,所以不是无损连接分解