【问题标题】:mysql table design concernmysql表设计问题
【发布时间】:2013-01-25 18:26:45
【问题描述】:

我正在开发一个“e-class”应用程序,其中有管理员、教师、学生和课程。 一个学生可以有很多老师和很多课,一个老师可以有很多学生和很多课,一个课可以有很多老师和很多学生。

我想让管理员拥有自己的登录页面,并且教师/学生共享相同的登录页面。 (顺便说一句,这是最好的方法吗?)

我的问题是,我是否应该将所有与登录相关的信息(用户名、密码、电子邮件)放入“用户”表中,并为所有其余信息设置单独的表(“教师”、“学生”)?

我是否应该在“users”表中包含一个指向“students”/“teachers”表的主 ID 的键?

解决所有这些问题的最佳方法是什么?帮帮我,mysql大师:)

注意:我看过很多与我相关的问题,但没有一个真正回答了我的问题。

【问题讨论】:

  • 您为学生存储的信息与为教师存储的信息之间有什么区别吗?
  • 是的,每个学生都有一个唯一的 parentCode,以及注册日期和他们所在的学期。
  • 学生是否每学期都有新记录?
  • 不,它的学期字段每次都会更新。 (顺便说一句,感谢您的兴趣:))

标签: mysql database database-design


【解决方案1】:

我会比 Abe Miessler 建议的更进一步,并在用户和角色之间创建一个参考表。

例如,教师可能会以学生身份注册,因此需要在不同时间同时担任这两个角色,这并非不可能。

USER_TABLE:
UserID PK
UserName
OtherUserData

ROLE_TABLE
RoleID PK
RoleName

USER_ROLES
UserID PK
RoleID PK

USER_ROLES has composite PK on UserTable.UserID AND RoleTable.RoleID

【讨论】:

  • 顺便说一句,绝对不是必需的,但我经常会 pk 交叉引用表(此处为 user_roles),因为它通常可以更容易地以这种方式处理某些 orms。为您的解决方案 +1
  • @Horus - 是的,我也做过同样的事情。甚至可以在其中放置一个“启用”位字段,以防有理由在不实际删除访问权限的情况下启用/禁用。
  • 好像我没有将其标记为正确,好吧:)
猜你喜欢
  • 2011-06-03
  • 2014-07-31
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多