您不想实际存储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
)