MySQL - 多个外键,仅对单个检查约束有效

MySQL - Multiple foreign keys, that are only valid on individual check constraints

标题说的差不多是我需要的,但我想看看如何从 table 中获取两个外键约束和两个检查约束并关联一个检查约束,同时将第二个检查约束关联到第二个外键约束。

例如,我有两个 3 table,itemactionriskItem 引用 actionrisk,通过 itemid 只有我想要对多个外键进行条件引用每个外键都有一个唯一的检查约束.

我将使用 itemtype'Action''Risk') 在我的检查约束中确定我引用的 table 。

这是我的命令:

ALTER TABLE `projectaim`.`items`  
              ADD CONSTRAINT `fk_item_risk` FOREIGN KEY (`ItemID`) REFERENCES `projectaim`.`risks`(`RiskID`)
ADD CONSTRAINT ck_item_type CHECK (itemtype = 'Risk') 

这在 MySQL 中完全可行吗?

听起来您正在尝试实现 ,其中给定的列可以是引用多个父项中的任何一个的 ID table。

一个外键约束引用了一个父 table。你不能让这些有条件。这就是为什么多态关联从根本上与关系约束不兼容的原因。

如果您需要引用多个父 table 之一,一种方法是创建多个列,每个列都可以为空。然后你可以使用检查约束或触发器来确保其中一个不为空。

CREATE TABLE items (
  Itemid INT NOT NULL PRIMARY KEY,
  Itemtype ENUM ('Action', 'Risk') NOT NULL,
  Actionid INT NULL,
  Riskid INT NULL,
  FOREIGN KEY (Actionid) REFERENCES actions (Actionid),
  FOREIGN KEY (Riskid) REFERENCES risks (riskid),
  CHECK (CASE Itemtype
         WHEN 'Action' THEN Actionid IS NOT NULL AND Riskid IS NULL
         WHEN 'Risk' THEN Riskid IS NOT NULL AND Actionid IS NULL
         END)
);

另请参阅:

  • Possible to do a MySQL foreign key to one of two possible tables?
  • Why can you not have a foreign key in a polymorphic association?
  • MySQL - Conditional Foreign Key Constraints