这个问题显然是一个功课问题。我无法理解我的教授,也不知道他在大选期间所说的话。我需要逐步说明将下表首先规范化为1NF,然后是2NF,然后是3NF。
我感谢任何帮助和指导。
答案 0 :(得分:20)
好的,我希望我能正确记住所有这些,让我们开始......
要使它们非常短(并且不是非常精确,只是为了让您初步了解它的全部内容):
列“state
”的值类似于“WA,Washington”。 NF1被违反,因为这是两个值,缩写和名称。
解决方案:要完成NF1,请创建两列,STATE_ABBREVIATION
和STATE_NAME
。
想象一下,你有一张包含这4列的表格,表达了汽车模型的国际名称:
COUNTRY_ID
(数字,主键)CAR_MODEL_ID
(数字,主键)COUNTRY_NAME
(varchar)CAR_MODEL_NAME
(varchar)该表可能包含以下两个数据行:
也就是说,模型“Fox”在美国被称为“Fox”,但同样的车型在德国被称为“Polo”(不记得是否真的如此)。
违反了NF2,因为国家/地区名称不依赖于车型ID和国家/地区ID,而只取决于国家/地区ID。
解决方案:要实现NF2,请将COUNTRY_NAME
移至单独的表“COUNTRY”,其中包含COUNTRY_ID
列(主键)和COUNTRY_NAME
。要获取包含国家/地区名称的结果集,您需要使用JOIN连接这两个表。
假设您有一张包含这些列的表格,表示状态的气候条件:
STATE_ID
(varchar,主键)CLIME_ID
(外键,气候区的ID,如“沙漠”,“热带雨林”等)IS_MOSTLY_DRY
(布尔)违反了NF3,因为IS_MOSTLY_DRY仅依赖于CLIME_ID(至少假设是这样),而不是STATE_ID(主键)。
解决方案:要实现NF3,请将列MOSTLY_DRY
放入气候区表。
以下是关于练习中给出的实际表格的一些想法:
我应用上述NF规则而不挑战主键列。但它们实际上没有意义,我们稍后会看到。
因此,如果删除所有违反NF2或NF3的列,则只保留主键(EMP_ID和DEPT_CD)。剩下的部分违反了给定的业务规则:这种结构允许员工同时在多个部门工作。
让我们从远处回顾它。您的数据模型涉及员工,部门,技能以及这些实体之间的关系。如果你将其标准化,你最终将为员工提供一个表(包含DEPT_CD作为外键),一个用于部门,一个用于技能,另一个用于员工和技能之间的关系,持有“技能”年“对于EMP_ID和SKILL_CD的每个元组(我的老师会将后者称为”关联实体“)。
答案 1 :(得分:4)
查看表格中的前两行,并查看该表中标记为“PK”的列,并假设“PK”代表“主键”,
自己对这个问题进行了适当的教育。
这个练习不能被认真对待,因为问题陈述本身包含了无可救药的矛盾信息。
(因此,观察到这个问题根本就没有“好”或“正确”的答案!!!)
答案 2 :(得分:1)
另一个过于简化的答案即将出现。
在3NF关系表中,每个非键值都是由键,整个键以及除键之外的任何键确定的(所以请帮助我Codd;))。
1NF:钥匙。这意味着如果指定键值和命名列,则行和列的交叉处最多只能有一个值。不允许使用多个值,例如用逗号分隔的一系列值,因为您不能仅使用键和列名直接获取值。
2NF:整个关键。如果不是键的一部分的列由键列的适当子集确定,则违反2NF。
3NF:除了关键之外什么都没有。如果列由某些非键列确定,则违反3NF。答案 3 :(得分:0)
3NF只有在它处于第二范式并且没有任何传递依赖性且所有非关键属性都应该依赖于主键时才满足。
传递依赖: R =(A,B,C)。 A-> B和B-> C THEN A-> C