Database 数据库设计与复合主键展平

Database 数据库设计与复合主键展平,database,database-design,database-schema,Database,Database Design,Database Schema,到目前为止,我正在使用上述模式构建索赔数据库。tblpaient的三个关键部分是唯一地确定个人对某个问题的主张。只要入院/出院日期不同,相同的patientID可以出现在tblpartient中 该数据库还关注(未显示)与problemX无关的声明。这些索赔将通过另一个由三部分组成的关键字来识别,分别是patientID、claimsFromDate、claimsThroughDate。因此,tblPatient.admissionDate和tblPatient.DischargeDate不必等

到目前为止,我正在使用上述模式构建索赔数据库。
tblpaient
的三个关键部分是唯一地确定个人对某个问题的主张。只要入院/出院日期不同,相同的
patientID
可以出现在
tblpartient

该数据库还关注(未显示)与problemX无关的声明。这些索赔将通过另一个由三部分组成的关键字来识别,分别是
patientID、claimsFromDate
claimsThroughDate
。因此,
tblPatient.admissionDate
tblPatient.DischargeDate
不必等于
claimsFromDate
claimsThroughDate
,如果它们相等,那就是偶然事件


由于
tblPatient.patientID
重复了多次(对于多次访问的用户),因此我无法在不破坏主键的唯一约束的情况下将其复制到另一个表中。我需要能够将patientID
。我是否需要重新设计我的
tblpaient
以只有一个字段作为主键,或者包括已经存在的由三部分组成的键并使用它?

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

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

但是,考虑到您必须使用: 1.一把由三部分组成的钥匙,永远不会令人愉快 2.在两个表之间有一个键组合,并且很可能必须连接它们

我建议使用您选择的数据库中可用的任何自动增量函数简单地定义一个新的类似键的“ClaimID”


不相关的注释:你的整个州/县双表集看起来有点奇怪-但这可能是因为我不了解你在建模什么。

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

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

但是,考虑到您必须使用: 1.一把由三部分组成的钥匙,永远不会令人愉快 2.在两个表之间有一个键组合,并且很可能必须连接它们

我建议使用您选择的数据库中可用的任何自动增量函数简单地定义一个新的类似键的“ClaimID”


不相关的注意事项:你的整个州/县双人床看起来有点奇怪-但这可能是因为我不理解你在做什么。

我同意-患者应该是关于一个人的。索赔应将该人员与事件或索赔联系起来。看起来州与县之间应该有更多的联系。州与县之间的关系实际上很好。我不希望每个州有50个不同的表,州代码会给你州的名称。countyCode是一个三位数代码,表示特定州内的一个县。因此,多个州可以有
001安德森县
。状态代码允许您区分哪个是哪个。@Kerbocat我想我需要为声明添加一个代理密钥。数据是以一种奇怪的方式生成的,数据库中的一些人改变了状态,所以当他们有相同的病人时,他们的其他情况就不同了。通过这种方式,我还可以看到他们的健康代码(tblICD)是如何随时间变化的。我是设计数据库的新手,自学(在SO的帮助下),以前从未用CPK做过任何事情。我计划给你一个答案,但你能解释一下这需要如何在两个数据库中进行。我对州的看法主要是因为你同时拥有一个“TBL状态”和一个“TBL医院状态”表-我不明白为什么这两个表会有任何不同-它们都包含完全相同的状态,不是吗?(县也一样)让医院和患者表在同一个两个表中查找值没有错。我同意-患者应该是关于一个人的。索赔应将该人员与事件或索赔联系起来。看起来州与县之间应该有更多的联系。州与县之间的关系实际上很好。我不希望每个州有50个不同的表,州代码会给你州的名称。countyCode是一个三位数代码,表示特定州内的一个县。因此,多个州可以有
001安德森县
。状态代码允许您区分哪个是哪个。@Kerbocat我想我需要为声明添加一个代理密钥。数据是以一种奇怪的方式生成的,数据库中的一些人改变了状态,所以当他们有相同的病人时,他们的其他情况就不同了。通过这种方式,我还可以看到他们的健康代码(tblICD)是如何随时间变化的。我是设计数据库的新手,自学(在SO的帮助下),以前从未用CPK做过任何事情。我打算给你一个肯定的答案,但你能解释一下这是怎么回事吗