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

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

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

    这样一来,用代码生成器生成的 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  
       2017-05-23 16:11:23 +08:00
    BOSS:小王,把上次删除的恢复下
    shiny
        3
    shiny  
       2017-05-23 16:13:44 +08:00
    记得很久以前看到过一个观点:真实世界是没有删除的。订单作废,用户禁用,员工离职,文稿废弃,优惠券作废。所以 SQL 里面 DELETE 在业务场景里都不应该出现。
    littleylv
        4
    littleylv  
       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
    你只要理解数据比钱更值钱,就明白要怎么做了
    liprais
        8
    liprais  
       2017-05-23 17:13:37 +08:00
    数据都删了还分析啥
    ovear
        9
    ovear  
       2017-05-23 17:19:03 +08:00
    第一是安全。。第二是恩。。你懂得
    Anybfans
        10
    Anybfans  
       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 就好
    microget
        16
    microget  
       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  
       2017-05-24 18:09:01 +08:00
    @msg7086 在自己的业务系统里,出现这种情况的概率几乎为 0。 现在的观点是 DELETE 被滥用了,并非绝对不应该使用 DELETE。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   877 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:59 · PVG 05:59 · LAX 13:59 · JFK 16:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.