数据库表有必要加一个逻辑删除字段吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
specita
V2EX    问与答

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

  •  < href="Javascript:" Onclick="downVoteTopic(703974);" class="vote">
  •   specita 2020-09-03 18:17:24 +08:00 3444 次点击
    这是一个创建于 1864 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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
    这个删除标志确实非常蛋疼,索引的影响没感觉出来,可能我们数据量还不够,主要是很多时候会忘了加这个标志把已删除的数据查出来
    实际上正确的做法应该是建一个一模一样的表,把要删除的数据备份到里面,然后再删除,这样不影响正常的业务实现又能做到保留数据,只是在删除数据里麻烦一点,对其它任何部分都没有影响
    106npo
        4
    106npo  
       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     Solana     1104 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 18:09 PVG 02:09 LAX 11:09 JFK 14:09
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86