我目前正在开发一个大学管理系统项目,我陷入了如何设计数据库中的循环课程部分以及它如何连接到我的系统的其他部分(测验、成绩等...)的困境。
我目前的方法存在的问题是,我找不到一种方法来存储学生注册(如果多次失败,同一门课程可能会多次),以及我应该如何在每次注册时存储他的成绩,并且每次都会膨胀有3,4个外键的表可以知道哪个课程,以及这个年级或注册的周期属于谁或哪个课程
1。核心实体的单独表格
courses
表将存储每门课程的信息,包括其名称、描述、先决条件以及是否是重复课程。
students
表将存储每个学生的信息,包括他们的姓名、ID 和联系方式。
course_cycles
表将存储有关重复课程的每个实例的信息。它将包括课程 ID、周期的开始和结束日期以及任何其他相关信息。
2。关系链接表
student_registrations
表将学生链接到特定的课程周期。它将包括学生 ID、课程周期 ID 和注册日期。通过此表,您可以跟踪不同学生或同一学生在不同周期对同一课程的多次注册。
grades
表将存储每个学生在特定课程周期中的成绩。它将包括学生 ID、课程周期 ID、成绩以及分配成绩的日期。
3.避免冗余
您可以使用
外键将其链接到
course_cycles
表,而不是将课程名称和描述存储在 courses
表中。这样可以避免冗余并确保数据一致性。
您可以使用 外键 将
grades
表链接到 student_registrations
表,从而无需将单独的 外键 连接到 students
和 course_cycles
表。
示例
假设您有一门名为“编程入门”的课程,每学期开设一次。您将在本课程的
courses
表中拥有一个条目。每个学期,都会在 course_cycles
表中创建一个新条目,链接到“编程入门”课程。然后,学生将注册特定的课程周期,他们的成绩将记录在grades
表中,并与相应的课程周期和学生注册相关联。