数据建模:没有唯一标识符的一对多关系

时间:2011-10-06 02:09:18

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

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

**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  

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

2 个答案:

答案 0 :(得分:2)

怎么样:

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

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

答案 1 :(得分:0)

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