为什么这张桌子在3NF?

时间:2017-04-20 19:19:58

标签: database database-design normalization database-normalization functional-dependencies

考虑下表:

enter image description here

主键是由PatID和PhysName组成的复合键。我的教授说这张桌子是第3种正常形式。我认为它甚至不是第二种正常形式,因为非键属性Name不依赖于整个主键。您只需查看PatID即可识别名称。它不依赖于PhysName。

2 个答案:

答案 0 :(得分:4)

为了真正了解表是否在2NF中,您必须明确为您准备功能依赖。

从少量数据样本中推断FD是一项有风险的业务。样本越小,风险越大。

我们必须在这里看到一位患有两名医生的患者,看看名字是否相同。我希望它会,但这只是常识。

当你从课堂练习转向百万美元的项目时,你会发现常识是数据分析的不可靠替代品。

答案 1 :(得分:-1)

给定一个表,我们可以看到它中包含哪些FD(功能依赖性),因此它的CK(候选键)是什么以及它满足哪些NF(正常形式)(直到BCNF) 。 (在不知道FD的情况下,我们无法知道CK和NF。)

FD(或任何约束)在变量中保存可能出现的每个值。然后它的CK和满意的NF基于那些FD。因此,对于变量,示例数据告诉我们某些FD 持有,并且"平凡的" FD 必须保留,但对于其他FD,示例数据只是不会告诉我们它们是否成立。

由于表没有{PatId,PhysName}作为CK,因此您的教师必须表示具有该值的某些变量具有该CK。 (当然,无论如何,你应该有变量值和变量。)为了考虑该变量具有该CK,他们必须决定:

  • 该表包含从&#34生成真实语句的行;名为 PhysName 的医生会将患者识别为 PatId ,并通过名称知道 PatName "
  • 具有特定姓名的医生每人只知道具有一个名称的给定身份的患者
  • (我们不知道这是错误的)两位不同的医生可以用相同的身份识别两个不同的病人
  • 可能每位医生都有一个独特的名字
  • 可能是每个医生都通过身份识别他们的每个病人
  • 可能是医生通过给定的身份识别出一名患者
  • 可能是医生仅通过一个身份识别患者
  • 可能"识别"总是意味着实体的1:1对应关系。 IDS
  • 可能每位患者只有一个名字

你需要知道它的价值与变量之间的关系,在你同意谓词和BR(业务规则)之前,争论变量和约束(包括FD)毫无意义。 / p>

PS Re BRs,谓词&约束:

命题是关于某种情况的陈述:"名为' Scholl,F。'倾向于他们认为是99999的患者并且通过名字知道Gore,Z。'"。 谓词是一个语句模板,映射来自一行列名称&命题的值:"名为 PhysName 的医生倾向于他们识别为 PatId 的患者,并且通过名称知道 PatName " 。表变量保存在某种情况下形成真实命题的行。

BRs 业务规则)提供变量谓词并描述可能出现的情况。因此,可以产生哪些表变量值,因此FD持有什么,因此CK等等。