虽然我了解正常形式是什么,但我无法使用它们。我正在学习数据库系统课程,不知怎的,我对此感到有些失落。我曾经尝试过Google,stackoverflow,课程和书籍的幻灯片,但是每个例子似乎都让我偏离了轨道。如果我在这篇文章中做出一些错误的假设/结论,我会非常喜欢一些指示,但也有一些关于我到底缺少什么的指示。
我今天遇到的一个具体练习是这样的: 给定此DB,将其转换为BCNF:
DB:
AB -> EF
F -> AB
A -> CD
据我所知,这里有两个可能的候选键。 AB和F.这是因为两者都能够推导出整个数据库,并且因为它们只包含一个左侧,所以它们都是最小的。
我们说我们用F作为主键
最初:DB(F->AB)
对于1NF,似乎没有重复的组。检查。
对于2NF,似乎没有部分依赖性。 (如果F是唯一的主键,这不是不可能的吗?)
对于3NF来说,这是一个问题! AB和A都不是键,但确定其他属性。
要解决这个问题,他们需要成为关键:(抱歉缺少下划线,似乎没有下划线的选项)
DB(F->AB)
R1(AB->EF)
R2(A->CD)
据我了解,对于BCNF,过程如下:将3NF DB与原始DB进行比较。在原始DB中查找出现的情况,其中整个左侧存在3NF DB且至少存在一个右侧。我不太确定怎么可能没有这个。也许我误解了这一部分。无论如何,继续;
首次出现的是F-> AB。这是主键,因此可以 第二次出现是AB-> EF。由于AB是候选键,因此也可以 最后出现的是A-> CD。 A只是候选键的一部分。这违反了BCNF,必须重写。这是我完全下车的地方。我不知道如何重写这个,我不确定到目前为止这个程序是否有意义。任何人都可以帮我把它包起来吗?
答案 0 :(得分:1)
你是对的:A-> CD是违反BCNF的依赖关系。你将你的关系分成两部分:
这是您停止的地方,因为所有功能依赖项都符合BCND规则。