使用 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' 更具描述性的东西是明智的。
对于这个特定的架构:
我现在已经创建了系学生和学科 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' 更具描述性的东西是明智的。