虽然我知道正常的形式是什么,但我在工作中遇到了困难。我正在学习数据库系统的课程,不知怎么的,我有点迷失了方向。我试过谷歌,堆叠溢出,幻灯片的课程和书,但例子似乎使我偏离轨道,每次。如果我在这篇文章中做了一些错误的假设/结论,我非常想要一些指点,但也想要一些关于我到底错过了什么的建议。
我今天遇到的一个具体练习是:给定这个DB,将它转换为BCNF:
DB:
AB -> EF
F -> AB
A -> CD据我所知,这里有两个可能的候选密钥。这是因为两者都能导出整个DB,因为两者都是极小的,因为它们都是由单个左手边组成的。
假设我们用F作为主键。
最初:DB(F->AB)
对于1NF,似乎没有重复组。检查一下。
对于2NF,似乎不存在部分依赖关系。(如果F是唯一的主键,这不是不可能的吗?)
对于3NF,有一个问题!AB和A都不是键,而是决定其他属性的。要解决这个问题,他们需要成为关键:(抱歉,没有下划线,似乎没有选择下划线)
DB(F->AB)
R1(AB->EF)
R2(A->CD)据我了解,对于BCNF,过程如下:将3NFDB与原始DB进行比较。在原始DB中找到出现的情况,其中整个左手侧都存在3NFDB,并且至少有一个右手侧存在。我不太清楚怎么可能没有这种情况。也许我误解了这部分。无论如何,还在继续;
第一次出现在F->AB。这是主键,因此可以。
其次为AB->EF。因为AB是候选键,这也可以。
最后一次出现是A->CD。A只是候选密钥的一部分。这违反了BCNF,必须重写。这就是我完全下火车的地方。我不知道该如何重写,我也不确定到目前为止这个程序是否有意义。有人能帮我把它包起来吗?
发布于 2014-03-24 19:09:15
您说得对: A->CD是违反BCNF的依赖项。你把你的关系一分为二:
这是停止的地方,因为所有的函数依赖符合BCND规则。
https://stackoverflow.com/questions/22615161
复制相似问题