假设我有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。
赞赏的想法。
答案 0 :(得分:5)
我建议使用以下结构,因为如果你有两个外键,其中任何一个都可以为null,那么你可以让两列的行都为null或有值。
也添加了FeatureReason表
答案 1 :(得分:2)
你可以这样做,但为什么呢?您将这两个不同的项目整理到一个表格中的原因是什么?
我建议您使用两个单独的表OrderFeatures
和OrderItemFeatures
,并在需要查询两者的情况下,使用union
查询整理它们。
答案 2 :(得分:1)
一个表中可以有2个外键。只要外键与另一个表上的主键映射,就可以了
答案 3 :(得分:1)
如果不填充FkOrderItemId或FkOrderId,您是否会违反一个或另一个FK约束?
你可以根据你的需要填充FkOrderItemId或FkOrderId,我只是不确定定义一个不强制提供FK值的FK。
只是一个想法...