是否可以在表中的一个字段中添加多个外键

时间:2013-02-01 17:42:27

标签: sql sql-server foreign-keys

我可以意识到这样的事吗?例如,如果某个其他字段值为'a',则外键应为表a,如果值为'b',则它应该是表b的键?我明白这是不正常的,并不符合外键的想法,但是有可能做一些事实让这个方案真实吗?

更新:

我有这样的架构:

有产品。它们可以包含不同的附加字段,例如标准产品可以不包含其他字段,但“图片”可以包含“作者”等字段。真正的“标准产品”和“图片”在意识形态上可能有所不同,这不仅仅是因为其他领域。

有“订单”这样的表格,应该包含产品和其他数据的链接。但是当我把字段设置为“产品ID”时,它应该是数据,是标准产品ID还是图片ID。

可以设计类似附加字段的表格,但会有另一个问题。我可以创建table(id,additional_field_name)和用于映射的表(id,add_field_id,product_id,field_value),但是field_value可以是数字,可以是字符串,所以我认为这个想法并不好。

3 个答案:

答案 0 :(得分:2)

如上所述,不,你不能这样做。您需要有两个单独的列。此外,根据另一列的值解释列的值对我来说不合适。

答案 1 :(得分:0)

对于外键约束,您需要使用单独的可为空的列,每个列对应一个潜在的外键关系。

你可以将它与检查约束一起破解,但从性能角度和一致性角度来看,你可能最好使用单独的列。

答案 2 :(得分:0)

根据你的评论&修订问题:

产品

ID
Description
AdditionalFields_ID

其他字段

AdditionalFields_ID
Author

然后使用LEFT JOIN,这样您的查询只会在存在时提取其他字段(例如,当产品类型为图片时)。

SELECT *
FROM Products P LEFT JOIN AdditionalFields A ON P.AdditionalFields_ID = A.AdditionalFields_ID

如果你想要一个比这更好的答案,你将不得不提供一些关于你的表格结构的真实例子。你问题中的数据。