将 table 归一化为 3NF

Normalizing a table to 3NF

我想确保我理解 table 规范化的概念。我在下面有以下示例 table:

Visit#  VisitDate   Patient#   PatientBirth ProviderID  ProviderSpecialty

100000  2/15/2012   55555555    4/8/1990    862715      Nurse Practitioner
100022  2/17/2012   33333333    3/30/1998   382216      Physical Therapist
104278  2/21/2012   22222222    7/18/1972   232174      Family Medicine
103745  2/20/2012   11111111    12/22/2011  145690      Pediatrics
116238  2/23/2012   11111111    12/22/2011  145690      Pediatrics
112145  2/26/2012   66666666    8/6/1989    582361      Midwife

要将此 table 分解为 3nf,我的建议是将其分解为 3 tables,并使用以下属性分组:(Visit#, VisitDate), (Patient#, PatientBirth), (ProviderID, ProviderSpecialty) 我不确定的是我们在此之后对 link 所有 table 一起做了什么。我最初的想法是将 patient# 作为每个 table 的主键,但我认为这违反了 2nf 的规则。任何指导将不胜感激!

像您一样分解 table 之后的第一步是确定 table 之间的关系。在您的示例中,每次访问都是针对一名患者和一名提供者。每个患者都有一次或多次就诊,并且(虽然未在示例中显示)可能有一个或多个提供者。每个提供者提供许多访问和许多患者。

使用这些关系,您可以将患者和提供者的主键放入访问中 table。如果您特别需要患者和提供者之间的 link,则需要使用两者的主键创建另一个 table,但是对于本示例而言,这不是必需的。

编辑:3nf 通常不涉及外键的指定,因为它们通常在 table 规范化后指定。所以你想出的 tables 已经在 3nf 中了。