前提:观看up主的视频,本以为都会了,但是现在发现视频部分内容不正确,建议读者先去看看up主的视频(数据库计算题—快速计算最小依赖集_哔哩哔哩_bilibili),在看下面内容
解决:步骤如下
(1)右边单一化
(2)去掉冗余依赖
(3)左边单一化
(1)(2)步骤不详细说明,这里只说明3步骤的注意问题
设左边单一化,前函数依赖集为F={①ABD→C,②C→B,③AD→B,④ AD→F,⑤ B→E}
单一化 ABD->C
H={①AB→C,②C→B,③AD→B,④ AD→F,⑤ B→E}
我们要验证(AB)F+是否能退出C,注意一定原函数依赖集的闭包,并且ABD->C不能去掉,
如果C属于AB)F+,则说明H和F是等价的函数依赖集。(实际上其原理就是ABD去掉D后(AB)F+能否推出A)
那么有的人又会问了不应该是ABD去掉D后(AB)F+能否推出C吗,我给大家举个看似正确例子
F={AB->C,B->E,E->C} 我们对AB->C单一化,去掉A 显然C属于(B)F+=,但是这个例子在进行到第三步本身就是不对的,因为明显F中存在冗余的依赖AB->C,所以我上面红字所说的是正确的。
另外:针对第三步还要注意一个问题,就是如果我们对一个关系左边单一化后,要进行第二部,即再次验证是否存在冗余,这很容易理解,因为去掉关系某个属性后,原来不存在冗余的依赖,会出现冗余情况。具体例子如下。
H={①ABD→C,②C→B,③AD→B,④ AD→F,⑤ B→E}。
ABD->C单一化后
J={①AD→C,②C→B,③AD→B,④ AD→F,⑤ B→E}
显然,③是冗余的,去掉。
H”={AD→C, C→B, AD→F, B→E}
在进行单一化处理。。。。。。。
版权声明:本文为weixin_42888110原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。