関係は 1 対多です。つまり、1 つのサブジェクトに多くの前提条件が存在する可能性があるため、別のテーブルを使用する必要があります。例えば
CREATE TABLE SubjectPrerequisite
( Primary_Subject_Code VARCHAR(7) NOT NULL,
Prerequisite_Subject_Code VARCHAR(7) NOT NULL,
CONSTRAINT PK_SubjectPrerequisite PRIMARY KEY (Primary_Subject_Code, Prerequisite_Subject_Code),
CONSTRAINT FK_SubjectPrerequisite_Primary_Subject_Code FOREIGN KEY (Primary_Subject_Code) REFERENCES Subject (Subject_Code),
CONSTRAINT FK_SubjectPrerequisite_Prerequisite_Subject_Code FOREIGN KEY (Prerequisite_Subject_Code) REFERENCES Subject (Subject_Code)
)
これにより、すべての正しいキーを持つことで参照整合性が維持されますが、1 つのサブジェクトに複数の前提条件がある場合にデータベースのクエリがはるかに簡単になります。例えば
-- WILL RETURN ALL SUBJECTS AVAILABLE GIVEN A CERTAIN PERSONS
-- COMPLETED SUBJECTS.
SELECT DISTINCT s.*
FROM Subject s
INNER JOIN SubjectPrerequisite sp
ON s.Subject_Code = sp.Primary_Subject_Code
WHERE sp.Prerequisite_Subject_Code IN ('C12345', 'C12346')
-- WILL RETURN ALL PRERQUISITE SUBJECTS FOR ANY GIVEN SUBJECT
SELECT s.*
FROM SubjectPrerequisite sp
INNER JOIN Subject s
ON s.Subject_Code = sp.Prerequisite_Subject_Code
WHERE sp.Primary_Subject_Code = 'C34512'