首页 > 解决方案 > 为来自两个不同表的两个外键声明外键约束

问题描述

我想分别为来自两个不同表 student 和 subject 的两个外键 student_id 和 subject_id 声明约束“fk”。

我已经尝试了以下但它不起作用

约束 fk 外键(subject_id)和外键(student_id)引用主题(subject_id)和学生(student_id)

我不能使用两个约束,这就是我面临这个问题的原因。它必须是“fk”。

标签: mysqloracle-sqldeveloper

解决方案


您需要使用两个外键:

MySQL / Oracle 设置

CREATE TABLE student ( student_id INT PRIMARY KEY );
CREATE TABLE subject ( subject_id INT PRIMARY KEY );

创建表

CREATE TABLE your_table2 (
  subject_id INT,
  student_id INT,
  CONSTRAINT your_table2__subject_id__fk FOREIGN KEY ( subject_id ) REFERENCES subject ( subject_id ),
  CONSTRAINT your_table2__student_if__fk FOREIGN KEY ( student_id ) REFERENCES student ( student_id )
)

或者,在 Oracle 中,您还可以使用内联约束:

CREATE TABLE your_table (
  subject_id INT CONSTRAINT your_table__subject_id__fk REFERENCES subject ( subject_id ),
  student_id INT CONSTRAINT your_table__student_if__fk REFERENCES student ( student_id )
)

我想分别为来自两个不同表 student 和 subject 的两个外键 student_id 和 subject_id 声明约束“fk”。

您不能声明引用两个表的单个外键约束;该语法要求您只引用一个表。

我想,在Oracle中,您可以在要引用的两个表的交叉连接上创建一个物化视图,并在student_idandsubject_id列上创建一个复合主键,然后在外键而不是基础表中引用材料视图,但是这似乎是解决问题的一种过于复杂的方法。相反,当预期的解决方案是使用两个外键时,您应该反对只使用一个外键的要求。


推荐阅读