gpt4 book ai didi

database - 将表规范化为第三范式

转载 作者:太空狗 更新时间:2023-10-30 01:46:19 24 4
gpt4 key购买 nike

这道题显然是一道作业题。我听不懂我的教授,也不知道他在选举中说了什么。我需要逐步说明将下表标准化为 1NF,然后是 2NF,然后是 3NF。

enter image description here

我感谢任何帮助和指导。

最佳答案

好吧,我希望我都没有记错,让我们开始吧……
规则
使它们非常简短(并且不是很精确,只是为了让您对它的全部内容有一个初步的了解):

  • NF1 :一个表格单元格不能包含多个值。
  • NF2 : NF1,加上所有非主键列必须依赖于所有主键列。
  • NF3 : NF2,加上非主键列可能不相互依赖。

  • 指示
  • NF1 :查找包含多个值的表格单元格,将它们放入单独的列中。
  • NF2 : 查找依赖于少于所有主键列的列,将它们放入另一个只有它们真正依赖的主键列的表中。
  • NF3 : 除了依赖于主键之外,查找依赖于其他非主键列的列。将依赖列放入另一个表中。

  • 例子
    NF1
    列“ state”的值类似于“WA, Washington”。违反了 NF1,因为这是两个值,缩写和名称。
    解决方案:要满足NF1,创建两列, STATE_ABBREVIATIONSTATE_NAME .
    NF2
    想象一下,你有一个包含这 4 列的表格,表示汽车模型的国际名称:
  • COUNTRY_ID (数字,主键)
  • CAR_MODEL_ID (数字,主键)
  • COUNTRY_NAME (varchar)
  • CAR_MODEL_NAME (varchar)

  • 该表可能有以下两个数据行:
  • 第 1 行:COUNTRY_ID=1,CAR_MODEL_ID=5,COUNTRY_NAME=USA,CAR_MODEL_NAME=Fox
  • 第 2 行:COUNTRY_ID=2,CAR_MODEL_ID=5,COUNTRY_NAME=德国,CAR_MODEL_NAME=Polo

  • 也就是说,模型“Fox”在美国被称为“Fox”,但同款车型在德国被称为“Polo”(不记得是否真的如此)。
    违反了 NF2,因为国家名称不取决于汽车型号 ID 和国家 ID,而仅取决于国家 ID。
    解决方案:为了满足 NF2,移动 COUNTRY_NAME到一个单独的表“国家”与列 COUNTRY_ID (主键)和 COUNTRY_NAME .要获得包含国家/地区名称的结果集,您需要使用 JOIN 连接两个表。
    NF3
    假设您有一个包含这些列的表格,表示各州的气候条件:
  • STATE_ID (varchar, 主键)
  • CLIME_ID (外键,气候区的 ID,如“沙漠”、“雨林”等)
  • IS_MOSTLY_DRY ( bool )

  • 违反了 NF3,因为 IS_MOSTLY_DRY 仅取决于 CLIME_ID(让我们至少假设),而不取决于 STATE_ID(主键)。
    解决方案:要履行NF3,把列 MOSTLY_DRY进入气候区表。

    以下是关于练习中给出的实际表格的一些想法:
    我应用上面提到的 NF 规则而不挑战主键列。但它们实际上没有意义,我们稍后会看到。
  • NF1 没有被违反,每个单元格只保存一个值。
  • EMP_NM 和所有电话号码违反了 NF2,因为所有这些列都不依赖于完整的主键。它们都依赖于 EMP_ID (PK),而不依赖于 DEPT_CD (PK)。我假设当员工搬到另一个部门时电话号码保持不变。
  • DEPT_NM 也违反了 NF2,因为 DEPT_NM 不依赖于完整的主键。它取决于 DEPT_CD,而不取决于 EMP_ID。
  • 所有技能列也违反了 NF2,因为它们不是特定于部门的,而是特定于员工的。
  • SKILL_NM 违反了NF3,因为技能名称只取决于技能代码,它甚至不是复合主键的一部分。
  • SKILL_YRS 违反了 NF3,因为它依赖于一个主键成员 (EMP_ID) 和一个非主键成员 (SKILL_CD)。所以它部分依赖于非主键属性。

  • 因此,如果您删除所有违反 NF2 或 NF3 的列,则仅保留主键(EMP_ID 和 DEPT_CD)。剩下的部分违反了给定的业务规则:这种结构将允许员工同时在多个部门工作。
    让我们从远处回顾一下。您的数据模型是关于员工、部门、技能以及这些实体之间的关系。如果您将其标准化,您将最终得到一张用于员工的表(包含 DEPT_CD 作为外键),一张用于部门,一张用于技能,另一张用于员工与技能之间的关系,其中包含“技能”年”为 EMP_ID 和 SKILL_CD 的每个元组(我的老师会称后者为“关联实体”)。

    关于database - 将表规范化为第三范式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15274985/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com