2013-05-22 60 views
0

我目前正在为我们学校开发一个新的数据库/ Web应用程序。我将需要提供一些背景信息,以使我的问题更具关联性。用户结构,多种用户类型

有许多不同的用户类型可访问此应用程序,每个用户需要访问应用程序的不同部分,并为他们可能访问的每个“区域”授予不同的权限。

例如:

学生可以登录并查看有信息,并更新他们的详细资料,以及他们的报告下载副本(所以他们只能看到自己的信息)

教师可以登录和访问有信息和他们教

经理可以登录并访问那里的信息和所有的老师和学生,他们管理

有那么一群其他登录类型的所有学生但是对于这个问题他们并不重要,因为他们在技术上只是更多的用户,他们没有或不需要他们自己的表格来获取额外的信息。

我大部分决定了我很满意的结构,但是我一直在改变我的想法,我认为以下做法是最好的。

我有一个用户表(为user_t),所有相关用户信息存储(用户名,密码等)

不过,我也有一些用户类型(例如,学生的单独的表,工作人员等),这是必要的,因为学生需要存储与工作人员不同的信息。 这里是我的问题所在,所有的用户将有一些相同的基本字段(名字,姓氏,出生日期,性别等)。

我应该将这些存储在User_T表中吗?或者在单独的表格中?

如果我将它们全部存储在User_T表中,这可以让应用程序更容易地获取他们的信息并允许他们更新,在显示学生详细信息的时候,例如,我会需要引用User_T来获取学生的名字等

我目前的想法是,最好的选择是将所有字段分开的表,并将它们加入到视图User_V中,并指定数据的来源,以便当一个更新是预先形成的,它可以适用于适当的表。

想法?

+0

个人是否可以担任多个角色,例如,行政助理可以上课吗? – HABO

+0

范围是否有其他限制。例如,教师的行为是否仅限于他们所在的部门或他们班级的学生? – HABO

+0

是个人可以扮演不止一个角色,例如,您可以成为教师,经理,甚至是薪酬官员,而且您不仅需要访问不同的页面,还需要在页面中使用不同的访问权限(例如:薪资官员可以添加工资单recrods,经理不能,但可以查看记录),范围也有限制,例如一名教练可能在德语中,但可能只能看到或行动他们的老师,作为管理员可能只能看到那里的学生区域等 – UltimateVenom

回答

0

听起来好像将通过使用User_T表作为一般的“人员”配置文件表和其他独特的角色特定数据表进行分离。 User_T将存储关于该人的更一般信息,并且该表中的ID可能是在其他表中被称为“person_id”的外键。

使用此表格架构还将取决于您可能多久查询此共享的一般数据。例如,如果您计划在不知道类型/角色(无论员工,学生等)的情况下搜索名称或电子邮件,那么最好在User_T表中将这些普通人员信息与其他信息分开。如果您知道角色/类型,则可以选择相应的表格进行搜索,并根据需要简单地为用户_T数据添加JOIN。但是,如果您不以这种方式分开您的表格,那么您只需使用VIEW或UNION即可使用单个查询仅搜索那些常规列,而在我看来,这对于优化而言更麻烦。

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, ... 
+0

数据将被查询很多,我们有超过16,000名学生和900名教师,因为接待员不断地查询学生记录(关于电话),我只能假设会有比用户登录更多的查询。然而,有了这个令人遗憾的报告写作时间,所有900多位老师都登录写入报告,并且他们的姓名等被访问用于此过程(在旧系统中的这两个表中,这引起主要头痛),负载从未真正对我们来说一切都是相当优化的,我们有一个体面的后端, – UltimateVenom

+0

,但我仍然希望以正确的方式做到这一点,而不是简单的方法......只是不知道什么是“正确”的方式......让我知道你是否需要任何信息。 – UltimateVenom

+0

另一个问题是,当一个学生完成学习时,他们留在用户表中吗?正如我们依法要求保留7年的细节,用户表格可能会变得非常大。 – UltimateVenom