ora-02270 Как это исправить? - PullRequest
       16

ora-02270 Как это исправить?

0 голосов
/ 22 октября 2018

Вот что у меня есть:

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

Когда я пытаюсь создать третью таблицу, я получаю эту ошибку.Это из-за составного первичного ключа в таблице оценок?Как мне это исправить?

1 Ответ

0 голосов
/ 22 октября 2018

Ваш первичный ключ в 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)
);
...