【问题标题】:Cannot add foreign key constraint error 1215 HY000无法添加外键约束错误1215 HY000
【发布时间】:2020-04-25 18:15:46
【问题描述】:

我的 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)
);

【问题讨论】:

  • 删除不一致的标签要么mysql要么`sql-server'因为两者完全不同。
  • 这个SO answer 将帮助您更好地理解。

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


【解决方案1】:

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

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

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

牢记这些基本原则,下面是运行良好的代码的更新版本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)
);

【讨论】:

    猜你喜欢
    • 2021-09-24
    • 1970-01-01
    • 2014-08-24
    • 2021-03-31
    • 2013-09-26
    • 2014-03-27
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多