优化大型SQL实体权限查询

时间:2017-11-27 10:35:59

标签: sql-server tsql optimization permissions

我碰巧在下面的场景中遇到了一些性能问题。我提供的示例大大简化,但提供了解决问题所需的足够的洞察力,并可能帮助我解决它。

假设我有一个大型MSSQL数据库,其中包含以下表格:

  • 项目
  • 公司
  • 用户

然后我有5个名为 {Entity} Permission 的表,它们将这些表与文档(n:m)连接在一起使用整数权限位标志:

1 =读取2 =写入4 =创建8 =删除16 =修改权限

*示例:*

DepartmentPermission:
DocumentID | DepartmentID | PermissionFlagAllow | PermissionFlagDeny
    15     |       1      |        1|2|4|8      |       NULL

CompanyPermission:
DocumentID |   CompanyID  | PermissionFlagAllow | PermissionFlagDeny
    15     |       8      |          1|2        |       NULL

UserPermission:
DocumentID |    UserID    | PermissionFlagAllow | PermissionFlagDeny
    15     |       48     |          1|2        |        4|8

...等

现在,用户需要显示他们具有特定权利的所有文档,或者文档属于公司部门,< strong>团队或项目。如何在不破坏服务器的情况下使用充满左外连接和OR的巨型查询来解决这个问题?是否值得创建另一个存储一些预先计算的数据的表?

编辑:还有一些涉及公司的继承&gt;部门&gt;团队&gt;项目。 PermissionFlagDeny标志允许进行精细调整,比如说#34;整个IT公司都可以访问这些IT文档,除了清洁女工和自助餐厅工作人员。&#34;

0 个答案:

没有答案