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

时间:2018-08-07 17:13:04

标签: sql sql-server database

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

我有一个用户表,其中存储部门用户所属的密码(例如密码)等信息,电子邮件为e.t.c。我还必须创建另一个表来存储用户访问信息。我的用户具有以下访问权限:

  1. 用户ID 123:[业务范围:abc,xyz,e.t.c。],[角色:团队负责人,常规用户e.t.c。],[公司:1234、54666,e.t.c。]
  2. 用户ID 345:[业务范围:abc,xyz,987,等等],[角色:团队负责人,维护等等],[公司:1234、54666,等等]

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

我在此表中的思维方式是,为每种访问类型创建3列,并以xml的形式存储每个类别,否则我必须为每种类别(t_user_Lob,t_user_role,t_user_company)创建3个不同的表。 / p>

什么是最好的方法?

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

我也喜欢json方式来存储数据,但是我使用的是sql server 2012,因此在2012年解析/比较json列中的值很麻烦。

谢谢

2 个答案:

答案 0 :(得分:0)

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

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

tuple

答案 1 :(得分:0)

假设组合函数并不奇怪,我将创建一个表,将其称为user_access,其中包含角色和公司的每种组合,并为每一行赋予唯一的值。然后创建第三个表,将其称为具有用户ID和关联的user_access值的user_access_people。因此,user_access_people将在user_id和user_access_Id之间建立多对多关系。必要时,每个user_ID会有多行。

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