› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
MadDoggy
V2EX  ›  MySQL

请教一个数据库表设计的问题

  •  
  •   MadDoggy · Jun 17, 2021 · 3451 views
    This topic created in 1925 days ago, the information mentioned may be changed or developed.

    项目要实现一个授权功能,分为对用户授权和对组织授权,对组织授权同时会对组织下所有用户授权。 最简单的想法是一张用户授权表,一张组织授权表和一张组织用户对应表,但这样会有两个问题,一是在更新组织用户的时候要么就增量式更新,速度很慢;要么就删除后重新插入,频繁读写 IO 负荷会大。二是查询用户是否有授权的时候同时会去查他的组织的授权情况,这样复杂度会到组织数 x 组织授权记录数,效率也很低。有什么好的方法能改进这个情况,谢谢。

    12 replies  •  2021-06-18 10:33:02 +08:00
    akira
        1
    akira  
       Jun 17, 2021
    除非你数据量非常大,不然这 2 个都不需要去考虑。
    ccde8259
        2
    ccde8259  
       Jun 17, 2021 via iPhone
    问题类似于 feed 流的写扩散和读扩散
    MIUIOS
        3
    MIUIOS  
       Jun 17, 2021
    如果数据量不大完全不用在乎这点 IO 符合
    admin7785
        4
    admin7785  
       Jun 17, 2021 via iPhone
    RBAC 模型?感觉这俩都可以
    xuanbg
        5
    xuanbg  
       Jun 17, 2021
    RBAC,对角色授权。然后角色可以直接关联用户,也可以关联组织,也就是通过组织和用户的关系间接关联用户。
    crclz
        6
    crclz  
       Jun 18, 2021
    “一是在更新组织用户的时候要么就增量式更新,速度很慢;要么就删除后重新插入,频繁读写 IO 负荷会大。”

    评:这句话我没看懂。

    “二是查询用户是否有授权的时候同时会去查他的组织的授权情况,这样复杂度会到组织数 x 组织授权记录数,效率也很低”

    评:你仔细算算这个的复杂度。
    dnnta
        7
    dnnta  
       Jun 18, 2021
    1. 用户表里带上 org_id 就行了,没必要单独的组织用户表。
    2. 最多也就两条 sql 吧
    yungo8
        8
    yungo8  
       Jun 18, 2021 via Android
    和 6 一样的想法。
    一般用户在组织下是在一个,其次就算好几个,数据库对这一点点的查询毫无压力
    yungo8
        9
    yungo8  
       Jun 18, 2021 via Android
    @dnnta 还是建个中间表比较好
    fkname
        10
    fkname  
       Jun 18, 2021
    1.用户组织关系一般不会频繁变动,也就没有频繁读写的问题
    2.用户组织这种一对多的关系在用户表新增一个组织字段就行,查询的时候连表查询下取最高权限
    MadDoggy
        11
    MadDoggy  
    OP
       Jun 18, 2021
    @dnnta 用户组织是多对多的
    MadDoggy
        12
    MadDoggy  
    OP
       Jun 18, 2021
    @fkname 用户组织是多对多的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2732 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 73ms · UTC 02:49 · PVG 10:49 · LAX 19:49 · JFK 22:49
    ♥ Do have faith in what you're doing.