我正在为学校管理设计一个数据库。
这里不是单一的学校,而是多所学校,有自己的学生,类,教师和学科。
这是要求。
•一所学校可以有许多类
•一个类可以有许多子类
•许多学生可能属于一个班级的一个部分
•许多教师可以属于一个班级的一个部分
•许多科目可以属于一个班级的一个部分
•学校希望管理类
•学校希望管理部门
•学校希望管理班级中某一个部分的科目
•学校希望为一个班级的某一个部分的某一科目分配一名教师
•学校可以给学生分配一节课
另外,有些学校可以把类命名为一,二,三,有些学校可以命名为一,二,三。 区段或子类也相同
对于实体,学校和教师来说,事情是直接的。 下面是我给他们的方法。
School
--------------
id
name
...
Teacher
--------------
id
school_id
name
但是我在为一所学校绘制类和分区图时遇到了问题。
我试着让另外两个实体成为类和科,并给他们一个学校的外键
SchoolClass
-----------------
school_id
class_name
...
SchoolSection
----------------
school_id
section_name
...
为了将一个学校的班级映射到它的所有部分,我创建了一个连接表,因为它将是多对多的关系。
SchoolClassSection
---------------------------------------------------------
school_class_id
school_section_id
但是正如我上面提到的,我还需要在课堂上增加科目和老师,所以我尝试了下面这样的方法。
SchoolClassSections
---------------------------------------------------------
school_class_id
school_section_id
subject_id
teacher_id
但是现在我在结表中有四个外键。
在junciton表中有两个以上的外键没有问题吗?
此外,我也需要添加学生,但我现在不知道如何进一步为学生关系为类,节?
有一件事我可以像下面这样
student
-----------
school_id
school_class_section_id // but if SchoolClassSections can have subject_id and teacher_id too it will become confusing
不,它不是“反模式”。 在许多例子中,连接表可能有两个以上的外键:
这些只是来自其他域的一些示例(它们甚至没有包含日期维度)。 一个表有多个外键并不少见。
由于时间限制,我没有分析你的模式。
但是无论从关系的角度还是从SQL的角度来看,对于具有两个以上外键的表或连接表都没有问题。 事实上,这很常见。