sql - 为每种类型的用户将登录名和密码放在一个表或多个表中?

标签 sql database database-design

我有 3 种不同类型的用户,每种类型的用户都可以有其他类型没有的列和与表的关系,但他们都有登录名(唯一)和密码,
你会怎么做:

  • 为每种类型创建一个表或
  • 为所有这些创建一个表或
  • 为所有这些创建一个表,仅用于登录名和密码,并将所有其他内容分开,并用 FK 将它们绑定(bind)
  • 别的

最佳答案

第 3 个是您建议的最佳选项(为了澄清而略有更新):

  • 为所有这些创建一个表,用于登录名和密码以及任何其他共享的内容,为所有其他未共享的内容创建一个单独的表,并将它们与 FK 绑定(bind)

除了不存储密码外,存储加盐密码的散列版本。

另一种方法可能是为您的用户分配组和/或角色。这可能比固定表结构更灵活,允许您动态添加新角色。但这是否对您有用,取决于您的需求。

正如 Aaronaught 所指出的,在主表中您需要一个 AccountType 来确保用户只能拥有其中一个角色。您必须记得在加入表格时检查此列的值,以确保用户只有一个事件角色。

外键的唯一约束确保用户只能拥有一次角色。

关于sql - 为每种类型的用户将登录名和密码放在一个表或多个表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2284354/

相关文章:

sql - sqlite 中与 MySQL 中的 find_in_set(value,set) 等效的函数是什么?

PHP 不将数据库打印为表

mysql - 如何设计和优化网站的数据库,以便为每个链接提供多个图像功能

php - 如何设计大约 50 列的表并选择用户所需的列

javascript - OUT 在命令行中总是为空,但在 SQL 客户端中却不是?

java - SQL 中的解码与 Java 中的 If...Else 的解码

database - DBIinit DatabaseTablesPreparer NullPointerException

javascript - IBM Worklight - 无法显示使用 SQL 适配器检索的数据

database - SQLite 临时数据库和 InMemory 数据库之间的区别

sql-server - SQL Server 碎片问题