Моделирование данных: отношение один ко многим без уникального идентификатора - PullRequest
0 голосов
/ 06 октября 2011

Рассмотрим следующую частичную модель данных открытых медицинских случаев и соответствующее страхование:

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

2 голосов
/ 06 октября 2011

а как же:

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

**InsurancePolicies**
InsuranceId (PK)(FK) 
InsurancePolicyId (PK)
InsuranceType {Primary, Secondary, Tertiary} 
0 голосов
/ 06 октября 2011

С точки зрения бизнеса, я бы хотел знать приоритет каждой страховки, т.е. Какая политика оплачивается первой. Я бы добавил поле приоритета и сделал бы его частью вашего ключа.

...