将 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 中了。
我想确保我理解 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 中了。