我有以下关系,我需要将其标准化为4NF
。
首先,我试图找到所有的FD和MVD。
AB ->> C (MVD)
C -> D (FD)
D -> E (FD)
ABC -> F (FD)
接下来,使用这些依赖项,我设法找到候选键:ABC
。如果我到目前为止所做的事情是正确的,请告诉我。另外,4NF中有多值依赖可以吗?像AB ->> C
和ABC -> F
?
谢谢。
一般来说依赖关系描述了对数据的重要约束,例如函数依赖性X → A
意味着X
的某个值唯一地确定了A
的某个值(也就是说,每当我们在元组中找到X
的某个值时,我们总会发现A
的相同值)。这种类型的约束不能通过表的(少数)行来推断,其中数据的含义是未知的。
在最好的情况下,我们可以在表的特定实例中推断出一组可能的函数依赖关系,希望(但没有任何特殊原因)这些函数依赖关系将保存在表的每个实例上,这是唯一的条件。我们可以“规范化”关系(而不是简单地找到存储该表的特定实例的非冗余方式)。
例如,在您的情况下,由于表中的行很少,因此可以将许多功能依赖性视为保留在其中,例如至少以下内容:
F → AB
E → AD
D → AE
C → ADE
B → A
EF → ABCD
DF → ABCE
CF → ABDE
CB → ADEF
(而ABC → F
可以来自CB → ADEF
,而AB →→ C
不能保留)。
如果我们应该将规范化算法应用于该实例(例如3NF的合成算法),我们将在夸大的子模块数中分解关系:
R1(AB), R2(BCF), R3(CD), R4(ADE), R5(CEF),
具有六个属性的表的五个关系!