这道题显然是一道作业题。我无法理解我的教授,也不知道他在选举期间说了什么。我需要逐步说明将下表首先标准化为 1NF,然后是 2NF,然后是 3NF。
我感谢任何帮助和指导。
这道题显然是一道作业题。我无法理解我的教授,也不知道他在选举期间说了什么。我需要逐步说明将下表首先标准化为 1NF,然后是 2NF,然后是 3NF。
我感谢任何帮助和指导。
好吧,我希望我没记错,让我们开始吧……
为了使它们非常简短(并且不是很精确,只是为了让您初步了解它的全部内容):
列“ 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 的每个元组(我的老师会称后者为“关联实体”)。
查看表中的前两行,
并查看该表中哪些列被标记为“PK”,
并假设“PK”代表“主键”,
并查看为这两个列显示的值两行,
我建议你的教授从数据库教学中滚出来,直到他对这个主题进行了适当的教育后再回来。
这个练习不能被认真对待,因为问题陈述本身包含了无可救药的矛盾信息。
(请注意,因此,对于这个问题根本没有“好”或“正确”的答案!!!)
另一个过于简单的答案出现了。
在 3NF 关系表中,每个非键值都由键、整个键和除了键确定(所以帮助我 Codd ;))。
1NF:关键。这意味着如果您指定键值和命名列,则在行和列的交叉处最多会有一个值。不允许使用多值,例如用逗号分隔的一系列值,因为您不能仅使用键和列名直接获取值。
2NF:全键。如果不属于键的列由键列的适当子集确定,则违反了 2NF。
3NF:只有钥匙。如果一列是由一组非关键列确定的,则违反了 3NF。
3NF 仅在它处于第二范式并且没有任何传递依赖并且所有非键属性都应该依赖于主键时才满足。
传递依赖:R=(A,B,C)。A->B 和 B->C 然后 A->C