1

这是我已经完成的作业,我只需要确认它是否正确完成或提示如何解决它。谢谢。
这是问题:

关系疫苗旨在记录有关婴儿及其疫苗接种的信息:特定婴儿何时接种了特定疫苗;接种疫苗的地点;谁接种了疫苗。下面给出了关系标题:
Vaccine( VaccineCode, InfantId, Date , InfantName, InfantAddress, MedicalCentreCode,MedicalCentreName, MedicalCentreAddress,NurseId, NurseName)

除了以主键作为决定因素的函数依赖之外,Vaccine 还具有以下重要的函数依赖:
FD1:InfantId -> InfantName
FD2:InfantId -> InfantAddress
FD3:MedicalCentreCode -> MedicalCentreName
FD4:MedicalCentreCode -> MedicalCentreAddress
FD5:NurseId - > 护士姓名

首先在 2NF 中给出这个关系,然后在 3NF 中给出。

我的解决方案:
2NF:
Infant( InfantID , InfantName,InfantAddress)
Rest( VaccineCode, InfandID, Date , MedicalCentreCode, MedicalCentreName, MedicalCentreAddress, NurseId, NurseName)

现在婴儿在 2NF 和 3NF 中,但休息关系不在 3NF 中。所有这些关系的 3NF 看起来像这样(当然根据我的说法):
VaccinationDetails( VaccineCode, InfantID, Date ,MedicalCentreCode NurseId)

婴儿(婴儿ID、婴儿姓名、婴儿地址)

医疗中心(医疗中心代码,医疗中心名称,医疗中心地址)

护士( NurseId , NurseName)

我的解决方案是 2NF 和 3NF 吗?

4

1 回答 1

1

2NF 要求关系 a) 在 1NF 中,并且 b) 没有部分密钥依赖关系。

Infant (InfantID, InfantName,InfantAddress)从原始关系投影是正确的。InfantName 和 InfantAddress 在功能上依赖于 InfantID;InfantID 是键 {VaccineCode, InfantId, Date} 的一部分。

现在婴儿在 2NF 和 3NF 中,但休息关系不在 3NF 中。

这是正确的。3NF 要求 a) 关系在 2NF 中,并且 b) 没有传递依赖。从 {VaccineCode, InfantId, Date} 到 MedicalCentreCode 到 {MedicalCentreName, MedicalCentreAddress} 有一个传递依赖关系。所以通过投影消除传递依赖给你

  • 婴儿 { InfantID , InfantName,InfantAddress}
  • MedicalCentres { MedicalCentreCode , MedicalCentreName, MedicalCentreAddress}
  • 疫苗接种 { VaccineCode, InfantID, Date , MedicalCentreCode, NurseId, NurseName}

还有另一个涉及 NurseID 和 NurseName 的传递依赖。投射那个给你的

  • 婴儿 { InfantID , InfantName,InfantAddress}
  • MedicalCentres { MedicalCentreCode , MedicalCentreName, MedicalCentreAddress}
  • 护士 { NurseID , NurseName}
  • 疫苗接种 { VaccineCode, InfantID, Date , MedicalCentreCode, NurseId}

这四个关系现在至少都在 3NF 中。(前三个在 5NF 中。)

超越你的家庭作业

但这有一个小问题。就目前而言,您可以输入“综合医院”的医疗中心代码,以及不在该处工作的护士的身份证号码。您可能会考虑如何表达这种依赖关系,以及由此产生的关系可能是什么样子。

于 2012-04-09T22:07:31.093 回答