为来自两个不同表的两个外键声明外键约束

时间:2019-05-31 08:12:29

标签: mysql oracle-sqldeveloper

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

我已经尝试过以下方法,但是它不起作用

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

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

1 个答案:

答案 0 :(得分:2)

您需要使用两个外键:

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_idsubject_id列上创建一个复合主键,然后进行引用外键而不是基础表中的实质视图,但这似乎是解决问题的一个太复杂的方法。相反,应该避免要求在预期解决方案使用两个外键时仅使用一个外键的要求。