【问题标题】:School management MySQL database design学校管理MySQL数据库设计
【发布时间】:2012-02-10 21:36:37
【问题描述】:

我正在为学校管理系统设计一个数据库,但遇到了几个问题,我想把它扔在这里,有人可能会提供帮助。 我有一个包含学生详细信息的 STUDENTS 表和一个包含班级信息的 CLASS 表。在申请中,您需要知道如果学生通过考试,他或她应该被提升到哪个班级。所以类表在我的设计中是这样的:

+----------------------+
|id | name | parent_id |
+----------------------+

parent_id 是上一个类的 id。现在每个班级有多个流(例如,班级表格 1 可以有 3 个班级:表格 1A、表格 1B、表格 2B 等)并且每个班级都有学生说表格 1A 有 40 名学生等等。所以我有一个这样设计的流表:

+---------------------------------------------+
| id    | student_id | class_id | stream_name |
+---------------------------------------------+

所以对于每个有 40 名学生的流,我将在流表中有 40 行,流名称将包含 A、B、C 之类的名称或用户想要命名的任何名称。这是针对我的问题的最佳设计吗?这种设计会以任何方式影响系统的性能吗?解决问题的最佳数据库设计方法是什么?

STUDENTS 表包含有关学生的信息,例如他们的姓名和父母信息。

编辑: 每次学生注册或新学年注册时都会更新流表,例如,如果我在表格 1 的流 A 中,那么所有学生都在该班级(表格1)应升级为班级表格1,保留他们的课程,因此如果我在表格1A中,那么下一个学年我将在表格2A中。有一个 ACADEMIC_YEAR 表保存学年的信息,例如它什么时候开始和结束以及各种信息,还有一个 EXAM_RESULTS 表存储每个学生在一学年的特定流中的结果。对于记录,我需要知道学生学习过的所有流和课程。

提前致谢

【问题讨论】:

  • 我知道您至少有一个 STUDENTS、CLASS 和 STREAMS 表。但为了评估这种设计是否会影响性能,我们需要更多信息。 STREAMS 表是如何更新的?还涉及哪些其他表?事情多久改变一次?我不相信任何人可以用有限的信息告诉你什么设计是最好的。
  • 感谢您对@MJB 的回复,我已经编辑了我的问题,希望现在已经清楚了..

标签: php mysql database database-design


【解决方案1】:

您的方法是正确的。我想推荐以下内容:

a) 在流表中添加开始日期和结束日期,以便您可以计算学生在流中的时间段(将能够处理在年中开始或在年底前离开的学生) .这也可以处理重复的学生,因为他们将在同一个班级过新的一年

b) 在考试结果表中,添加 stream_id、class_id、student_id 字段,以便您可以将考试与班级、学生和流相关联。除了 student_id 和 class_id 之外,stream_id 似乎存在重复,但根据经验,当您不必加入流以找出考试属于哪个班级和学生时,它会加快查询速度。

【讨论】:

  • thanx @ssmusoke,在为我决定做的事情而奋斗之后。感谢您的回复
猜你喜欢
  • 2010-11-09
  • 1970-01-01
  • 2013-12-28
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
相关资源
最近更新 更多