rog*_*ith 5 schema database-design
我正在尝试创建一个数据库来存储有关学校的信息。
我需要存储学校的每个部门。每个部门都有一个教师名单。每个老师都有一个班级列表,每个班级都有一个学生列表。
部门名称将是唯一的。但是,教师可能跨部门。另一件需要注意的事情是,如果老师A
教一门名为“数学”的课程,而老师B
也教一门名为“数学”的课程,那么这些在数据库中应该是不同的实体(我认为)。例如,我可能想要获取仅与“老师 A”一起参加“数学”课程的学生列表。
到目前为止,我有这个:
部门(部门标识,部门名称)
教师(教师身份,教师姓名);
Department_and_teachers( department_and_teachers_id ,department_id(FK),teacher_id(FK))
学生(学生ID,学生姓名)
我认为哪个是好的数据库设计?但是,它不包含有关“类”的任何信息,我不确定更改架构的最佳方法是什么。对于每个部门和教师组合,我需要添加所教授的课程列表。做这样的事情是否合理:
编辑- 基于收到的答案的新建议
对于(容易满足)合理性的具体问题,答案是肯定的。因为您似乎正在寻找更广泛的批评。您似乎大部分都在正确的轨道上,但有些事情使您的描述过于复杂。
看起来您的 Classes 表更像是我认为的课程,而您的 Department_teachers_and_classes 更像是我期望的 Classes 表。一门课程是数学,而班级则是特定教师在特定学期内教授的数学课程。一个类就像一个课程的实例。
为了实现这一变化,您的 Department_teachers_classes_and_students 可以只是 ClassStudents。
好像您在几个不同的级别上使用部门概念。您应该决定部门所属的位置,并停止在其他任何地方引用它。你说过一个老师可以为多个部门任教,所以我们不能把部门放在教师表中。这就留下了班级和课程。无论您决定哪一个,它只需要有一个指向 Departments 表的外键(除非您决定一个可以在多个 Departments 中)。这消除了 Departments_and_teachers 表。
Teachers_and_Students 可以替换为 Classes 表中的教师外键和 ClassStudents 表中的 student/classes 外键。
简而言之,对于您描述的设计部分,您可能需要下表:
Departments
Teachers
Students
Courses
Classes
ClassStudents
Terms
Run Code Online (Sandbox Code Playgroud)