2

我能意识到类似的事情吗?例如,如果其他字段值是'a',外键应该是表a,如果值是'b',它应该是表b的键?我知道这是不正常的,也不符合外键的想法,但是实际上有可能做一些事情来使这个方案成为现实吗?

更新 :

我有这样的架构:

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

有像“订单”这样的表格,应该包含指向产品和其他数据的链接。但是当我输入“产品ID”之类的字段时,它应该是数据,是标准产品ID,还是图片ID。

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

4

3 回答 3

2

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

于 2013-02-01T17:48:56.317 回答
0

Per your comment & revised question:

Products

ID
Description
AdditionalFields_ID

Additional Fields

AdditionalFields_ID
Author

Then use a LEFT JOIN, so that your query only pulls additional fields when they exist (like when the product type is a picture).

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

If you want a better answer than that, you're going to have to provide some real examples of your table structure & data in your question.

于 2013-02-01T18:03:10.147 回答
0

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

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

于 2013-02-01T17:54:39.820 回答