表格是:
Patient(PatientID, FirstName, LastName)
Disease(DiseaseID, DiseaseName)
PatientDisease(PatientID, DateID, DiseaseID)
很明显 Patient 和 Disease 表有 PatientID 和 DiseaseID 作为PK,但是怎么样 PatientDisease 表知道一天内每位患者都可以被诊断为单一疾病?
答案 0 :(得分:0)
我认为,在这里你应该使用包含所有3个字段的复合PK:PatientId,DateId,DiseaseId。 无论每天是否有一种疾病都可以被诊断出来,所有3个领域对于患者疾病都是强制性的。
答案 1 :(得分:0)
你可以使用复合键
或
添加另一列患者疾病ID作为唯一行号
答案 2 :(得分:0)
我认为一个病人可以在一天内被诊断出只有一个死亡是非常幸运的,但这个系统不会那么幸运 - 它对任何真正的应用都有很大的设计缺陷。医生无法写出我既感冒又对抗生素过敏可能会带来潜在的灾难。
像(PatientID,DateID,DiseaseID)这样的密钥不允许你添加多个死亡。它是物理上可能的最大密钥,但是对于您的问题域,此表甚至还不够first normal form。
即使Date表实际存储了不会使PatientDecease表非常合理的日期和时间(几乎不可能有人在一秒钟内被诊断出两次死亡,但它不能完全解决问题 - 考虑一些批量死亡更新)。
1)所以你应该添加一些代理键
PatientDisease(PatientDiseaseID, PatientID, DateID, DiseaseID)
,您的密钥将为PatientDiseaseID
2)或在当天为病人添加序数:
PatientDisease(PatientID, DateID, DiseaseID, PatientDeceaseInDayOrdinal)
主键(PatientID, DateID, DiseaseID, PatientDeceaseInDayOrdinal)
第一个想法可能更好,更简单。