0

我有一个公用表,它被数据库中的另外两个表引用。另外两个表的主键也是指向公用表主键值的外键。

我想知道有没有办法,MySQL 可以防止两个表具有相同的值作为参考?我的想法是这样的:

logins 实例应该只在一个表中(学生或教授)

登录行应该在两个表(学生或教授)之一中引用,但不能在两个表中引用。

4

1 回答 1

3
CREATE TABLE common (
  id INT PRIMARY KEY,
  type CHAR(1) NOT NULL,
  UNIQUE KEY (id, type)
);

INSERT INTO common (id, type) VALUES (1, 'A'), (2, 'B');

CREATE TABLE typeA (
  id INT PRIMARY KEY,
  type CHAR(1) NOT NULL DEFAULT 'A',
  FOREIGN KEY (id, type) REFERENCES common(id, type)
);

INSERT INTO typeB (id, type) VALUES (1, 'A'); -- OK
INSERT INTO typeB (id, type) VALUES (2, 'A'); -- FAIL

CREATE TABLE typeB (
  id INT PRIMARY KEY,
  type CHAR(1) NOT NULL DEFAULT 'B',
  FOREIGN KEY (id, type) REFERENCES common(id, type)
);

INSERT INTO typeB (id, type) VALUES (1, 'B'); -- FAIL
INSERT INTO typeB (id, type) VALUES (2, 'B'); -- OK

您需要一些方法来强制type每个子表中的正确值。例如触发器或查找表的另一个外键。MySQL 不支持CHECK任何存储引擎中的约束。

于 2013-08-08T23:59:15.413 回答