示例:
survivor table
owner_id unique_id isDead
|__________ |__________|__________
| foreign key | |
| 1234 ------------> | 1234 | true <--- this row is referenced
|__________ |__________|__________
| |
| 1234 | false <--- this row should be referenced
|__________|__________
目前代码是这样的:
CONSTRAINT `key_2` FOREIGN KEY (`owner_id`) REFERENCES `survivor` (`unique_id`)
我希望它的功能如下:
CONSTRAINT `key_2` FOREIGN KEY (`owner_id`) REFERENCES `survivor` (`unique_id`) WHERE `isDead` = false
但那显然不可能那样。
有谁知道如何才能实现这样的目标?
答案 0 :(得分:0)
您的unique_id
实际上并不是唯一的。您应该在第二个表格中按两列创建一个键(我的意思是unique_id
和isDead
)。 - 那么它将是独特的组合。但你仍然无法通过外键正确引用它。
如果您需要通过外键引用它,您应该只在第二个表中存储有效的所有者:例如,删除那些无效的。如果要保留它们,则必须根据某种算法更新其unique_id
,该算法保留唯一值,同时允许将有效值与无效值分开。除此之外,您还需要存储unique_id
的旧值 - 例如,创建一个名为old_id
的新列,它将是:
+-----------+--------+--------+ | unique_id | isDead | old_id | +-----------+--------+--------+ | 1234 | false | 1234 | +-----------+--------+--------+ | -1 | true | 1234 | +-----------+--------+--------+
如您所见,可能(但不是最佳)解决方案之一是将unique_id
设置为负值。在上面的示例中,您将通过外键引用正确的行,并且仍然能够在存储old_id
后恢复所有者的连接。我不确定你想要达到的目标,所以总的来说这可能不是最佳方式。