首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL问题帐户权限系统

SQL问题帐户权限系统
EN

Stack Overflow用户
提问于 2021-02-11 10:20:00
回答 1查看 39关注 0票数 1

我正试图建立先进的账户许可制度。

  1. 帐户可以通过"account_permission"表(直接)拥有一个权限,
  2. 帐户可以是一个组的一部分,该组可以具有权限-> "account_group""permission_group"表(应该称为"permission_group"表)。

问题

我需要编写Select命令,该命令将返回与帐户相关的所有权限(包括组权限),其中帐户是

我有个好例子,但我很确定这不是一个最佳的表演练习.并且在我的示例中复制了"account_id“

代码语言:javascript
复制
    SELECT
      t1.*
    FROM
      permission AS t1
      LEFT JOIN
        account_permission AS t2
        ON t1.id = t2.permission_id
      LEFT JOIN
        permission_group AS t3
        ON t1.id = t3.permission_id
    WHERE
      t2.account_id = 'a518f2fb-7e46-4c0c-9428-c87eac6674e8'
      OR t3.group_id IN
      (
        SELECT
          group_id
        FROM
          account_group
        WHERE
          account_id = 'a518f2fb-7e46-4c0c-9428-c87eac6674e8'
      );

数据库图

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-11 11:35:38

看起来,您的代码也可以生成副本。我建议把这写成:

代码语言:javascript
复制
SELECT p.*
FROM permission p
WHERE EXISTS (SELECT 1
              FROM account_permission ap
              WHERE ap.permission_id = p.id AND
                    ap.account_id = 'a518f2fb-7e46-4c0c-9428-c87eac6674e8'
             ) OR
      EXISTS (SELECT 1
              FROM permission_group pg JOIN
                   account_group ag
                   ON pg.group_id = ag.group_id
              WHERE pg.permission_id = p.id AND
                    ag.account_id = 'a518f2fb-7e46-4c0c-9428-c87eac6674e8'
             );

这个版本不能返回重复的(嗯,至少由于join的原因是重复的;我想permissions可能有重复的)。

然后,为了提高性能,您需要以下索引:

  • account_perimission(permission_id, account_id)
  • permission_group(permission_id, group_id)
  • account_group(group_id, account_id)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66152767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档