2013-04-17 2 views
0

У меня проблема с внешними ключами.Внешний ключ к составному основному ключу

Мастер таблицы:

Course (courseName, courseId) 

и ПК является courseId

Вторая таблица:

Section (sectionId, courseId) 

и ПК является (sectionId, courseID), ФК является courseID reference Course(courseId)

И стол проблема заключается в:

GradeReport (studentId, sectionId, courseId, grade) 

и PK является (studentID, sectionID, courseID)

Аппарат FK являются

  • courseId reference Course(courseID)
  • sectionId reference Section(sectionID)

(no permisson для (курсId, sectionId) ссылка Раздел (курсId, разделID))

Первый FK в порядке! Но вторая дает мне ошибку:

ORA-02270: no matching unique or primary key for this column-list

Как я могу решить эту проблему?

ответ

2

Поскольку первичный ключ секции (sectionId, courseID), ограничение внешнего ключа GradeReport должно быть (sectionID, courseID).

На самом деле вам не понадобится ограничение внешнего ключа для курса реферирования GradeReport, так как идентификатор курса будет в этом ограничении внешнего ключа.

+0

Но без разрешения для справки GradeReport (sectionID, courseID). Раздел (sectionID, courseID) courseId должен ссылаться на поле courseId таблицы Course. – user2291241

+0

Я не понимаю «(не разрешаю для строки (courseId, sectionId) ссылку (courseId, sectionID))» в ваших вопросах. Вы указали ошибку как «ORA-02270: нет соответствующего уникального или первичного ключа для этого списка столбцов», которое произойдет, если вы сделали «sectionId reference Section (courseID, sectionID)» вместо «sectionId reference Section (courseID, sectionID) –

+0

инструктор говорит, что вы должны ссылаться на идентификатор курса только из таблицы курса, а не в таблице разделов. Поэтому мы можем использовать только таблицу курсов для курса. – user2291241

0

Я не понимаю вопрос полностью, но если бы я имел эти таблицы мои внешние ключи будут:

  • раздел (который я думаю, это хорошо для вас уже)

    FOREIGN KEY ..name.. REFERENCES Course(CourseID) 
    
  • GradeReport (что, где я думаю, что у вас есть проблема)

    FOREIGN KEY ..name.. REFERENCES Section(SectionID, CourseID) 
    

Вам не нужен отдельный внешний ключ для GradeReport.CourseID, потому что это уже часть внешнего ключа SectionID, CourseID к Section и Section.CourseID можно доверять из-за внешнего ключа в Section таблицы с Course.

Смежные вопросы