2

シナリオは次のとおりです。さまざまな科目を教える教師がいます。主題は章で構成されています。同じ教科を教えているが、異なる章が割り当てられている教師が複数いる場合があります。章の中にはトピック、サブトピック(階層)があります。

私は実体に関心があります:章、トピックのみ。チャプターには、teacher_id、subject_id、title、designed_hoursなどのプロパティがあります。トピック(サブトピックもあり、サブトピックにはサブトピックが含まれている場合があります。つまり、階層的です)。トピックのプロパティは、title、teaching_methodology、hours、periods、completion_dateです。

私の提案する構造:

chapters                  topics
 -id                       -id
 -subject_id (fk)          -chapter_id (fk) references chapters
 -teacher_id (fk)          -parent_id (fk) references topics itself
 -title                    -title
 -designated_hours         -hours
                           -periods
                           -completion_date
                           -teaching_methodology

私の質問は、私の構造が正規化されているかどうかです。トピックにサブトピックがある場合、時間、期間、completion_date、teaching_methodologyなどのフィールドはnullになります。これらのプロパティ用に別のテーブルを作成する必要があります

  topic_properties
   -id
   -topic_id (fk) references topic
   -hours
   -periods

他のデータベース構造を提案することもできます。このモジュールを開始する直前に構造を取得していることを確認したいだけです

4

1 に答える 1

1

ここでは正しい方向に進んでおり、追加のテーブルは必要ないと思います。親トピックと子トピックが異なるチャプターに属さないように、少し調整します。

CREATE TABLE chapters (
    chapter_id INT PRIMARY KEY
    -- (other fields)
);

CREATE TABLE topics (
    chapter_id INT,
    topic_no INT,
    parent_topic_no INT,
    -- (other fields)
    PRIMARY KEY (chapter_id, topic_no),
    FOREIGN KEY (chapter_id)
        REFERENCES chapters (chapter_id),
    FOREIGN KEY (chapter_id, parent_topic_no)
        REFERENCES topics (chapter_id, topic_no)
);

2番目のFKが子行をchapter_id親行と同じにする方法に注意してください。

[SQLフィドル]

于 2013-02-05T13:27:29.570 に答える