我有一个自引用表,它表示属性的分层树。树中可以有多个根(或多个树,但是你想要考虑它):
该表允许我创建层次结构的定义,例如:
现在,我需要为给定的用户捕获树中属性的值。用户可以拥有多组属性值,每个属性祖先也可以有多组值:
该表允许我为层次结构中的属性赋值,其中每个属性及其祖先可以有多个实例:
如此有效,我现在有两个自引用表。一个是属性层次结构的定义,另一个是值的层次结构。值层次结构与定义层次结构和特定用户相关。
我的问题是参照完整性。
如何根据属性层次结构强制UserAttribute记录与正确的父UserAttribute相关。如果我将属性B作为A的父级,我就不能创建与属性B相关的UserAttribute,后者是与属性C相关的UserAttribute的父级。
最初我以为我会:
问题是Attribute表中的根记录具有null ParentAttributeID,UserAttribute表中的根记录具有null ParentUserAttributeID,并且复合键中的列不能具有空值,因此将kybosh放在该计划上。 / p>
是否有某种方法可以实现对完全不同的架构或对现有架构的轻微调整?也许我没有对此进行适当的建模。
答案 0 :(得分:0)
您已在Attribute
跟踪属性的父级,因此请勿跟踪UserAttributeValue
中的父级UserAttributeValue
。 UserAttributeValue
仅包含有关指定属性的用户值的信息,并导航Attribute
侧的树。
另外,如果每个用户每个属性只能有一个值,您也可以删除列UserAttributeID
,而是使用UserID, AttributeID
的复合键。