sql - 在 SQL 中建模用户和角色的正确方法

标签 sql model relational-database roles user-roles

我正在设计一个 Java 应用程序,模型数据存储在 Oracle SQL Server 中。我正在尝试根据需要设计最佳的用户/角色模型。

由于业务规则,所有用户都拥有基本的公共(public)信息:

  • 身份识别 ID
  • 姓名
  • 姓氏
  • 电子邮件
  • IsActiveUser

但是根据角色,用户将拥有额外的字段,例如:

客户端角色:

  • 出生日期
  • 地址

律师角色:

  • 专业
  • 专业注册 ID

专家角色:

  • 职业

经理角色:

  • 地区

我认为有两种可能的解决方案:

  1. 用户表将包含所有常用字段以及根据角色填写的可选字段。
  2. User 表将仅包含公共(public)字段,然后我创建一个 Detail_User 表来保存随角色变化的可选字段。

您认为这种可能的解决方案好吗?有没有更好的替代方案?

最佳答案

按照您标记的那样,在关系数据库范例中回答。

Do you think this possible solutions are good? Is there an alternative better solution?

没有。这是子类型的经典案例。

I have a Role table and the User table have a FK to this, because every user will have only one role.

这并不能解决你的问题。您需要存储每个角色实例、每个用户实例的值。

此外,只有当您希望将某些子表(例如Portfolio.LawyerId)限制为律师而不是用户时,您才会欣赏正确的解决方案。

数据模型

IDEF1X/ER 级别(不是 ERD)的数据模型是:

User Role Data Model

注意

  • 自 1983 年以来的关系数据建模标准是 IDEF1X。对于那些不熟悉该标准的人,请参阅简短的 IDEF1X Introduction
  • 有关子类型的完整定义和使用注意事项,请参阅 Subtype Definition

关于sql - 在 SQL 中建模用户和角色的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66679205/

相关文章:

php - MySQL 一对多关系

mysql - 如何通过SQL获取prestashop产品属性

database - 与用户表相比,学生与教师之间的正确结构关系

java - 重新设计MySQL表的主键

mysql - 需要有关查询总和显示错误输出的帮助

ruby-on-rails - Rails 模型验证,它检查是否已经存在具有某些属性的对象

javascript - Objection.js 中的异步 $formatDatabaseJson

cakephp - 如何将多个模型 ID 传递到 CakePHP 中的注释添加操作?

mysql - 带计数的 SQL 语句

c# - 在名称中必须指定过程的所有者 - sql