数据库设计和展平复合主键

时间:2012-06-13 20:35:32

标签: database database-design database-schema

enter image description here

到目前为止,我正在使用上述架构构建声明数据库。 tblPatient上的三个三部分键是唯一标识个人对某个问题X的主张。只要入院/出院日期不同,patientID就会出现tblPatient。{/ p>

此数据库还涉及(未图示)声明 NOT 与problemX相关联的声明。这些声明将使用patientID, claimsFromDateclaimsThroughDate的另一个由三部分组成的密钥进行标识。因此,tblPatient.admissionDatetblPatient.DischargeDate不一定等于claimsFromDateclaimsThroughDate,如果它们相等则是偶然事件。

由于tblPatient.patientID不止一次重复(对于那些访问次数超过一次的人),我不能简单地将其复制到另一个表而不破坏主键的唯一约束。我需要能够将patientID与其他声明联系起来。我是否需要将tblPatient重新设计为仅将一个字段作为主键,或者包含已存在的三部分键并随之滚动?

1 个答案:

答案 0 :(得分:4)

首先:在一个完美的,纯粹的数据库世界中,您可以将患者数据库分成两个 - 一个包含患者,另一个称为“PatientClaims”等。如果您不关心除患者ID之外的患者特定数据,那么您至少应该重命名该表。

同样的纯粹方法也会告诉您主键被定义为“唯一标识行的唯一数据集” - 这可能是您的三个字段。 (我可以假设您可以省略DischargeDate,但前提是您确定这样做的逻辑是合理的)

但是,看到你必须与之合作: 这是一个由三部分组成的钥匙,永远不会让人满意 2.在两个表中使用该键组合,并且可能必须加入它们

我建议简单地定义一个新密钥 - 比如“ClaimID”,使用您选择的数据库可用的任何自动增量函数。

无关的说明:你的整个州/县双表集看起来有点奇怪 - 但这可能只是让我不了解你的建模。

相关问题