使用 2 个主键和两个外键创建一个 table,引用具有相同约束名称的 2 个不同的 table

Creating a table with 2 primary keys and two foreign keys referring to 2 different tables with same constraint name

对于这个特定的架构:

我现在已经创建了系学生和学科 tables 现在问题出现在创建标记 table。

指定有 2 个主键和 2 个外键,但正如标题所建议的那样,创建 2 个外键引用具有相同约束名称的 2 个不同的 table 似乎是不可能的,据我的理解在 Internet 上冲浪并在此处阅读一些线程。

有什么办法吗?我想让外键的约束名称都为 "fk".

此代码弹出标识符错误:

create table mark(
    value number,
    subject_id number,
    student_id number,
    constraint pk primary key(subject_id,student_id),
    constraint fk foreign key(subject_id,student_id) references subject(subject_id,student_id));

但即使我创建了 2 个具有不同名称的约束,测试用例也会失败。有解决办法吗?

这是部门table

create table department(
    department_id number(2),
    department_name varchar(30),
    department_block_number number,
    constraint PK primary key(department_id));

这是学生table

create table student(
        student_id number,
        student_name varchar(30),
        address varchar(40),
        city varchar(30),
        department_id number,
        constraint pk primary key(student_id),
        constraint fk foreign key(department_id) references department(department_id));

这是工作人员table

create table staff(
    staff_id number,
    staff_name varchar(30),
    department_id number,
    constraint pk primary key(staff_id),
    constraint fk foreign key(department_id) references department(department_id));

您有一个复合主键 - 在多个列上 - 这很好;但是你不能有复合外键,因为学生 table 没有 subject_id 列 - 因此它给你一个无效标识符错误。

你需要两个个外键,比如:

create table mark(
    value number,
    subject_id number,
    student_id number,
    constraint mark_pk primary key(subject_id,student_id),
    constraint mark_fk_subject foreign key(subject_id) references subject(subject_id),
    constraint mark_fk_student foreign key(student_id) references student(student_id));

约束名称必须是唯一的,无论是在同一架构中的 table 内还是跨 table ,无论如何,比 'pk' 或 'fk' 更具描述性的东西是明智的。

db<>fiddle