2012-04-09 37 views
1

这是我已经做过的功课,我只需要确认它是否正确完成或者提示如何解决它。谢谢。
这是一个问题:2NF和3NF的关系

关系疫苗旨在记录有关婴儿及其接种疫苗的信息:特定婴儿接种特定疫苗时;接种疫苗的地方;谁管理疫苗。以下是该 关系标题:
疫苗(VaccineCode,InfantId,日期,InfantName,InfantAddress, MedicalCentreCode,MedicalCentreName,MedicalCentreAddress,NurseId, NurseName)

除了与主键的功能依赖他们的行列式, 疫苗具有以下非平凡函数依赖:
FD1:InfantId - > InfantName
FD2:InfantId - > InfantAddress
FD3:MedicalCentreCode - > MedicalCentreName
FD4:MedicalCentreCode - > MedicalCentreAddress
FD5:NurseId - > NurseName

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

我的解决办法:
2NF:
婴儿(InfantID,InfantName,InfantAddress)
休息(VaccineCode,InfandID,日期,MedicalCentreCode,MedicalCentreName,MedicalCentreAddress,NurseId,NurseName)

现在婴儿在2NF,也在3NF,但休息关系不在3NF。 3NF所有这些关系看起来就像这样(据我ofcourse):
VaccinationDetails(VaccineCode,InfantID,日期,MedicalCentreCode NurseId)

婴儿(InfantID,InfantName,InfantAddress)

MedicalCentre(MedicalCentreCode,MedicalCentreName,MedicalCentreAddress)

护士(NurseId,NurseName)

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

回答

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,日期 ,MedicalCentreCode,NurseId,NurseName}

还有另一个传递依赖包含NurseID和NurseName。突出的是一个让你

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

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

超越你的功课

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

+0

非常感谢您的回答。所以基本上我做的是正确的。谢谢。 – smallB 2012-04-10 08:43:25