【发布时间】:2012-05-01 08:17:31
【问题描述】:
我有 2 张桌子 User 和 Group。
我有一个表Attributes shared 由用户和组与列:
-
attributeName。 -
AttributeValue。 -
ObjectID。
ObjectID 指向用户的主键或组的主键。
我添加了一个带有Cascade on Delete 的外部约束,以便在删除用户或组时自动删除属性。
现在的问题是当我为用户插入一个属性时,我有一个外键约束,因为该组不存在。
我应该如何进行?
【问题讨论】:
-
我认为您应该考虑使用两个属性表。一个用于用户,一个用于组。
-
或者用父表上的触发器替换外键和约束来捕获删除?
-
我不会。 FK 的主要目的不是级联删除。它可以确保您不会为不存在的用户/组添加属性。在 UserId 和 GroupId 的 Attributes 中使用相同的字段是一个坏主意。您可以在 Attributes 中使用两列而不是两个表,但正如我所说,我会选择两个表。
-
是的,Climbage belows 倾向于相同的答案。困扰我的是我复制了相同的表格。事实上,我有 4 个父对象:用户/组/联系人/角色。我将不得不创建 4 个相同的表来存储属性。
-
我还有一个“链接”表,它将源对象(用户或组)与目标对象(用户或组)链接起来。这张桌子的设计相当简单。这是通用的 IDROW |源ID |目标 ID。当我删除用户或组(源或目标)时,我希望自动删除此链接。至于上面的示例,这个“链接”表是由用户/组/联系人“共享”的……如果我关注你,我将不得不创建十几个相同的表?
标签: sql database database-design