引用多个唯一键的外键

A Foreign key referencing multiple unique key

我有 3 个 table:

class_a

     CREATE TABLE class_a (
       id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
       std_id INT NOT NULL UNIQUE,
       name varchar(225) NOT NULL)

class_b

     CREATE TABLE class_b (
       id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
       std_id INT NOT NULL UNIQUE,
       name varchar(225) NOT NULL)

sn_number

      CREATE TABLE sn_number (
       id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
       pin INT NOT NULL UNIQUE,
       serial VARCHAR(255) NOT NULL UNIQUE,
       std_id INT NULL DEFAULT NULL,
       FOREIGN KEY(std_id) REFERENCES class_a(std_id)
       )

如何在 class_aclass_b table 中引用唯一 std_id 作为 sn_number table 中的外键。

我想达到 ALTER TABLE sn_number ADD FOREIGN KEY(std_id) REFERENCES class_a(std_id), class_b(std_id)

我试过这样做 ALTER TABLE sn_number ADD FOREIGN KEY(std_id) REFERENCES class_a(std_id)

接着是

ALTER TABLE sn_number ADD FOREIGN KEY(std_id) REFERENCES class_b(std_id)sn_number table 但会继续互相覆盖。

我读过这些: Foreign Key Referencing Multiple Tables

Composite key as foreign key (sql) 但是我找不到解决问题的方法。

Foreign key must reference only one parent table. This is fundamental to both SQL syntax, and relational theory.

你可以做的是添加另一个包含所有 std_id 的 table classesstudents ,然后只需引用 FK 即可。

由于您没有在 FOREIGN KEY 声明中明确给出约束名称,因此 DBMS 会根据 table 名称 sn_number 组成一个约束名称。您的问题是您因此每次都隐式声明相同的约束名称,因此名称的旧信息丢失了。只需对 table & column list REFERENCES table & column list.

的不同情况使用不同的显式约束名称
CONSTRAINT fk_sn_number_a FOREIGN KEY(std_id) REFERENCES class_a(std_id)
CONSTRAINT fk_sn_number_b FOREIGN KEY(std_id) REFERENCES class_b(std_id)

只需了解 Using FOREIGN KEY Constraints 的基础知识即可。

PS 正如评论中所说,这是一个糟糕的设计。但与评论和另一个答案相反,您需要来自同一个 table 和列列表的两个外键并不是设计不佳的症状。但是请注意,人们通常在有问题的设计中遇到 "Foreign Key Referencing Multiple Tables" 的问题是,他们认为他们的 table 按照设计需要从一个地方到两个地方的外键,而实际上他们不需要。这样的设计甚至不涉及外键,它只是涉及一些让人联想到外键的东西。