假设你有学生
你有老师
学生使用与教师不同的界面登录网站
学生可以在网站上执行以下操作 - 查找成绩 - 电子邮件教师
教师可以在网站上执行以下操作 - 查找学生 - 输入成绩
您如何设计数据库表以允许教师和学生登录?这个问题让我感到困惑,因为我正在考虑做以下事情
两个单独的表
所以
创建表老师 ( name varchar(255), email varchar(100), 密码varchar(100) )
创建表学生 ( name varchar(255), email varchar(100), 密码varchar(100) )
这是通常的做法吗?当您有两个不同的实体登录到两个不同的登录界面时?
---编辑---
如果这两个实体有不同的字段呢?在这种情况下,您是否仍会创建一个带有“角色”的Users表。
例如,如果您有以下内容该怎么办:
(请注意老师和学生有几个不同的字段。你还会创建一个表来放两个吗?)
创建表老师 ( name varchar(255), email varchar(100), 密码varchar(100) num_of_students int,
)
创建表学生 ( name varchar(255), email varchar(100), password varchar(100), gpa小数(10,2) )
答案 0 :(得分:6)
我会考虑只创建一个表并添加TypeID
,其中TypeID会将学生或教师的类型分类。
看一下这两个表的设计,它们完全相同,这应该是一个信号,告诉你可能是过度的事情。
通过将其保存在2个单独的表中,可以为您提供更多UI工作,并为输入数据的人员提供更多管理工作。
通过将其组合到一个表中并引入分类或类型字段,您可以消除所有额外的工作。
CREATE TABLE Users ( ID int, Type int, name varchar(255), email varchar(100))
我也不会将密码存储为纯文本,因为您可能会在password varchar(100)
暗示。在这种情况下,Type
可以是int或甚至一点数据类型,如果只有两种类型的人员将是学生和教师。该字段可以是IsTeacher
,其中1是教师,0是学生。但在大多数情况下,您最终意识到您需要不同类型的用户,因此需要int
数据类型。
答案 1 :(得分:2)
我会有一个ID,电子邮件,密码的登录表,但是你可以登录TYPE of login ...管理员(网站范围),老师,学生等等。
然后,从登录中,您将“type”作为标记来显示/隐藏网站中的元素,或根据需要提供其他重定向。
答案 2 :(得分:1)
此处的大多数其他答案中的设计缺少必须为用户分配两个“类型”或更多。事实上,关于与角色相关联的用户的问题非常明显,这些角色本身与权利相关联。因此,基于角色的安全性的典型表格布局在我看来是最好的。
你们之间的N:M关系:
也许检查角色就足够了,你可以放弃任何有权利的东西。
只需要一张User
表。 (表:User
)
教师和学生是Roles
,用户可以与之关联。 (表格:Role
和User_Role
)
您在每个应用程序中通常拥有的另一个Role
是Role Admin ,例如可以删除其他用户,重置密码,创建新用户......
如果您拥有复杂的权利,那么您也可以添加Right
。 Right
可以与User
以及Role
相关联。
答案 3 :(得分:1)
我会制作一个表格person
并为其添加字段type
。例如,类型可以是STUDENT或TEACHER。
答案 4 :(得分:1)
我要做的是有一个叫做'users'的表,然后是一个名为'role'的列,我会在每个界面创建一个脚本,只允许学生登录学生界面和教师在教师界面。
说实话,我实际上只有一个基于权限的用户界面,但如果我使用2个接口,那就是我要做的。
我希望这会对你有所帮助。