【问题标题】:teachers students database design教师学生数据库设计
【发布时间】:2011-12-15 22:17:15
【问题描述】:

假设你有学生

还有老师

学生使用与教师不同的界面登录网站

学生可以在网站上执行以下操作 - 查找成绩 - 给老师发邮件

教师可以在网站上进行以下操作 - 查找学生 - 输入成绩

您将如何设计数据库表以允许教师和学生登录?这个问题让我很困惑,因为我正在考虑做以下事情

  • 有一张教师桌
  • 拥有学生表

两个单独的表

所以

创建表老师 ( 名称 varchar(255), 电子邮件 varchar(100), 密码 varchar(100) )

创建表学生 ( 名称 varchar(255), 电子邮件 varchar(100), 密码 varchar(100) )

这是通常的做法吗?当您有两个不同的实体登录到两个不同的登录界面时?

--- 编辑---

如果两个实体有不同的字段怎么办?在这种情况下,您还会创建一个带有“角色”的用户表吗?

例如,如果您有以下情况:

(注意老师和学生有几个不同的字段。你还会创建一个表来放置它们吗??)

创建表老师 ( 名称 varchar(255), 电子邮件 varchar(100), 密码 varchar(100) num_of_students int,

)

创建表学生 ( 名称 varchar(255), 电子邮件 varchar(100), 密码 varchar(100), gpa 十进制 (10,2) )

【问题讨论】:

  • 接受@Fatal 的回答:create table user ( name varchar(255), email varchar(100), password varchar(100), role varchar(45))
  • @Jorge 我不会在User 表中按名称保存角色。我会有一个UserRoleUser_Role 表。 UserRole 实体之间存在 N:M 关系。这基本上是您在每个具有基于角色的安全性的应用中所拥有的。
  • @Fatal 很高兴知道。我必须更深入地研究数据库模式。

标签: php mysql sql database


【解决方案1】:

我会考虑只制作一张表并添加一个TypeID,其中 TypeID 将人的类型分类为学生或教师。

看看这两张桌子的设计,一模一样,这应该是给你的一个信号,你可能做得过火了。

通过将其保存在 2 个单独的表中,您可以完成更多的 UI 工作,而输入数据的人员则需要进行更多的管理工作。

通过将其组合到一个表中并引入分类或类型字段,您可以消除所有额外的工作。

CREATE TABLE Users ( ID int, Type int, name varchar(255), email varchar(100))

我也不会将密码存储为纯文本,因为您可能会用password varchar(100) 暗示。 Type 在这种情况下可能是 int 甚至是 bit 数据类型,如果只有学生和教师这两种类型的人员。该字段可以是IsTeacher,其中 1 是教师,0 是学生。但在大多数情况下,您最终会意识到您需要不同类型的用户,因此需要 int 数据类型。

【讨论】:

  • "看看这两张桌子的设计,一模一样,这应该是给你的一个信号,你可能做得过火了。"
  • 如果两个实体有不同的字段怎么办?在这种情况下,您是否仍会创建一个带有“角色”的用户表。例如,如果您有以下内容: ---- create table teacher ( name varchar(255), email varchar(100), password varchar(100) num_of_students int, ) create table student ( name varchar(255), email varchar(100), 密码 varchar(100), gpa decimal(10,2) )
【解决方案2】:

当必须为用户分配两种或更多“类型”时,这里大多数其他答案中的设计都缺乏。事实上,这个问题很明显是关于与角色相关联的用户,而这些角色本身与权限相关联。因此,我认为基于角色的安全性的典型表格布局是最好的。

实体和关系

  • 用户:John Q. Public, ...
  • 角色:老师学生,...
  • 右:查找成绩输入成绩查找学生,...

你们之间有 N:M 关系:

  • 用户角色
  • 角色右(可选)
  • 用户权限(可选)

也许检查角色就足够了,您可以在此处删除任何带有权限的内容。

解决方案

只要有一个User 表。 (表:User

TeacherStudentRoles,用户可以与之关联。 (表格:RoleUser_Role

您通常在每个应用程序中拥有的另一个Role 是角色Admin,例如,它可以删除其他用户、重置密码、创建新用户...

当您拥有复杂权限时,您也可以添加RightRight 既可以与User 关联,也可以与Role 关联。

【讨论】:

    【解决方案3】:

    我会制作一张表 - person 并在其中添加字段 type。例如,类型可以是 STUDENT 或 TEACHER。

    【讨论】:

      【解决方案4】:

      我会像你一样拥有一个包含 ID、电子邮件、密码的登录表,但添加一个登录类型的标志...管理员(站点范围)、教师、学生等等。

      然后,通过登录,您将拥有该“类型”作为标志,以显示/隐藏站点内的元素或根据需要提供其他重定向。

      【讨论】:

        【解决方案5】:

        我要做的是有一个名为“用户”的表,然后是一个名为“角色”的列,例如,我会在每个界面中创建一个脚本,只允许学生登录学生界面和教师在教师界面。

        说实话,我实际上只有一个基于权限的用户界面,但如果我要使用 2 个界面,我会这样做。

        希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 2018-08-26
          • 1970-01-01
          • 1970-01-01
          • 2014-09-03
          • 2020-08-17
          • 2019-07-04
          • 2019-09-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多