Hobart-Ljw 2024-03-08 17:11 采纳率: 25%
浏览 4

用户等级表删除了记录,那用户关联的等级怎么处理 ?

我有两张表,分表是用户等级表、 用户表。

用户等级表 :

table  user_level (
id int,  //等级id
name  varchar ,  //等级名称
minPoints  int ,  //最少要多少积分获得
)

用户表:

table user {
id int ,  //用户id
name varchar ,  //用户名称,
level_id  int ,  //等级id,关联  user_level表的id
}

如果我删除了用户等级表的一条记录,是不是也要去把 用户表关联的所有等级id都 set level_id=null ? 业界是怎么做的呢?

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-08 17:11
    关注

    引自免费微信小程序:皆我百晓生

    在数据库设计中,当删除用户等级表的一条记录时,确实需要谨慎处理用户表中与之关联的记录。通常情况下,业界遵循的数据完整性原则会避免简单地删除还在被其他表引用的数据,以防止数据不一致或丢失业务含义。

    针对你的问题,有以下几种可能的解决方案:

    1. 逻辑删除:不直接物理删除用户等级表的记录,而是添加一个字段如 is_deleted 标记为已删除状态,这样用户表中的关联依然有效,但可以按照逻辑删除的状态来调整展示或处理逻辑。
    -- 更新 user_level 表进行逻辑删除
    UPDATE user_level SET is_deleted = 1 WHERE id = 等级id;
    
    1. 更新用户表:如果决定彻底移除该等级,并且认为所有关联此等级的用户应重置等级,你可以将用户表中受影响用户的 level_id 设置为默认等级或其他合理的值。
    -- 将用户表中关联已删除等级的用户的 level_id 设置为默认等级
    UPDATE user 
    SET level_id = 默认等级id 
    WHERE level_id = 被删除的等级id;
    
    1. 约束限制:在数据库设计阶段设置外键约束(ON DELETE CASCADE 或 ON DELETE SET NULL),这样当你删除用户等级表中的记录时,数据库会自动处理用户表中对应的记录。例如,使用 ON DELETE SET NULL 可以让所有关联的用户等级自动设为 NULL。
    -- 假设你已在数据库中设置了 ON DELETE SET NULL 的外键约束
    ALTER TABLE user
    ADD FOREIGN KEY (level_id) REFERENCES user_level(id) ON DELETE SET NULL;
    

    在这种情况下,当你删除用户等级表中的一条记录后,所有关联到该等级ID的用户表记录的 level_id 字段都会自动变为 NULL。

    选择哪种方法取决于具体的业务需求和系统设计,务必确保数据的一致性和完整性。在实际操作前,请根据实际情况评估影响范围并制定相应的回滚策略。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月8日

悬赏问题

  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。
  • ¥15 opencv图像处理,需要四个处理结果图
  • ¥15 无线移动边缘计算系统中的系统模型
  • ¥15 深度学习中的画图问题
  • ¥15 java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条