将关系分解为 3NF/BCNF

DBn*_*bie 5 normalization relational-theory

我无法分解与 3NF/BCNF 的关系。

我已经确定了关系:

R (A,B,C,D,E,F,G,H,I) 
Run Code Online (Sandbox Code Playgroud)

在哪里:

{A -> B,C}
{E -> F}
{D -> I}
{A,D -> G}
{G -> H}
Run Code Online (Sandbox Code Playgroud)

...主(唯一)键是A,D,E.

我已经确定该关系不在 2NF 中,因此也不在 3NF 和 BCNF 中,所以我必须首先将其分解为 2NF。

我已经完成了这些步骤并提出了以下分解:

+----------+-----+------------+
| Relation | Key | Attributes |
+----------+-----+------------+
| R1A      | A   | G,B,C      |
| R1B      | G   | H          |
| R2       | D   | I          |
| R3       | E   | F          |
+----------+-----+------------+
Run Code Online (Sandbox Code Playgroud)

这是 3NF/BCNF 的正确分解吗?

mir*_*173 1

不,你的分解甚至不是第二范式。

{A -> B,C}
{E -> F}
{D -> 我}
{A,D -> G}
{G -> H}

A、D 和 E 无法在依赖项的右侧找到,因此它们是每个键的成员。{A,D,E}生成所有属性,因此它是一个超键,因此是唯一的最小键但是您的分解是错误的AA不是R1A的键,因为G不依赖于A。所以R1A的键是{ A,G}。所以 R1A 不属于第二范式,因为 B 依赖于 {A},它是候选键的真子集。所以R应该分解为{A,B,C}, {E,F}, {D,I}, {A,D,G}, {G,H}。这些关系是第二、第三甚至是 Boyce-Codd 范式。