我可以意识到这样的事吗?例如,如果某个其他字段值为'a',则外键应为表a,如果值为'b',则它应该是表b的键?我明白这是不正常的,并不符合外键的想法,但是有可能做一些事实让这个方案真实吗?
更新:
我有这样的架构:
有产品。它们可以包含不同的附加字段,例如标准产品可以不包含其他字段,但“图片”可以包含“作者”等字段。真正的“标准产品”和“图片”在意识形态上可能有所不同,这不仅仅是因为其他领域。
有“订单”这样的表格,应该包含产品和其他数据的链接。但是当我把字段设置为“产品ID”时,它应该是数据,是标准产品ID还是图片ID。
可以设计类似附加字段的表格,但会有另一个问题。我可以创建table(id,additional_field_name)和用于映射的表(id,add_field_id,product_id,field_value),但是field_value可以是数字,可以是字符串,所以我认为这个想法并不好。
答案 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
如果你想要一个比这更好的答案,你将不得不提供一些关于你的表格结构的真实例子。你问题中的数据。