我正在使用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);


在这里,我无法确定主题的DATATYPE。我该怎么办 ?既然一个系可以教多个科目?另外如何与主题表链接?

附言使用MySQL数据库

最佳答案

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

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


10-07 23:50