我经历了很多网站以了解规范化,但似乎我必须记住这些规则。一周或更长时间后,我忘了它,似乎每件事对我来说都是新的。
有没有更好的方法来理解前三种常规形式。我需要一些简单实用的例子来理解和记住它。
现在我知道,
1st Normal Form - Remove Repeating groups (should be Atomic).
2nd Normal Form - Remove partial Dependency.
3rd Normal Form - Remove transitive Dependency.
答案 0 :(得分:0)
答案 1 :(得分:0)
第一个正式表格应该清楚。 您拥有原子值并在表中创建冗余。此时它意味着:您当前的主键不再是唯一的。
2NF意味着您应该消除冗余数据。 属性需要依赖于您的主键,而不是其他非素数属性。如果它们不依赖于您的主键,则您的表不在第二个NF中。
3NF有点困难。我刚刚读到了关于它的另一个定义。所以通常你有:你的属性不能传递给你的主键。 转换意味着您的属性不应通过其他属性引用您的主键。让我们看一个示例:
| CourseNr | Course Name | ProfNr| ProfName |
---------------------------------------------------------
10 | Analysis | 90 | A |
12 | Math | 90 | A |
16 | Databases | 65 | D |
17 | Literature | 68 | F |
---------------------------------------------------------
但是现在你有一个从ProfName到CourseName的传递依赖,因为你的ProfName依赖于ProfNr到CourseNr。您的教授的名字不是您的桌子所必需的,而且您有冗余。现在您可以将其提取到:
| ProfNr | ProfName |
---------------------
| 90 | A |
| 65 | D |
| 68 | F |
---------------------
现在您可以删除第一个表格中的ProfName行。您的冗余已经消除,您可以通过ProfNr链接您的教授。
你的第一张桌子现在看起来像这样:
| CourseNr | Course Name | ProfNr |
----------------------------------------------
10 | Analysis | 90 |
12 | Math | 90 |
16 | Databases | 65 |
17 | Literature | 68 |
----------------------------------------------
对我来说:对于第三个NF,我总是有一个简单的例子,因为对我来说,我遇到了NF问题。
答案 2 :(得分:0)
以第一次规范化的形式应该没有冗余,即值应该是原子的
例如: 1 Rahul Computer Networks, Designing
在这里,“计算机网络”的“设计”不应出现在同一列中,因为它不会产生原子性。其值应类似于
1. 1 Rahul Computer Networks
2. 1 Rahul Designing`
避免冗余
第二次归一化形式不应存在部分依赖关系,并且应为1NF。 部分依赖:候选键的少量属性确定了非素数 属性。 换句话说,
A → B is called a partial dependency if and only if-
1. A is a subset of some candidate key
2. B is a non-prime attribute.
If any one condition fails, then it will not be a partial dependency.
第三次规范化形式:不应有任何传递依赖,并且应为2NF。 传递依赖项:只有在以下情况下,A→B称为传递依赖项: 1. A不是超级键。 2. B是非素数属性。 如果任何一个条件失败,那么它不是传递依赖。
如果每个非平凡函数依赖项X –> Y中至少满足以下条件之一,则关系为3NF
X is a super key.
Y is a prime attribute (each element of Y is part of some candidate key)
BCNF :如果存在每个非平凡的功能依赖关系,则该关系位于BCNF中
X –> Y, X is a super key.