到目前为止,我正在使用上述架构构建声明数据库。 tblPatient
上的三个三部分键是唯一标识个人对某个问题X的主张。只要入院/出院日期不同,patientID
就会出现tblPatient
。{/ p>
此数据库还涉及(未图示)声明 NOT 与problemX相关联的声明。这些声明将使用patientID, claimsFromDate
,claimsThroughDate
的另一个由三部分组成的密钥进行标识。因此,tblPatient.admissionDate
和tblPatient.DischargeDate
不一定等于claimsFromDate
和claimsThroughDate
,如果它们相等则是偶然事件。
由于tblPatient.patientID
不止一次重复(对于那些访问次数超过一次的人),我不能简单地将其复制到另一个表而不破坏主键的唯一约束。我需要能够将patientID
与其他声明联系起来。我是否需要将tblPatient
重新设计为仅将一个字段作为主键,或者包含已存在的三部分键并随之滚动?
答案 0 :(得分:4)
首先:在一个完美的,纯粹的数据库世界中,您可以将患者数据库分成两个 - 一个包含患者,另一个称为“PatientClaims”等。如果您不关心除患者ID之外的患者特定数据,那么您至少应该重命名该表。
同样的纯粹方法也会告诉您主键被定义为“唯一标识行的唯一数据集” - 这可能是您的三个字段。 (我可以假设您可以省略DischargeDate,但前提是您确定这样做的逻辑是合理的)
但是,看到你必须与之合作: 这是一个由三部分组成的钥匙,永远不会让人满意 2.在两个表中使用该键组合,并且可能必须加入它们
我建议简单地定义一个新密钥 - 比如“ClaimID”,使用您选择的数据库可用的任何自动增量函数。
无关的说明:你的整个州/县双表集看起来有点奇怪 - 但这可能只是让我不了解你的建模。