存储多个用户属性集合的最佳方式



有关以下场景的最佳数据库设计实践的问题:

我有一个用户表,其中存储了密码,部门用户所属,电子邮件等信息。我还必须创建另一个表来存储用户访问信息。我有以下用户的访问权限:

用户 ID 123 : [业务线: ABC, xyz,e.t.c.], [角色: 组长, 普通用户 e.t.c.],
  1. [公司: 1234, 54666, e.t.c.]
  2. 用户 ID 345: [业务线: ABC, XYZ, 987, e.t.c.], [角色: 团队负责人, 维护等], [公司: 1234, 54666, e.t.c.]

基本上,用户可以对每个类别具有不同访问权限的任意组合。

我的想法是在这个表中,为每种类型的访问创建 3 列并以 xml 的形式存储每个类别,否则我必须为每个类别、t_user_Lob、t_user_role、t_user_company创建 3 个不同的表。

最好的方法是什么?

我还考虑过将它们存储为每列中的 csv 值,但我听说这违反了关系规范化规则。

我也喜欢 json 存储数据的方式,但我使用的是 sql server 2012,在 2012 年解析/比较 json 列中的值真是太糟糕了。

谢谢

我会将它们存储在三个单独的表中。

您的问题不清楚需要什么关系,但基本上您使用三个表来创建多对多关系。

Entity A
Entity B
Relationship (A - B)

假设组合数学并不古怪,我会创建一个表,称之为user_access,包含角色和公司的每个组合,并赋予每一行一个唯一的值。 然后创建第三个表,使用用户 ID 和关联的user_access值调用它user_access_people。 因此,user_access_people user_id和user_access_Id之间会有多对多的关系。必要时,每个user_ID都会有多行。

然后,您可以联接这些表,以检查要查找的user_access列中的任何值。

最新更新