Database 将表规范化为第三个标准形式

Database 将表规范化为第三个标准形式,database,database-design,relational-database,normalization,database-schema,Database,Database Design,Relational Database,Normalization,Database Schema,这个问题显然是一个家庭作业问题。我听不懂我的教授,也不知道他在选举中说了什么。我需要一步一步地将下表规范化为1NF,然后是2NF,然后是3NF 非常感谢您的帮助和指导。好的,我希望我能正确地记住所有这些,让我们开始 规则 要使它们非常简短(不是非常精确,只是让你初步了解它的内容): NF1:表格单元格不能包含多个值 NF2:NF1,加上所有非主键列必须依赖于所有主键列 NF3:NF2,加上非主键列可能互不依赖 说明书 NF1:查找包含多个值的表格单元格,将它们放入单独的列中 NF2:查找

这个问题显然是一个家庭作业问题。我听不懂我的教授,也不知道他在选举中说了什么。我需要一步一步地将下表规范化为1NF,然后是2NF,然后是3NF


非常感谢您的帮助和指导。

好的,我希望我能正确地记住所有这些,让我们开始

规则 要使它们非常简短(不是非常精确,只是让你初步了解它的内容):

  • NF1:表格单元格不能包含多个值
  • NF2:NF1,加上所有非主键列必须依赖于所有主键列
  • NF3:NF2,加上非主键列可能互不依赖
说明书
  • NF1:查找包含多个值的表格单元格,将它们放入单独的列中
  • NF2:查找依赖于少于所有主键列的列,将它们放入另一个仅包含它们真正依赖的主键列的表中
  • NF3:查找除依赖主键之外还依赖于其他非主键列的列。将依赖列放入另一个表中
例子 NF1 列“
state
”的值类似于“WA,Washington”。违反了NF1,因为这是两个值,缩写和名称

解决方案:要实现NF1,请创建两列,
STATE\u缩写
STATE\u名称

NF2 假设您有一个包含以下4列的表格,表示汽车型号的国际名称:

  • 国家/地区ID
    (数字,主键)
  • CAR\u MODEL\u ID
    (数字,主键)
  • 国家/地区名称
    (varchar)
  • 车型名称
    (varchar)
该表可能有以下两个数据行:

  • 第1行:国家/地区ID=1,车型ID=5,国家/地区名称=美国,车型名称=福克斯
  • 第2行:国家/地区ID=2,车型ID=5,国家/地区名称=德国,车型名称=波罗
也就是说,型号“福克斯”在美国被称为“福克斯”,但同样的车型在德国被称为“马球”(不记得这是不是真的)

违反NF2,因为国家名称不依赖于车型ID和国家ID,而仅依赖于国家ID

解决方案:要实现NF2,请将
COUNTRY\u NAME
移动到一个单独的表“COUNTRY”,其中包含
COUNTRY\u ID
(主键)和
COUNTRY\u NAME
列。要获得包含国家名称的结果集,需要使用联接连接两个表

NF3 假设您有一个包含以下列的表格,表示各州的气候条件:

  • 状态\u ID
    (varchar,主键)
  • CLIME\u ID
    (外键,如“沙漠”、“雨林”等气候区的ID)
  • 大部分是干燥的
    (bool)
NF3被违反,因为is_DRY只依赖于CLIME_ID(让我们至少假设一下),而不依赖于STATE_ID(主键)

解决方案:为了满足NF3的要求,将列
mostry_DRY
放入气候带表中


以下是关于练习中给出的实际表格的一些想法:

我应用上面提到的NF规则而不询问主键列。但它们实际上没有意义,我们将在后面看到

  • NF1没有被违反,每个单元格只包含一个值
  • EMP_NM和所有电话号码都违反了NF2,因为所有这些列都不依赖于完整的主键。它们都依赖于EMP_ID(PK),但不依赖于DEPT_CD(PK)。我假设当一名员工转到另一个部门时,电话号码保持不变
  • DEPT_NM也违反NF2,因为DEPT_NM不依赖于完整的主键。这取决于部门CD,但不取决于EMP ID
  • NF2也被所有技能列所违反,因为它们不是部门,而是员工特有的
  • NF3被SKILL_NM破坏,因为SKILL name只取决于SKILL code,而SKILL code甚至不是复合主键的一部分
  • SKILL_YRS违反NF3,因为它依赖于主键成员(EMP_ID)和非主键成员(SKILL_CD)。因此,它部分依赖于非主键属性
因此,如果删除所有违反NF2或NF3的列,则只保留主键(EMP_ID和DEPT_CD)。其余部分违反了给定的业务规则:此结构允许员工同时在多个部门工作


让我们从远处回顾一下。您的数据模型涉及员工、部门、技能以及这些实体之间的关系。如果你将其标准化,你将得到一个员工表(包含DEPT_CD作为外键)、一个部门表、一个技能表和另一个员工与技能关系表,每个EMP_ID和skill_CD元组都有“技能年”(我的老师会称后者为“关联实体”).

又一个过于简单的答案出现了

在3NF关系表中,每个非键值都由键、整个键以及除键以外的所有值决定(所以请帮助我Codd;)

1NF:钥匙。这意味着,如果指定键值和命名列,则行和列的交点处最多有一个值。不允许使用多值,如用逗号分隔的一系列值,因为您不能仅使用键和列名称直接访问该值

2NF:整把钥匙。如果不是键的一部分的列由键列的适当子集确定,则违反了2NF


3NF:除了钥匙什么都没有。如果一列是由一组非键列确定的,则违反了3NF。

查看表中的前两行,