1

まず、以下のように CourseSections テーブルを作成しました。

Create Table CourseSections(
 CourseNo    Integer NOT NULL CHECK(CourseNo BETWEEN 100 AND 999),
 SectionNo   Integer NOT NULL,
 InstructorNo Integer NOT NULL,
 Year        Integer NOT NULL,
 Semester    Integer NOT NULL,
 FOREIGN KEY(CourseNo) REFERENCES Courses(CourseNo),
 PRIMARY KEY(SectionNo, Year, Semester)
);

次に、テーブル CourseSections キーを参照する外部キーを持つ別のテーブルを作成しました。

  Create Table Enrollments(
     CourseNo     Integer NOT NULL CHECK(CourseNo BETWEEN 100 AND 999),
     Semester     Integer NOT NULL,
     Year         Integer NOT NULL,
     SectionNo    Integer NOT NULL,
     FOREIGN KEY(CourseNo) REFERENCES Courses(CourseNo),
     FOREIGN KEY(Year) REFERENCES CourseSections(Year),
     FOREIGN KEY(Semester) REFERENCES CourseSections(Semester),
     FOREIGN KEY(SectionNo) REFERENCES CourseSections(SectionNo)  

);

次に、エラーメッセージが表示されます

    There are no primary or candidate keys in the referenced table 'CourseSections'   
    that match the referencing column list in the foreign key 
    FK__Enrollment__Year__3890146B'.

テーブル CourseSections を参照するものを除いて、残りの外部キーはすべて問題ありません。誰が問題がどこにあるのか教えてもらえますか? 非常に高く評価!!

4

1 に答える 1

1
FOREIGN KEY(SectionNo) REFERENCES CourseSections(SectionNo)

動作するはずですが、実際にはインデックスがないため、他の外部キーは機能しません。それらは複合インデックスの下位部分です。複合インデックスは、作成された順序でのみ列に使用されます。CourseSections.Year と CourseSections.Semester で一意のインデックスを作成するか、次のような単一の複合外部キーを作成する必要があります。

FOREIGN KEY(SectionNo, Year, Semester) REFERENCES CourseSections(SectionNo, Year, Semester)
于 2012-11-13T21:10:27.647 に答える