0

我正在做一个使用 J2EE(servlet) 生成大学时间表的项目。一天有六个时段(6 小时)

    4 x 1 HR Lectures
    1 x 2 HR Lab

共有三个批次(3IT、5IT、7IT)

   2 Classroom 
   1 LAB

时间表中的每个时段将有

       (Subject,Faculty)

对于实验室,我将复制插槽。表

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

在这里,我无法决定DATATYPEfor 主题。我该怎么办 ?既然一个教师可以教授多个学科?另外如何与主题表链接?

PS 使用 MySQL 数据库

4

1 回答 1

0

您不想实际存储NumOfSub(主题数) Subjects. Faculty以这种方式存储主题违反了第一范式,并且处理它会引起严重的头痛。
相反,你想要的是另一个表:

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 回答