我碰巧在下面的场景中遇到了一些性能问题。我提供的示例大大简化,但提供了解决问题所需的足够的洞察力,并可能帮助我解决它。
假设我有一个大型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;