我很熟悉T-SQL编码,但对db设计不熟悉。我有
我想在(PK_Department)< - >之间建立一对一的关系。 (PK_Loinc OR PK_nonLoinc)
有没有办法在T-SQL中使用两个FK设置这种关系?
如果没有,我想我可以设置一个表格LoincAndNonLoincCodes,其中包含三列PK_union, PK_Loinc and FK_nonLoinc -- where (FK_Loinc is filled ExclusiveOR FK_nonLoinc is filled)
,然后设置一个表格FK_UNION
和FK_Department
,但理想情况下我可以不用创建另一个表。
答案 0 :(得分:2)
我认为你试图将每个部门与给定的观察结果联系起来(即LOINC中的'O')。
问题不在于Department对象,而在于“Observation”对象。 Observation是一种类型层次结构。抽象观察可以是具体的非LOINC观察或具体的LOINC观察。关系模型不擅长建模类型层次结构。观察建模有3种选择:
使用一个包含LOINC和非LOINC代码的观察表。在这种情况下,PK将是Type和Code属性的复合键,并包含LOINC和非LOINC代码的所有属性。然后你可以在这个观察台上获得1:1的FK。
一个表用于非LOINC代码,一个表用于LOINC代码。在这种情况下,您遇到的问题就像您在问题中所说的那样。
三张桌子。一个用于观察,一个用于非LOINC观察,一个用于LOINC观察。然后在观察台上有1:1的FK。
这是对象/关系阻抗不匹配问题的经典说明。