在 web 开发中,以那种删除数据库中文章的方式最优雅 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Mrkon
V2EX    Python

在 web 开发中,以那种删除数据库中文章的方式最优雅

  •  
  •   Mrkon 2018-05-22 09:36:04 +08:00 6308 次点击
    这是一个创建于 2709 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在学习 web 开发,想删除用户文章,以那种方式为最优雅的处理方式啊
    我的想法:
    1.通过文章标题的 hash 值
    2.标题和时间戳结合
    3.标题和 ID 值结合

    如果可以的话,请 V 友指出你们所用的方式,以及在哪里可以学到类似这种经验的书或文章。谢谢大家
    第 1 条附言    2018-05-22 10:43:15 +08:00
    谢谢大家,问题已经解决:
    可以通过文章的 ID 值查找进行删除,但是普遍的删除都为软删除(增加一个判断字段进行打标,然后可以使用定时任务,如 celery,对时间较长的打标文章进行删除)
    第 2 条附言    2018-05-24 11:05:53 +08:00
    根据 @sobigfish 所述的方式更好。

    “”“软删除用时间戳 deleted_at (timestamp) 更合适而不是单纯的 bool,因为同时记录了删除时间(除非另有 log/表记录删除时间等信息)”“”
    40 条回复    2018-05-22 21:49:47 +08:00
    jennifertxwoodma
        1
    jennifertxwoodma  
       2018-05-22 09:37:42 +08:00
    加一个字段,delete 删除就改成 true
    nullcc
        2
    nullcc  
       2018-05-22 09:37:57 +08:00
    删除用户数据一般就是标记一下,不会真正做删除
    KimJongun
        3
    KimJongun  
       2018-05-22 09:40:36 +08:00
    drop rable + create table
    Mrkon
        4
    Mrkon  
    OP
       2018-05-22 09:41:16 +08:00
    @jennifertxwoodma 那相当于用户是不可以删除自己文章吗?只是用 delete 来决定是否隐藏文章,是这样吗?
    但是我现在还停留在设计字段,在数据库中查找这一篇文章的阶段。。。
    Mrkon
        5
    Mrkon  
    OP
       2018-05-22 09:42:57 +08:00
    @nullcc
    了解了,谢谢。
    Mrkon
        6
    Mrkon  
    OP
       2018-05-22 09:45:35 +08:00
    @KimJongun 这种方式是一个用户一个表的类型吗?我是把所有用户的文章放在一个表里面的,这样设计是否合理啊
    dovme
        7
    dovme  
       2018-05-22 09:47:10 +08:00
    标记就可以,对用户来说,这就是删掉了.
    Mazexal
        8
    Mazexal  
       2018-05-22 09:51:30 +08:00
    =.= 一般都是软删除的
    Mrkon
        9
    Mrkon  
    OP
       2018-05-22 09:51:48 +08:00
    @dovme 谢谢,但是一般我需要通过怎样的方式找到表中的这个值啊。
    Mrkon
        10
    Mrkon  
    OP
       2018-05-22 09:52:42 +08:00
    @Mazexal 我今天是第一次知道,一直都是直接删除,(⊙⊙)
    SbloodyS
        11
    SbloodyS  
       2018-05-22 09:57:17 +08:00
    逻辑删除代替物理删除~
    VoidChen
        12
    VoidChen  
       2018-05-22 09:58:02 +08:00
    话说为什么要软删除呢(标记下就当删除了)
    InternetExplorer
        13
    InternetExplorer  
       2018-05-22 10:00:27 +08:00
    文章表加个自增 id,根据自增 id 删除就好了,你是担心删错文章吗
    5dkgansm
        14
    5dkgansm  
       2018-05-22 10:02:24 +08:00
    不会有人以为注销了帐号真的是删除了吧?
    Mrkon
        15
    Mrkon  
    OP
       2018-05-22 10:06:19 +08:00
    @InternetExplorer 恩恩,是的,我是准备根据标题找到文章,然后删除这一行,然后用户可能会用相同的标题,就迷茫了。
    jennifertxwoodma
        16
    jennifertxwoodma  
       2018-05-22 10:09:38 +08:00
    @KimJongun 头像还行
    clino
        17
    clino  
       2018-05-22 10:12:12 +08:00
    楼主列出的 123 怎么理解?好像和删除并没有关系吧?
    Mrkon
        18
    Mrkon  
    OP
       2018-05-22 10:15:57 +08:00
    @clino 我还停留在数据库查找的阶段。。。
    weizhen199
        19
    weizhen199  
       2018-05-22 10:26:07 +08:00
    truncate 是最爽的
    joeke
        20
    joeke  
       2018-05-22 10:29:21 +08:00
    一般都是软删除吧
    summerwar
        21
    summerwar  
       2018-05-22 10:30:10 +08:00
    文章是个表,里面有自增 ID 和用户 id,用户 ID 用来区分谁发的文章,自增 ID 在删除的时候用,别用标题查询删除,因为会重复,不是 unique,容易误删标题一样的文章,删除的时候用个 status 来表示,删除为 0,不删除为 1。获取文章列表的时候,添加个过滤规则 status ==1 就行了。
    Patrick95
        22
    Patrick95  
       2018-05-22 10:31:06 +08:00
    你说的三点我没怎么理解,一般来讲通过文章 ID 来进行删除就可以。
    DELETE FROM table WHERE id = [:id];
    或者软删除
    UPDATE table SET deleted = 1 WHERE id = [:id];
    balamiao
        23
    balamiao  
       2018-05-22 10:32:29 +08:00
    一般都不是立即删除,属于打标,在查询逻辑中剔除掉删除的即可。

    可以配合后台定时任务,处理比如 30 天以前已经打标删除的文章!
    zzzwwwlll
        24
    zzzwwwlll  
       2018-05-22 10:35:55 +08:00
    你这想的太复杂了,直接根据 id 删除就行
    Mrkon
        25
    Mrkon  
    OP
       2018-05-22 10:38:16 +08:00
    @Patrick95
    @summerwar
    @balamiao
    @zzzwwwlll
    谢谢,问题我已经明白了,直接通过 ID 软删除。
    wemore
        26
    wemore  
       2018-05-22 10:54:03 +08:00 via Android
    有个疑问哈,逻辑删除的话那对需要删除表的改查都要加个查询字段,会不会太麻烦了,有啥办法能解决这个问题。
    iConnect
        27
    iConnect  
       2018-05-22 10:55:23 +08:00
    伪删除的做法,面向欧盟用户的话,是违反 GDPR 的。
    ycz0926
        28
    ycz0926  
       2018-05-22 11:09:48 +08:00
    加个 status,不要真的删了,一来破坏了表与表间的关联,二来嘛,数据还是挺重要的,这东西决定了现代互联网的拓扑和连接方式
    ycz0926
        29
    ycz0926  
       2018-05-22 11:10:20 +08:00
    @ycz0926 没数据,你还怎么玩,是不?
    run2
        30
    run2  
       2018-05-22 11:23:39 +08:00   2
    @jennifertxwoodma #1 @Patrick95 #22
    软删除用时间戳 deleted_at (timestamp) 更合适而不是单纯的 bool,因为同时记录了删除时间(除非另有 log/表记录删除时间等信息)
    soho176
        31
    soho176  
       2018-05-22 11:30:07 +08:00
    https://www.douban.com/group/topic/36082266/ 是这种?用户注销了,但是用户数据却保留了
    Mrkon
        32
    Mrkon  
    OP
       2018-05-22 15:09:12 +08:00
    @soho176 是用户自己删除他的文章。现在才发现大家都是用的软删除,汗。。
    jennifertxwoodma
        33
    jennifertxwoodma  
       2018-05-22 18:04:23 +08:00
    @sobigfish 嗯嗯,如果空间足够大的话,你的做法比较好。
    andylsr
        34
    andylsr  
       2018-05-22 18:37:46 +08:00 via Android
    @KimJongun 这是什么路子。。。
    andylsr
        35
    andylsr  
       2018-05-22 18:38:10 +08:00 via Android
    @Mrkon 互联网企业不存在删除操作。。。
    qf19910623
        36
    qf19910623  
       2018-05-22 18:39:25 +08:00
    @Mrkon 写程序的原则是尽可能给自己留后路
    CoderGeek
        37
    CoderGeek  
       2018-05-22 18:41:36 +08:00
    isdel 不可能真正删除用户的文章 而且 一般还会保存几个历史版本 QAQ
    loveCoding
        38
    loveCoding  
       2018-05-22 18:46:01 +08:00
    逻辑删除
    lk1ngaa7
        39
    lk1ngaa7  
       2018-05-22 19:33:17 +08:00
    软删除
    Reficul
        40
    Reficul  
       2018-05-22 21:49:47 +08:00 via Android
    created at,updated at 和 deleted at
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5333 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 07:11 PVG 15:11 LAX 00:11 JFK 03:11
    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