这就是我拥有的:
CREATE TABLE STUDENTS(
stu_id NUMBER(9) NOT NULL,
stu_name VARCHAR2(15) NOT NULL,
stu_address VARCHAR2(15),
stu_major VARCHAR2(6),
CONSTRAINT students_pk PRIMARY KEY (stu_id)
);
CREATE TABLE GRADE(
stu_id NUMBER(9) NOT NULL,
course_id VARCHAR2(7),
stu_crse_grade VARCHAR2(1),
PRIMARY KEY (stu_id, course_id),
FOREIGN KEY (stu_id) REFERENCES students(stu_id),
CHECK (stu_crse_grade = 'A'
AND stu_crse_grade = 'B'
AND stu_crse_grade = 'C'
AND stu_crse_grade = 'D'
AND stu_crse_grade = 'F')
);
CREATE TABLE COURSE(
course_id VARCHAR2(7),
course_title VARCHAR2(20),
instructor_id NUMBER(3),
PRIMARY KEY (course_id, instructor_id),
FOREIGN KEY (course_id) REFERENCES grade(course_id)
);
当我尝试创建第三张表时,出现此错误。是否由于成绩表中的复合主键?我该如何解决?
答案 0 :(得分:1)
您在GRADE中的主键涵盖两列:stu_id
和course_id
。您不能将course_id
用作COURSE表的引用,因为它可能引用多个行。
您的外键应该在GRADE
表中
CREATE TABLE GRADE(
stu_id NUMBER(9) NOT NULL,
course_id VARCHAR2(7),
stu_crse_grade VARCHAR2(1),
PRIMARY KEY (stu_id, course_id),
FOREIGN KEY (stu_id) REFERENCES students(stu_id),
FOREIGN KEY (course_id) REFERENCES course(course_id),
CHECK (stu_crse_grade = 'A'
AND stu_crse_grade = 'B'
AND stu_crse_grade = 'C'
AND stu_crse_grade = 'D'
AND stu_crse_grade = 'F')
);
此外,对于您的COURSE
表,您的主键必须为NOT NULL,并且只能包含course_id
字段。如果您可能为不同的讲师使用多个course_id,那么如果我不提供GRADE.course_id
,instructor_id
将如何区分我在哪个课程中?
CREATE TABLE COURSE(
course_id VARCHAR2(7) NOT NULL,
course_title VARCHAR2(20),
instructor_id NUMBER(3),
PRIMARY KEY (course_id)
);