1

データベースの正規化に頭を悩ませようとしています。実用的なデータベースを作成しようとするのはこれが初めてなので、私の無知を許してください。クラスプロジェクト用の自動卒業チェックシステムを作成しようとしています。次の表は、設定されたカタログ年数のメジャーのすべてのオプションを追跡します。表は以下の通り

PID    Title    Dept    Courses    Must_have

Must_have一部のオプションでは、リストされた合計 (したがって属性)から指定された数のクラスをユーザーが選択できます。完成した行は次のようになります。

PID    Title    Dept    Courses    Must_have
--------------------------------------------
 1      bis     acct    201|202      NULL

Titleメジャーに付属するオプションの名前です。bis(ビジネス情報システム) にクラスの選択肢がある場合、1 つの行に 1Must_haveつの行だけの番号があります。

私の質問は、このテーブルを 2 つの異なるテーブルに分割する必要があるかどうかです。私が現在持っている方法は、やや間違っているように思えます。どんな助けでも大歓迎です。

4

2 に答える 2

5

部門を別のテーブルに分割し、数値 ID に関連付けます。次に、「コース」フィールドを「結合テーブル」に分割します。このようなもの:

専攻

Id   Title       DepartmentID

major_courses

Id   MajorId     CourseId      MustHave

部署

Id   Title

そのため、次のようなメジャーがある場合があります。

1    bis          1

次のような major_course:

1    1           201            0
1    1           202            0
1    1           203            1 -- must have 203

次に、次のような部門:

1    bis

したがって、最初の専攻のコースのリストを取得するには、次のようにします。

SELECT major_courses.CourseId, major_courses.MustHave, departments.Title 
FROM majors 
RIGHT JOIN major_courses ON major_courses.CourseId = majors.Id 
INNER JOIN departments ON departments.Id = majors.DepartmendID 
WHERE major.id = 1
于 2009-11-02T23:21:16.653 に答える
5

私はそれを3つのテーブルに分割します。1 つ目はmajorsと を含みPID, Title, Dept、2 つ目はcoursesを含み、コース ID、コース名、およびその他の情報を含み、最後は専攻とコースの間のマッピング (おそらく という名前courses_majors) になります。テーブルには、専攻のcourses_majorsID、コースの ID、およびその専攻で必要かどうかを示すフラグが含まれます。

(これは、1つのコースが複数のメジャーで使用されることを前提としています)

于 2009-11-02T23:14:03.523 に答える