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
broli7753
V2EX  ›  MySQL

用户退出群后 是用一个状态标记好 还是直接删除用户记录好

  •  
  •   broli7753 · 102 天前 · 3271 次点击
    这是一个创建于 102 天前的主题,其中的信息可能已经有所发展或是发生改变。

    三张表 用来实现群组功能

    CREATE TABLE `group` (
      `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '群 ID',
      `type` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '群类型[1:普通群;2:企业群;]',
      `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '群名称',
      PRIMARY KEY (`id`), 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='群';
    
    
    CREATE TABLE `group_apply` (
      `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增 ID',
      `group_id` int unsigned NOT NULL DEFAULT '0' COMMENT '群组 ID',
      `user_id` int unsigned NOT NULL DEFAULT '0' COMMENT '用户 ID',
      `status` int NOT NULL DEFAULT '1' COMMENT '申请状态',
      `updated_at` datetime NOT NULL COMMENT '更新时间',
      PRIMARY KEY (`id`),
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='申请加群表';
    
    
    CREATE TABLE `group_member` (
      `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增 ID',
      `group_id` int unsigned NOT NULL DEFAULT '0' COMMENT '群组 ID',
      `user_id` int unsigned NOT NULL DEFAULT '0' COMMENT '用户 ID',
      `leader` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '成员属性[0:普通成员;1:管理员;2:群主;]', 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='群成员表';
    

    疑问

    • 用户退出群后 是用一个状态标记好 还是直接 删除 group_member 表的 用户记录好
    19 条回复    2024-08-14 18:41:25 +08:00
    amrom
        1
    amrom  
       102 天前
    肯定是给一个标记好,考虑到后续的业务,比如,新用户首单优惠这种的,有了标记就可以避免被重复注册薅羊毛
    corcre
        2
    corcre  
       102 天前
    我应该会另开一个表记录退群操作, 然后删除记录
    Twnysta
        3
    Twnysta  
       102 天前
    可以加一个 history 表
    历史用户记录都在里面
    mudi
        4
    mudi  
       102 天前
    标记吧,防止需要恢复,真删就真没了
    broli7753
        5
    broli7753  
    OP
       102 天前
    标记的弊端就是,一堆脏数据。
    fFeeOps
        6
    fFeeOps  
       102 天前
    @broli7753 #5 开个单独的表来记录
    ciki
        7
    ciki  
       102 天前
    单独做个日志表
    lasuar
        8
    lasuar  
       102 天前
    JC:把這個群的歷史成員全都給我調出來,包括退群的,看一下 xx 的發言記錄
    WX:好的。
    broli7753
        9
    broli7753  
    OP
       102 天前
    @fFeeOps
    @ciki
    @Twnysta

    各位佬 也是支持 二楼做法么。 先删除 保持群内成员的准确性, 然后再记录下来 方便后期查看
    broli7753
        10
    broli7753  
    OP
       102 天前
    @lasuar 这个需求 其实标记更加合适。 只要加入过这个群的。 基本跑不了。
    kneo
        11
    kneo  
       102 天前 via Android
    随便。看你现有架构怎么修改方便。
    加标记需要你保证每次查询都设置正确的条件,容易出 bug ,也有一定程度性能影响。
    kk2syc
        12
    kk2syc  
       102 天前
    考虑合规的话就不能避免脏数据,另外开表记录后期也是脏,不如提前规划好条件字段标记匹配,营销活动另外做关联表,间隔一段时间清洗数据、分表操作,旧数据打包封入冷存储备份
    buchikoma
        13
    buchikoma  
       102 天前
    @broli7753 #5 定期归档就行,这块成本很低
    ETiV
        14
    ETiV  
       101 天前 via iPhone
    删了之后,群里这个用户的聊天记录咋显示,不显示昵称、头像什么的了吗?
    drymonfidelia
        15
    drymonfidelia  
       101 天前
    单独一个数据库,存档全部操作记录(加群退群改名什么的全要存),线上表直接删除啊
    你们都没做过大一点的项目吗
    现在查数据 每个用户在哪个时间改成了哪个昵称都要求你能查出来
    swulling
        16
    swulling  
       101 天前 via iPhone
    用历史替代标记
    whileFalse
        17
    whileFalse  
       101 天前 via Android
    @ETiV 难道你会给群用户一个单独的群内 id ?如果还用 uid 有啥关系。
    angryfish
        18
    angryfish  
       101 天前
    看自己的需求咯,如果是内部系统,不涉及审计,直接删除。
    如果外部用户的,还是做标志吧。日志表挺麻烦的。
    broli7753
        19
    broli7753  
    OP
       101 天前
    分析了下自己的业务场景,决定用一个状态标记处理。 简单直接, 因为用户量不算大,查询性能也影响不了多少。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2639 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:28 · PVG 19:28 · LAX 03:28 · JFK 06:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.