0

大学の時間割生成にJ2EE(サーブレット)を使ったプロジェクトをやっています。1日に6スロット(6時間)があります

    4 x 1 HR Lectures
    1 x 2 HR Lab

3 つのバッチがあります (3IT、5IT、7IT)

   2 Classroom 
   1 LAB

タイムテーブルの各スロットには

       (Subject,Faculty)

ラボの場合、スロットを複製します。テーブル

    Subject(SubjectID  INT, SubjectName VARCHAR);
    Faculty(FacultyID INT,FacultyName VARCHAR,NumOfSub INT,Subjects  XYZ);

DATATYPEここでは、対象を決めることができません。私は何をすべきか ?教員は複数の科目を教えることができるので?また、Subject Table とリンクする方法は?

PS MySQL データベースの使用

4

1 に答える 1

0

NumOfSub実際に(被験者の数)または Subjectsに保存したくありませんFaculty。被験者をそのように保管することは、第 1 正規形に違反しており、それを扱うことは大きな頭痛の種となります。
代わりに、別のテーブルが必要です。

FacultySubject
----------------
FacultyId  -- fk for Faculty.FacultyId
SubjectId  -- fk for Subject.SubjectId

これから、被験者の数、または被験者をリストした一連の行を簡単に取得できます (MySQL には値のリストを返す関数もあると思いますが、私はそれらの経験がありません)
:特定の教師が教える科目:

SELECT Faculty.FacultyId, COUNT(*)
FROM Faculty
JOIN FacultySubject
  ON FacultySubject.FacultyId = FacultyId.FacultyId
WHERE Faculty.FacultyName = 'Really Cool Professor'
GROUP BY Faculty.FacultyId

...そして、このクエリは、彼らが教えるすべての科目 (名前付き) を取得します:

SELECT Subject.SubjectId, Subject.SubjectName
FROM Faculty
JOIN FacultySubject
  ON FacultySubject.FacultyId = FacultyId.FacultyId
JOIN Subject
  ON Subject.SubjectId = FacultySubject.SubjectId
WHERE Faculty.FacultyName = 'Really Cool Professor'

(これは最後に件名を一連の行として返すことに注意してください。

SubjectId    SubjectName
=========================
1            Tree Houses
2            Annoying Younger Sisters
3            Swimming Holes
4            Fishing

)

于 2013-11-25T11:14:40.703 に答える