我正在设计一个 Java 应用程序,模型数据存储在 Oracle SQL Server 中。我正在尝试根据需要设计最佳的用户/角色模型。
由于业务规则,所有用户都拥有基本的公共(public)信息:
- 身份识别 ID
- 姓名
- 姓氏
- 电子邮件
- IsActiveUser
但是根据角色,用户将拥有额外的字段,例如:
客户端角色:
- 出生日期
- 地址
律师角色:
- 专业
- 专业注册 ID
专家角色:
- 职业
经理角色:
- 地区
我认为有两种可能的解决方案:
- 用户表将包含所有常用字段以及根据角色填写的可选字段。
- 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)的数据模型是:
注意
- 自 1983 年以来的关系数据建模标准是 IDEF1X。对于那些不熟悉该标准的人,请参阅简短的 IDEF1X Introduction 。
- 有关子类型的完整定义和使用注意事项,请参阅 Subtype Definition 。
关于sql - 在 SQL 中建模用户和角色的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66679205/