php - 学校管理MySQL数据库设计

标签 php mysql database database-design

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

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

其中 parent_id 是上一类的 ID。现在每个类(class)都有多个流(例如,类(class)形式 1 可以有 3 个流:形式 1A、形式 1B、形式 2B 等)并且每个流都有学生说形式 1A 有 40 名学生,依此类推。所以我有一个采用这种设计的流表:

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

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

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

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

提前致谢

最佳答案

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

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

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

关于php - 学校管理MySQL数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8871645/

相关文章:

mysql - 如何对中间有空值的两个数据进行升序

mysql - 执行计数后交换数据库中的值

mysql - 在mysql中创建一个 View ,其中包含每小时数据的计数

php - ORDER sql 查询未按预期工作

php - 从表中获取多个值

php - MySQL 结果未显示在表中?

php - 使用 Ajax 的异步 PHP 查询?

php - CActiveForm beforeValidate 不适用于 afterValidate

php - 从表中选择随机数量的记录,其中列值对于mysql中的结果集不重复

php - PHP获取YouTube标题并显示它