gpt4 book ai didi

mysql - 引用多个表的外键 - 使用多个 FK

转载 作者:行者123 更新时间:2023-11-29 06:31:45 25 4
gpt4 key购买 nike

我有子表 A,它需要引用两个不同表 B 和 C 中的任何一个。B 和 C 相似但需要在不同的表中。

据我了解,mysql只允许一个FK引用一个表。因此,在查看了其他解决方案后,我决定在 A 中创建两列来引用 B 或 C。因为它应该只是 B 或 C,所以我添加了一个约束以防止它们都为 NOT NULL:

CREATE TABLE conversions
(
id INT AUTO_INCREMENT,
kicker_id INT NOT NULL,
success BOOL NOT NULL,
try_id INT,
penalty_try_id INT,
PRIMARY KEY (id),
FOREIGN KEY (try_id),
FOREIGN KEY (penalty_try_id),

CONSTRAINT conversions_coll_null CHECK (try_id IS NULL OR penalty_try_id IS NULL)
);

这行得通吗?这是一个好的设计吗?

谢谢

最佳答案

这是一个很好的方法(假设您添加了外键定义),但有一个重要的警告:MySQL 实际上并不强制执行 check 约束。因此,尽管您可以在定义中包含约束,但它不会执行任何操作。

如果你想坚持约束,那么你需要使用触发器。

顺便说一句,如果您想确保只有一列有值,请使用XOR 而不是OR。这将表示为:

CHECK (try_id IS NULL XOR penalty_try_id IS NULL)

(或者当然,这在 MySQL 中没有做任何事情,只是为了显示正确的逻辑。)

关于mysql - 引用多个表的外键 - 使用多个 FK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27515334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com