Database design SQL Server中不同类型用户配置文件的数据库设计

Database design SQL Server中不同类型用户配置文件的数据库设计,database-design,Database Design,我有一个web应用程序,其中有两种用户:教师和其他人。我已经创建了accountinfo所在的usertable。对于accountinfo,我指的是emailaddress、username、password、lastactivitydate等。每个用户都有一个配置文件,配置文件包含年龄、aboutme、地址等数据,因此此信息本质上不同于用户表中的信息,这就是为什么我有一个单独的UserProfile表,其中一个用户ID的FK指向用户表 我对这个设计很满意,直到我意识到一个教师的档案比其他人的

我有一个web应用程序,其中有两种用户:教师和其他人。我已经创建了accountinfo所在的usertable。对于accountinfo,我指的是emailaddress、username、password、lastactivitydate等。每个用户都有一个配置文件,配置文件包含年龄、aboutme、地址等数据,因此此信息本质上不同于用户表中的信息,这就是为什么我有一个单独的UserProfile表,其中一个用户ID的FK指向用户表

我对这个设计很满意,直到我意识到一个教师的档案比其他人的档案有更多的字段(其他人将来可能会得到与教师档案不同的其他字段)。对于教师,我需要例如他的学校等,这样我就有了一个额外的TeacherProfile表,其中包含额外的数据。这意味着我将在3个表之间进行连接,以获取教师的所有数据:User、BaseUserProfile、TeacherProfile。因此,我想知道将基本userprofile数据分离到一个单独的表中是否是一个好主意,我是否应该将该表与用户表合并?对于这个问题还有什么其他选择

2类用户

这些角色通常称为
角色
。因此,您通常会有以下表格:

  • 特布卢瑟
    • 用户标识(PK)
    • 罗莱德(FK)
    • 电子邮件
    • 拉斯洛格丁
    • 密码哈希
  • tblUserProfile
    • 用户档案ID(PK)
    • 用户ID(FK)
    • 包含教师和学生的列,对于学生,某些值将为
      NULL
  • 特布鲁塞罗酒店
    • 罗莱德(PK)
    • 罗兰胺

我知道这可能是一项学习任务,但即使开始使用良好的安全实践,也不要存储密码(加密或不加密)。而是存储密码的安全散列和用于生成散列的salt。

交叉发布:-关于密码:当然我不保存普通密码,我不想详细说明。-角色不会做,因为我需要存储额外的配置文件数据!将盐与散列一起存储会降低散列的安全性。最好使用其他字段作为salt,或者使用易于生成的salt。@user24790 tblUserProfile将具有与概要文件相关的所有列(基本+附加)。如果是学生,则附加列将为
NULL
。如果是教师-则列可能包含一些附加值。有道理吗?@GilbertLeBlanc我不同意这一点。将盐与散列一起储存并不会使其不安全。它只是说,对于这个特定的密码,使用这个随机垃圾来生成散列。为此使用另一个字段会增加复杂性和混淆(但本质上没有安全值)。我不确定生产盐比储存盐更安全。如果你可以很容易地复制它,如果我只做一次并保存它,那么生成的意义何在呢。好吧,伙计们,谢谢你们的回答,但是密码的东西在这里没有那么重要@oleksii:您的建议违反了数据库设计的第一个正常形式。它也不会使查询变得更容易,因为您必须检查用户具有哪个角色,因此简单的联接是不够的。当然,您总是可以通过联接从tblUserProfile表中获取所有列,但是在代码中的某个地方,您必须处理这种异常情况。