这个问题显然是一个家庭作业问题。我听不懂我的教授,也不知道他在选举中说了什么。我需要逐步说明将下表标准化为1NF,然后是2NF,然后是3NF。
感谢您的帮助和指导。
最佳答案
好吧,我希望我能正确记住所有这些,让我们开始吧...
规则
使它们非常简短(而不是非常精确,只是让您初步了解所有内容):
指示
例子
NF1
列“
state
”的值类似于“WA,Washington”。违反了NF1,因为这是两个值,缩写和名称。解决方案:要实现NF1,请创建两列
STATE_ABBREVIATION
和STATE_NAME
。NF2
想象一下,您有一个包含这4列的表格,它们表示汽车模型的国际名称:
COUNTRY_ID
(数字,主键)CAR_MODEL_ID
(数字,主键)COUNTRY_NAME
(varchar)CAR_MODEL_NAME
(varchar)该表可能具有以下两个数据行:
也就是说,模型“Fox”在美国被称为“Fox”,而同一辆汽车模型在德国被称为“Polo”(不记得是不是真的)。
违反了NF2,因为国家/地区名称不取决于汽车型号ID和国家/地区ID,而仅取决于国家/地区ID。
解决方案:要实现NF2,请将
COUNTRY_NAME
移到带有COUNTRY_ID
(主键)和COUNTRY_NAME
列的单独的表“COUNTRY”中。要获得包含国家/地区名称的结果集,您需要使用JOIN连接两个表。NF3
假设您有一个包含这些列的表格,用于表达各州的气候条件:
STATE_ID
(varchar,主键)CLIME_ID
(外键,气候区域的ID,例如“沙漠”,“雨林”等)IS_MOSTLY_DRY
( bool )违反了NF3,因为IS_MOSTLY_DRY仅取决于CLIME_ID(至少假设这样),而不取决于STATE_ID(主键)。
解决方案:要实现NF3,请将
MOSTLY_DRY
列放入气候区表中。以下是有关练习中给出的实际表格的一些想法:
我应用了上面提到的NF规则,而没有挑战主键列。但是它们实际上没有任何意义,我们将在后面看到。
不违反
因此,如果删除所有违反NF2或NF3的列,则仅保留主键(EMP_ID和DEPT_CD)。其余部分违反了给定的业务规则:这种结构将允许员工同时在多个部门工作。
让我们从远处回顾一下。您的数据模型涉及员工,部门,技能以及这些实体之间的关系。如果对此进行归一化,则最终将得到一张用于员工的表(包含DEPT_CD作为外键),一张用于部门,一张用于技能,另一张用于员工与技能之间的关系,并持有“技能”。 EMP_ID和SKILL_CD的每个元组使用“年份”(我的老师会把后者称为“关联实体”)。
关于database - 将表格标准化为第三范式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15274985/