无法添加外键约束错误1215 HY000

时间:2020-04-25 18:15:46

标签: mysql sql database foreign-keys create-table

我的ENROLLS表,TAKES表,CONDUCTED_IN表和EXAM表始终收到此错误。当我将创建的表上传到数据库时。我不确定问题出在哪里,谁能帮忙? COURSE,SECTION,CLASS_ROOM和STUDENT表已添加到数据库中,而其他表也有问题。

create table COURSE(
CourseNo varchar(10),
Course_Name varchar(30),
Department varchar(25),
primary key(CourseNo)
);

create table SECTION(
CourseNo varchar(10),
SectionNo varchar(2),
primary key(CourseNo, SectionNo),
foreign key(CourseNo) references COURSE(CourseNo)
);

create table ENROLLS(
SSN char(9),
SectionNo varchar(2),
CourseNo varchar(10),
primary key(SSN, CourseNo, SectionNo),
foreign key(SSN) references STUDENT(SSN),
foreign key(SectionNo) references SECTION(SectionNo),
foreign key(CourseNo) references SECTION(CourseNo)
);

create table STUDENT(
SSN char(9),
First_Name varchar(20),
Last_Name varchar(20),
Street varchar(15),
City varchar(15),
Zip char(5),
State varchar(20),
primary key(SSN)
);

create table TAKES(
SSN char(9),
CourseNo varchar(10),
SectionNo varchar(2),
ExamNo char(3),
Result char(1),
primary key(SSN, CourseNo, SectionNo, ExamNo),
foreign key(SSN) references STUDENT(SSN),
foreign key(CourseNo) references EXAM(CourseNo),
foreign key(SectionNo) references EXAM(SectionNo),
foreign key(ExamNo) references EXAM(ExamNo)
);

create table EXAM(
CourseNo varchar(10),
SectionNo varchar(2),
ExamNo char(3),
primary key(CourseNo, SectionNo, ExamNo),
foreign key(CourseNo) references SECTION(CourseNo),
foreign key(SectionNo) references SECTION(SectionNo)
);

create table CONDUCTED_IN(
RoomNo int,
Building varchar(30),
CourseNo varchar(10),
SectionNo varchar(2),
ExamNo char(3),
primary key(RoomNo, Building, CourseNo, SectionNo, ExamNo),
foreign key(RoomNo) references CLASS_ROOM(RoomNo),
foreign key(Building) references CLASS_Room(Building),
foreign key(CourseNo) references EXAM(CourseNo),
foreign key(SectionNo) references EXAM(SectionNo),
foreign key(ExamNo) references EXAM(ExamNo)
);

create table CLASS_ROOM(
RoomNo int,
Building varchar(30),
Capacity int,
primary key(RoomNo, Building)
);

1 个答案:

答案 0 :(得分:0)

代码中的问题与关系管理有关

  • 表必须按顺序创建;当通过外键引用另一个表的表时,必须在父表之后

  • 大多数表具有复合主键(即使用多列的主键)-因此,您还需要复合外键:而不是创建在关系的每个相关列上有多个外键,您需要一个单一的多列键,该键一次引用列的元组

请牢记这些基本原则,这是您的代码的更新版本,可以正常运行in this DB Fiddle

create table COURSE(
    CourseNo varchar(10),
    Course_Name varchar(30),
    Department varchar(25),
    primary key(CourseNo)
);

create table CLASS_ROOM(
    RoomNo int,
    Building varchar(30),
    Capacity int,
    primary key(RoomNo, Building)
);

create table STUDENT(
    SSN char(9),
    First_Name varchar(20),
    Last_Name varchar(20),
    Street varchar(15),
    City varchar(15),
    Zip char(5),
    State varchar(20),
    primary key(SSN)
);

create table SECTION(
    CourseNo varchar(10),
    SectionNo varchar(2),
    primary key(CourseNo, SectionNo),
    foreign key(CourseNo) references COURSE(CourseNo)
);

create table ENROLLS(
    SSN char(9),
    SectionNo varchar(2),
    CourseNo varchar(10),
    primary key(SSN, CourseNo, SectionNo),
    foreign key(SSN) references STUDENT(SSN),
    foreign key(CourseNo, SectionNo) references SECTION(CourseNo, SectionNo)
);

create table EXAM(
    CourseNo varchar(10),
    SectionNo varchar(2),
    ExamNo char(3),
    primary key(CourseNo, SectionNo, ExamNo),
    foreign key(CourseNo, SectionNo) references SECTION(CourseNo, SectionNo)
);

create table TAKES(
    SSN char(9),
    CourseNo varchar(10),
    SectionNo varchar(2),
    ExamNo char(3),
    Result char(1),
    primary key(SSN, CourseNo, SectionNo, ExamNo),
    foreign key(SSN) references STUDENT(SSN),
    foreign key(CourseNo, SectionNo, ExamNo) references EXAM(CourseNo, SectionNo, ExamNo)
);

create table CONDUCTED_IN(
    RoomNo int,
    Building varchar(30),
    CourseNo varchar(10),
    SectionNo varchar(2),
    ExamNo char(3),
    primary key(RoomNo, Building, CourseNo, SectionNo, ExamNo),
    foreign key(RoomNo, Building) references CLASS_ROOM(RoomNo, Building),
    foreign key(CourseNo, SectionNo, ExamNo) references EXAM(CourseNo, SectionNo, ExamNo)
);
相关问题