连接到其他表的SQL Server“对象”/“属性”关系表

时间:2009-11-03 14:40:02

标签: sql-server join attributes entity-attribute-value relational

原谅糟糕的头衔,我想不出正确的用语。

我有一个表示对象的数据库结构,对象有类型和属性。

某些类型只能使用某些属性。

类型 - 房子,汽车

属性 - 颜色,速度,地址

car类型的对象可以同时具有颜色和速度属性,但House类型的对象只能有颜色,地址。对象,类型,属性组合的值存储在值表中。

所有这些都有效,关系可以很好地执行上述内容。

我的困境是我有另一张表,即地址。该表具有AddressID。

我想以某种方式将我的地址表加入到我的对象值表中..有没有一种巧妙的方法来实现这个?

[更新] - 更多详情

我已经有5张桌子了。即。

对象

属性

对象类型

ObjectPropertyValues

ObjectTypeProperties

这些表具有关系,可以锁定哪些属性值可以分配给每种类型的对象。

一个物体的名称可能是“法拉利”,类型可能是“汽车”,因为类型是汽车,我可以为颜色属性设置一个值。

值虽然是数字,但我希望能够加入colourcodes表以匹配id。

1 个答案:

答案 0 :(得分:1)

首先,关系数据库中的“关系”是一个表 - 它不涉及表之间的关系。关系定义了数据片段与键的关系。

在关系建模中,每个实体都被规范化,因此一个模型将是4个表:

Car(Color-FK,Address-FK)

House(Color-FK,Speed)

颜色(Color-PK)

地址(地址-PK,地址数据)

在关系模型中,汽车不是房屋,你通常不太可能在同一张桌子上对它们进行建模。

有人可能会争辩说,事实上,房屋和汽车的有效颜色是非常不同的(因为涂料不相同),因此人们不会在真实世界的应用中根据颜色组合这两个表。 / p>

可能的其他建模考虑可能是汽车停车的地方 - 即房屋的FK或地址的FK - 那里有趣的问题。然后,如果你有汽车和房屋的钥匙,他们都可以成为钥匙圈的一部分,在这种情况下,你可能会使用代表钥匙的链接表进行建模。