V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
specita
V2EX  ›  问与答

数据库表有必要加一个逻辑删除字段吗?

  •  
  •   specita · 2020-09-03 18:17:24 +08:00 · 2657 次点击
    这是一个创建于 1321 天前的主题,其中的信息可能已经有所发展或是发生改变。

    rt, 公司的规范是要加。为什么要加,道理我也懂。但是就我个人的开发经历而言,更多的时候对于这种字段感觉只是个范式一样的东西,而基本没有这样实践。

    最近这个公司就强行要求加,导致目前接手的老代码,所有的 sql 都带有 where flag = 1 这种过滤条件。但在真正业务删除的时候,执行的仍然是 delete from...

    我个人观点是不用加,理由: 1.flag = 1 在 flag 不是索引的情况下(通常也不会给 flag 建索引),查询必然有个筛选的过程,就算查询命中索引,仍然要逐条过滤数据。数据表量越大,影响越大。

    2.flag 会影响唯一索引, 不允许存在两条一样的唯一索引数据,只是 flag 不相同。

    当然,加上逻辑删除的优点主要就是恢复数据方便,对于程序员找问题也比较友好,类似回收站。

    大家怎么看这个问题?

    8 条回复    2023-01-06 18:04:19 +08:00
    singerll
        1
    singerll  
       2020-09-03 18:46:08 +08:00 via Android
    业务和技术是两回事。技术问题可以投硬件解决,业务出问题怎么快速恢复才是最重要的。
    hhyvs111
        2
    hhyvs111  
       2020-09-03 18:56:13 +08:00
    删除的时候难道不是找的主键索引吗?然后搜到 flag=1

    还有逻辑删除可以在数据库压力不大的时候定时去删除数据
    zengming00
        3
    zengming00  
       2020-09-03 19:20:47 +08:00
    这个删除标志确实非常蛋疼,索引的影响没感觉出来,可能我们数据量还不够,主要是很多时候会忘了加这个标志把已删除的数据查出来
    实际上正确的做法应该是建一个一模一样的表,把要删除的数据备份到里面,然后再删除,这样不影响正常的业务实现又能做到保留数据,只是在删除数据里麻烦一点,对其它任何部分都没有影响
    xmumiffy
        4
    xmumiffy  
       2020-09-03 19:23:29 +08:00 via Android
    你全都 delete from 了 那有没有这个 flag 有啥区别
    Cbdy
        5
    Cbdy  
       2020-09-03 19:42:14 +08:00 via Android
    没有必要
    cnhongwei
        6
    cnhongwei  
       2020-09-04 10:48:25 +08:00   ❤️ 1
    这个得从业务的角度出发,比如用户就没有删除的说法,只有注销。但注销后,比如原来做唯一的业务数据如邮箱,手机号还能不能重用,得看自己的业务。有些数据,如用户的帖子,发上去,用户想删除,这就可以删除。但比如发的是不合法的帖子,可能业务上就不能直接删除,只能隐藏。总之,我的感觉就是删除是一个技术术语,和业务术语是不匹配的,业务上的操作要做更多分析,尽可能不要直接使用技术上的术语。
    specita
        7
    specita  
    OP
       2020-09-04 15:21:45 +08:00
    @cnhongwei 谢谢,确实应该更多从业务角度考虑这个字段,不同场景去做取舍。
    taest
        8
    taest  
       2023-01-06 18:04:19 +08:00
    没有必要
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1566 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:00 · PVG 08:00 · LAX 17:00 · JFK 20:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.