可以在一个表上有2个FK,它指向不同的表,其中一个只会被使用吗?

时间:2013-10-10 08:23:14

标签: sql sql-server sql-server-2008 sql-server-2008-r2

假设我有2个表:

Order -< OrderItem

我有另外一张有两个FK的桌子:

Feature
 - Id
 - FkOrderId
 - FkOrderItemId
 - Text

更新


此表链接到另一个名为FeatureReason,它对两种类型的记录都是通用的,无论是OrderFeatures还是OrderItem功能。

功能 - &lt; FeatureReason

如果我有两个要素表来计算两种类型的记录,那么这需要2个FeatureReason表。同样的问题是FeatureReason表需要有2个FK,每个FK指向不同的主表。


订单可以具有功能记录,OrderItem也可以。因此,将填充“FkOrderId”或FkOrderItemId。这样可以吗?

我也会认真考虑使用Views来插入/编辑和读取OrderFeatures或OrderItemFeatures。

赞赏的想法。

4 个答案:

答案 0 :(得分:5)

我建议使用以下结构,因为如果你有两个外键,其中任何一个都可以为null,那么你可以让两列的行都为null或有值。

也添加了FeatureReason表

Tables

答案 1 :(得分:2)

你可以这样做,但为什么呢?您将这两个不同的项目整理到一个表格中的原因是什么?

我建议您使用两个单独的表OrderFeaturesOrderItemFeatures,并在需要查询两者的情况下,使用union查询整理它们。

答案 2 :(得分:1)

一个表中可以有2个外键。只要外键与另一个表上的主键映射,就可以了

答案 3 :(得分:1)

如果不填充FkOrderItemId或FkOrderId,您是否会违反一个或另一个FK约束?

你可以根据你的需要填充FkOrderItemId或FkOrderId,我只是不确定定义一个不强制提供FK值的FK。

只是一个想法...