Asp.net 用户结构,多种用户类型

Asp.net 用户结构,多种用户类型,asp.net,sql-server,web-applications,data-structures,Asp.net,Sql Server,Web Applications,Data Structures,我目前正在为我们学校开发一个新的数据库/web应用程序。我需要提供一点背景信息,使我的问题更具相关性 有许多不同的用户类型将访问此应用程序,每种用户类型都需要访问应用程序的不同部分,并对其可能访问的每个“区域”具有不同的权限 例如: 学生可以登录并访问这些信息,更新他们的详细信息,以及下载他们的报告副本(因此他们只能查看他们的信息) 教师可以登录并访问这些信息以及他们所教的所有学生 管理员可以登录并访问这些信息以及他们管理的所有教师和学生 然后还有一些其他的登录类型,但是对于这个问题,它们并不是

我目前正在为我们学校开发一个新的数据库/web应用程序。我需要提供一点背景信息,使我的问题更具相关性

有许多不同的用户类型将访问此应用程序,每种用户类型都需要访问应用程序的不同部分,并对其可能访问的每个“区域”具有不同的权限

例如:

学生可以登录并访问这些信息,更新他们的详细信息,以及下载他们的报告副本(因此他们只能查看他们的信息)

教师可以登录并访问这些信息以及他们所教的所有学生

管理员可以登录并访问这些信息以及他们管理的所有教师和学生

然后还有一些其他的登录类型,但是对于这个问题,它们并不是很重要,因为从技术上讲,它们只是更多的用户,没有或需要自己的表来获取额外的信息

我已经在很大程度上决定了一个我很满意的结构,但是我一直在改变我的想法,我认为下面的工作是最好的

我有一个用户表(user_T),其中存储了所有相关的用户信息(用户名、密码等)

然而,对于某些用户类型(例如,学生、职员等),我也有单独的表,这是必要的,因为学生需要存储与职员不同的信息。 这就是我的问题所在,所有用户都有一些相同的基本字段(名字、姓氏、出生日期、性别等)

我应该将这些存储在用户表中吗?还是在单独的表格中

如果我将它们全部存储在User_T表中,这将使应用程序更容易提取它们的信息并允许它们更新,在显示学生详细信息时,例如,我需要引用用户名以获取学生姓名等

我目前的想法是,最好的选择是使用单独的表和所有字段,并将它们连接到视图用户_V中,使用一个指示数据来源的字段,以便在执行更新时可以对适当的表应用该字段


想法?

听起来,如果将用户表用作一般的“人员”配置文件表,而将其他表用作唯一的角色特定数据,则会有很好的分离。用户将存储有关此人的更一般信息,此表中的ID可能是其他表中名为“person\u ID”的外键

使用此表模式还取决于您可能一起查询此共享常规数据的频率。例如,如果您计划在不知道类型/角色(员工、学生等)的情况下搜索姓名或电子邮件,则最好将此一般人员信息与其他信息分开放在用户表中。如果您知道角色/类型,则可以选择相应的表进行搜索,并根据需要加入用户数据。但是,如果不以这种方式分隔表,那么就只能使用视图或联合来允许您使用单个查询只搜索那些常规列,我认为优化这些列要麻烦得多

    User_T table: id, first_name, last_name, email, gender, birthdate, role, ...
    Students table: id, person_id, gpa, ...
    Staff table: id, person_id, staff_type, hire_date, ... 

个人是否可以担任多个角色,例如,行政助理是否可以参加课程?范围是否有其他限制。例如,讲师的行为是否仅限于他们所在的系或他们班上的学生?是的,个人可以扮演多个角色,例如,你可以是教师、经理,甚至是工资管理人员,你不仅需要访问不同的页面,还需要访问页面中的不同内容(示例:薪资专员可以添加薪资记录,经理不能,但可以查看记录),范围也有限制,例如,讲师可能在德国系,但可能只能看到或行动他们所教的学生,以及行政官员可能只能看到该地区的学生等。数据将被查询很多,我们有16000多名学生和900名教师,因为接待员是在不间断地查找学生记录(关于呼叫)时,我只能假设会有比用户登录多得多的查询。然而,在这段时间内,所有900多名教师都在登录以编写报告,他们的姓名等都会被访问(在旧系统的两个表中,这是最令人头疼的问题),对我们来说,负载从来不是一个真正的问题,一切都相当优化,我们有一个像样的后端,但我仍然希望以正确的方式来做这件事,而不是简单的方式…只是不确定什么是“正确的”方法是…如果你需要更多的信息,请告诉我。另一个问题是,当学生完成学习后,他们会留在用户表中吗?因为法律要求我们将这些详细信息保留7年,用户表可能会变得非常大。