我正在使用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数据库
答案 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
)