时间表生成的数据库设计

时间:2013-11-25 09:00:26

标签: mysql sql java-ee database-design timetable

我正在使用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主题。我该怎么办 ?既然教师可以教授多个科目?还有如何与主题表链接?

P.S。使用MySQL数据库

1 个答案:

答案 0 :(得分:0)

您不希望在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