V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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 · 2021-06-17 20:00:04 +08:00 · 2285 次点击
    这是一个创建于 1236 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    评:这句话我没看懂。

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

    评:你仔细算算这个的复杂度。
    dnnta
        7
    dnnta  
       2021-06-18 00:47:19 +08:00
    1. 用户表里带上 org_id 就行了,没必要单独的组织用户表。
    2. 最多也就两条 sql 吧
    yeqizhang
        8
    yeqizhang  
       2021-06-18 01:06:34 +08:00 via Android
    和 6 一样的想法。
    一般用户在组织下是在一个,其次就算好几个,数据库对这一点点的查询毫无压力
    yeqizhang
        9
    yeqizhang  
       2021-06-18 01:08:02 +08:00 via Android
    @dnnta 还是建个中间表比较好
    fkname
        10
    fkname  
       2021-06-18 09:28:25 +08:00
    1.用户组织关系一般不会频繁变动,也就没有频繁读写的问题
    2.用户组织这种一对多的关系在用户表新增一个组织字段就行,查询的时候连表查询下取最高权限
    MadDoggy
        11
    MadDoggy  
    OP
       2021-06-18 10:31:50 +08:00
    @dnnta 用户组织是多对多的
    MadDoggy
        12
    MadDoggy  
    OP
       2021-06-18 10:33:02 +08:00
    @fkname 用户组织是多对多的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5615 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 06:42 · PVG 14:42 · LAX 22:42 · JFK 01:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.