【问题标题】:Data Modeling: one-to-many relationship without unique identifier数据建模:没有唯一标识符的一对多关系
【发布时间】:2011-10-06 10:19:32
【问题描述】:

考虑以下开放医疗案例及其相应保险的部分数据模型:

**Cases**
CaseId (PK)  
PatientId (FK)  
CaseNote  
...

**CaseInsuranceProfiles**  
CaseId (PK)(FK) 
InsuranceId (PK)(FK)
InsuranceType {Primary, Secondary, Tertiary} (PK)(FK)
EffectiveDate

**Insurances**  
InsuranceId (PK)
InsuranceName
InsuranceAddress  
InsuranceCity  
...  

不幸的是,这种模型存在问题。它不允许案例对于每个保险和保险类型的实例具有重复记录。例如,如果有问题的案例有两份来自保险 A 的主要保险单(在某些州是允许的)。为了规范化数据并为 CaseInsuranceProfiles 表提供一个不是复合键的唯一标识符,我已将模型改进为以下内容:

**Cases**
CaseId (PK)  
PatientId (FK)  
CaseNote  
...

**CaseInsuranceProfiles**  
InsuranceProfileId (PK)  
CaseId (FK) 
InsuranceId (FK)
InsuranceType {Primary, Secondary, Tertiary}
EffectiveDate

**Insurances**  
InsuranceId (PK)
InsuranceName
InsuranceAddress  
InsuranceCity  
...  

但是,此模型提出了一个新模型,即我的代理键 (InsuranceProfileId) 仍然不能唯一标识每条记录。任何人都可以建议对数据模型进行更改,以使我能够正确地唯一标识每条记录吗?
注意:我意识到我可以创建一个类似于:

**CaseInsuranceProfiles**  
InsuranceProfileId (PK)  
CaseId (FK) 
InsuranceId (FK)
PrimaryInsurance  
SecondaryInsurance  
TertiaryInsurance
EffectiveDate  

但是,这不允许我考虑多种初级、二级或三级保险。此外,我的目标是确定每个案例的保险概况,换句话说,我希望能够使用一个键来显示特定案例的所有保险。提前致谢!

【问题讨论】:

  • 如果您有两份来自保险公司 A 的主要保险单,您如何区分它们?保单号码?纸的颜色?
  • 保单号码最容易使用。谢谢!

标签: sql database tsql database-design data-modeling


【解决方案1】:

怎么样:

 **CaseInsuranceProfiles**   
InsuranceProfileId (PK)   
CaseId (FK0)(AK)
InsuranceId (FK1)(AK)   
InsurancePolicyId (FK1)(AK) 
CaseEffectiveDate 

**InsurancePolicies**
InsuranceId (PK)(FK) 
InsurancePolicyId (PK)
InsuranceType {Primary, Secondary, Tertiary} 

【讨论】:

    【解决方案2】:

    从业务的角度来看,我想知道每种保险的优先级,即哪个保单先付款。我会添加一个优先级字段并将其作为您的密钥的一部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-10
      • 2010-09-26
      • 2013-05-07
      • 1970-01-01
      • 2021-08-25
      • 2016-10-13
      • 1970-01-01
      相关资源
      最近更新 更多