要理解这个主题,您应该对 Functional Dependency & Candidate keys 和 Normal forms 有一个基本的了解。
找到关系的最高范式的步骤:
- 找到关系的所有可能的候选键。
- 将所有属性分为两类:主要属性和非主要属性。
- 检查1种正常形式然后2次等等。如果它不满足第 n个范式条件,则最高范式将为 n-1。
示例 1. 找到关系R(A,B,C,D,E) 的最高范式,其 FD 集为 {A->D, B->A, BC->D, AC->BE}
Step 1.如我们所见,(AC) + ={A, C, B, E, D} 但它的子集都不能确定关系的所有属性,所以 AC 将是候选键。 A 可以从 B 派生,所以我们可以用 B 替换 AC 中的 A。所以 BC 也将是一个候选键。所以会有两个候选键{AC, BC}。
步骤 2.素数属性是本例中属于候选键 {A, B, C} 的那些属性,本例中其他属性将是非素数 {D, E}。
步骤3.关系R是在1种正常形式作为一个关系数据库管理系统不允许多值或复合属性。
的关系是不是在第二普通的形式,因为A-> d是(这是候选键AC被确定非黄金属性d的子集A)部分依赖和第2次正常形式不允许部分依赖。
因此,最高范式将是第1范式。
示例 2.找到关系 R(A,B,C,D,E) 的最高范式,其中 FD 设置为 {BC->D, AC->BE, B->E}
Step 1.如我们所见, (AC) + ={A,C,B,E,D} 但它的子集都不能确定关系的所有属性,所以 AC 将是候选键。 A 或 C 不能从关系的任何其他属性派生,因此将只有 1 个候选键 {AC}。
步骤 2.素数属性是本例中属于候选键 {A,C} 的那些属性,本例中其他属性将是非素数 {B,D,E}。
步骤3.关系R是在1种正常形式作为一个关系数据库管理系统不允许多值或复合属性。
关系是第二范式,因为 BC->D 是第二范式(BC 不是候选键 AC 的真子集),而 AC->BE 是第二范式(AC 是候选键)和 B ->E 是第二范式(B 不是候选键 AC 的真子集)。
该关系不是第三范式,因为在 BC->D(BC 既不是超级键,D 也不是主要属性)和 B->E(B 既不是超级键,E 也不是主要属性)但是为了满足第三个标准,FD 的 LHS 应该是超级密钥,或者 RHS 应该是主要属性。
所以关系的最高范式将是第二范式。
示例 3.找到关系 R(A,B,C,D,E)的最高范式,其FD 集为 {B->A, A->C, BC->D, AC->BE}
Step 1.如我们所见,(B) + ={B,A,C,D,E},所以 B 将是候选键。 B 可以使用 AC->B(将 AC->BE 分解为 AC->B 和 AC->E)从 AC 导出。所以 AC 将是超级键,但 (C) + ={C} 和 (A) + ={A,C,B,E,D}。所以A(AC的子集)将是候选键。所以会有两个候选键{A,B}。
步骤 2.素数属性是本例中属于候选键 {A,B} 的那些属性,本例中其他属性将是非素数 {C,D,E}。
第 3 步。关系R是在1种正常形式作为一个关系数据库管理系统不允许多值或复合属性。
关系是第二范式,因为 B->A 是第二范式(B 是超级键),A->C 是第二范式(A 是超级键),BC->D 是 2 nd范式(BC 是超级键),AC->BE 是第二范式(AC 是超级键)。
这种关系是第三范式,因为所有 FD 的 LHS 都是超级键。该关系在 BCNF 中,因为所有 FD 的所有 LHS 都是超级密钥。所以最高范式是BCNF。