不做显式删除,而用 status=0 代替,是好的实践么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
27
V2EX    问与答

不做显式删除,而用 status=0 代替,是好的实践么?

  •  
  •   27 2017-05-23 15:48:57 +08:00 5895 次点击
    这是一个创建于 3130 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这样一来,用代码生成器生成的 sql 语句全部都不能用,都得重新写

    觉得十分麻烦,大家都是这样用的吗?

    26 条回复    2017-05-24 18:09:01 +08:00
    mkeith
        1
    mkeith  
       2017-05-23 16:08:54 +08:00
    一般 orm 支持软删除的吧
    shiny
        2
    shiny  
    PRO
       2017-05-23 16:11:23 +08:00
    BOSS:小王,把上次删除的恢复下
    shiny
        3
    shiny  
    PRO
       2017-05-23 16:13:44 +08:00
    记得很久以前看到过一个观点:真实世界是没有删除的。订单作废,用户禁用,员工离职,文稿废弃,优惠券作废。所以 SQL 里面 DELETE 在业务场景里都不应该出现。
    U7Q5tLAex2FI0o0g
        4
    U7Q5tLAex2FI0o0g  
       2017-05-23 16:15:06 +08:00
    挺好的
    murmur
        5
    murmur  
       2017-05-23 16:15:21 +08:00
    如果是面试的话应该是大量删除触发索引重建,而现在数据库空间不值钱索引重建一次卡的 cpu 和 io 值钱
    shoaly
        6
    shoaly  
       2017-05-23 16:28:41 +08:00
    laravel 在 orm 里面 是不会查询出软删除的数据的.
    提供一次后悔的机会.. 万一呢, 万一傻逼了呢
    otakustay
        7
    otakustay  
       2017-05-23 17:12:11 +08:00
    你只理解数据比钱更值钱,就明白要怎么做了
    F281M6Dh8DXpD1g2
        8
    F281M6Dh8DXpD1g2  
       2017-05-23 17:13:37 +08:00
    数据都删了还分析啥
    ovear
        9
    ovear  
       2017-05-23 17:19:03 +08:00
    第一是安全。。第二是恩。。你懂得
    CodeDrift
        10
    CodeDrift  
       2017-05-23 17:22:05 +08:00
    很想知道 django 有没有这个软删除。。
    helloworldwt
        11
    helloworldwt  
       2017-05-23 17:25:45 +08:00
    一般都是逻辑删除,不实际删除的。在数据库里使用一个状态来表示
    zyue
        12
    zyue  
       2017-05-23 17:28:47 +08:00
    我建的表都有个 is_deleted tinyint 字段
    wc951
        13
    wc951  
       2017-05-23 17:45:17 +08:00 via Android
    那要看是什么数据了,也不是所有业务场景都需要留着过期数据
    yghack
        14
    yghack  
       2017-05-23 17:55:34 +08:00
    生产环境不能有 DELETE 权限
    zhenjiachen
        15
    zhenjiachen  
       2017-05-23 17:56:29 +08:00
    deletedAt 日期格式,这个字段好一点,你 status 不知道什么时候删除的,查询直接使用 deletedAt is not null 就好
    ixo
        16
    ixo  
       2017-05-23 17:59:54 +08:00
    必要
    @zhenjiachen 我一般是配合 updateAt 这个字段判断删除时间。
    solee
        17
    solee  
       2017-05-23 18:06:28 +08:00
    很好啊 我们也是配合 updatedAt 字段使用 软删除
    Mogugugugu
        18
    Mogugugugu  
       2017-05-23 18:06:33 +08:00
    逻辑删除,不会无理删除的.一方面避免误操作,另一方面 数据无价,无论用来干啥...
    cloverstd
        19
    cloverstd  
       2017-05-23 18:09:51 +08:00
    软删除,多对多联查的很麻烦啊
    Ouyangan
        20
    Ouyangan  
       2017-05-23 19:22:57 +08:00
    你改下 代码生成器
    mingyun
        21
    mingyun  
       2017-05-23 23:07:18 +08:00
    laravel 使用 deleted_at 表示软删除
    ihuotui
        22
    ihuotui  
       2017-05-24 00:49:12 +08:00 via iPhone
    没有删除权限 并发删除会死锁 索引会重建
    msg7086
        23
    msg7086  
       2017-05-24 00:58:17 +08:00
    @shiny 真实世界里,敏感的文书需要绞碎,敏感的磁盘需要砸烂,不该留下的照片需要烧掉……
    geelaw
        24
    geelaw  
       2017-05-24 01:53:46 +08:00
    一些法律法规要求数据必须保留一段时间以供文书提出。例如

    http://baike.baidu.com/item/%E5%85%AC%E5%AE%89%E9%83%A8%E4%BB%A4%E7%AC%AC82%E5%8F%B7

    公安部令第 82 号第十三条,要求数据至少保留 60 日。
    orvice
        25
    orvice  
       2017-05-24 01:56:54 +08:00
    以前公司,线上程序 99%的地方,都不会有 delete 权限,业务上全部用 status 来做删除

    你要 delete 权限的时候要越过 leader,dba2 座大山。。
    shiny
        26
    shiny  
    PRO
       2017-05-24 18:09:01 +08:00
    @msg7086 在自己的业务系统里,出现这种情况的概率几乎为 0。 现在的观点是 DELETE 被滥用了,并非绝对不应该使用 DELETE。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3280 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 00:39 PVG 08:39 LAX 16:39 JFK 19:39
    Do have faith in what you're doing.
    ubao msn 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