【问题标题】:Database Design - Linking student to teacher数据库设计 - 将学生与老师联系起来
【发布时间】:2011-05-14 17:34:17
【问题描述】:

仍在将网络应用程序作为学校项目工作,而且似乎还在不断扩大。

我必须为教师添加一个层,以便他们可以通过应用程序管理和指导学生。所以,我必须把老师和他们的学生联系起来。

我想知道最好的方法是什么。目前我为所有用户准备了一张桌子。该表的基本内容是:

id | email | firstname | lastname | role
1  | s@s.s | dromiceio | mimus    | 1
2  | d@d.d | tyranno   | saurus   | 2
3  | a@a.a | utah      | raptor   | 1

角色是我分配给他们以授予他们某些权限的编号。 1 = 学生,2 = 老师,3 = 管理员。

假设一个学生有一个老师,但一个老师有很多学生,那么设计我的数据库表的最佳方法是什么?

我正在考虑创建一个新表并将学生/教师 ID 放入其中:

例如,如果 Tyranno Saurus (id 2) 老师将上表中的两个学生链接到他,我会做一个这样的表:

pk_id | teacherid | studentid
  1   |     2     |     1
  2   |     2     |     3

这样,我就知道 Tyranno 老师(id 2)有两个学生,分别是 userid 1 和 userid 3 的学生。

再说一次,我从来没有真正做过这样的事情,所以我想知道是否有人可以给我一些关于这个的见解,以及是否有可能以更好的方式做到这一点。

我正在使用 MySQL 用 PHP (CodeIgniter) 构建我的应用程序;如果这很重要。

非常感谢。

【问题讨论】:

  • 你不会碰巧有一张老师的照片:Tyranno Saurus你会吗?
  • 您的第二张桌子可以正常工作。但是,如果您曾经真正构建过这个数据库,我会建议学生和教表引用您的用户表。想象一下,如果您想存储特定于学生的信息,您能否想象一下您的用户表中包含仅适用于某些行的列的样子?
  • @Johan 保密,我很高兴。 @enamrik你是绝对正确的。我正在构建这个项目作为课程的一部分,我们基本上必须展示我们作为 web 开发人员可以做的一切。我快完成了,距离截止日期还有一周,所以我想我会扩展到教师部分。这不是一个“真正的”项目,所以我猜数据库现在会照原样做,但我意识到这在现实生活中是行不通的。感谢您指出这一点!

标签: mysql database database-design relational-database


【解决方案1】:

如果学生有零个或一个老师指导他们,那么我建议在学生表中添加一个 CoachID 列,该列是该特定老师的外键。您建议的中间表并没有做任何事情来简化这个简单的关系,它实际上使它更复杂一点。

如果您要将学生与班级联系起来(每个班级有多个学生,每个学生上多个班级),那么中间的多对多映射表将是必须的。

【讨论】:

  • 哦,对了。我一直从老师的角度思考,而不是从学生的角度思考。添加一个 CoachID 确实更容易。我一直试图让事情变得比实际情况更复杂。感谢您的宝贵时间。
  • 很高兴能提供帮助 - 对于 X 老师来说,这种简单的方法仍然可以很容易地确定他所指导的学生 - 除了复杂性之外,您不会失去任何东西。 :)
  • 没有“学生”表;所有用户只有一张桌子。如果您只是向其中添加一个 CoachID 列,则没有简单的方法来实现教练必须是老师的约束。这部分是由于另一个设计问题——单列“角色”有两个目的。它区分学生、教师和管理员,并确定他们做某事的权限。
最近更新 更多