V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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 · May 22, 2018 · 6627 views
    This topic created in 2904 days ago, the information mentioned may be changed or developed.
    最近在学习 web 开发,想删除用户文章,以那种方式为最优雅的处理方式啊
    我的想法:
    1.通过文章标题的 hash 值
    2.标题和时间戳结合
    3.标题和 ID 值结合

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

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

    可以配合后台定时任务,处理比如 30 天以前已经打标删除的文章!
    zzzwwwlll
        24
    zzzwwwlll  
       May 22, 2018
    你这想的太复杂了,直接根据 id 删除就行
    Mrkon
        25
    Mrkon  
    OP
       May 22, 2018
    @Patrick95
    @summerwar
    @balamiao
    @zzzwwwlll
    谢谢,问题我已经明白了,直接通过 ID 软删除。
    wemore
        26
    wemore  
       May 22, 2018 via Android
    有个疑问哈,逻辑删除的话那对需要删除表的改查都要加个查询字段,会不会太麻烦了,有啥办法能解决这个问题。
    iConnect
        27
    iConnect  
       May 22, 2018
    伪删除的做法,面向欧盟用户的话,是违反 GDPR 的。
    ycz0926
        28
    ycz0926  
       May 22, 2018
    加个 status,不要真的删了,一来破坏了表与表间的关联,二来嘛,数据还是挺重要的,这东西决定了现代互联网的拓扑和连接方式
    ycz0926
        29
    ycz0926  
       May 22, 2018
    @ycz0926 没数据,你还怎么玩,是不?
    run2
        30
    run2  
       May 22, 2018   ❤️ 2
    @jennifertxwoodma #1 @Patrick95 #22
    软删除用时间戳 deleted_at (timestamp) 更合适而不是单纯的 bool,因为同时记录了删除时间(除非另有 log/表记录删除时间等信息)
    soho176
        31
    soho176  
       May 22, 2018
    https://www.douban.com/group/topic/36082266/ 是这种?用户注销了,但是用户数据却保留了
    Mrkon
        32
    Mrkon  
    OP
       May 22, 2018
    @soho176 是用户自己删除他的文章。现在才发现大家都是用的软删除,汗。。
    jennifertxwoodma
        33
    jennifertxwoodma  
       May 22, 2018
    @sobigfish 嗯嗯,如果空间足够大的话,你的做法比较好。
    andylsr
        34
    andylsr  
       May 22, 2018 via Android
    @KimJongun 这是什么路子。。。
    andylsr
        35
    andylsr  
       May 22, 2018 via Android
    @Mrkon 互联网企业不存在删除操作。。。
    qf19910623
        36
    qf19910623  
       May 22, 2018
    @Mrkon 写程序的原则是尽可能给自己留后路
    CoderGeek
        37
    CoderGeek  
       May 22, 2018
    isdel 不可能真正删除用户的文章 而且 一般还会保存几个历史版本 QAQ
    loveCoding
        38
    loveCoding  
       May 22, 2018
    逻辑删除
    lk1ngaa7
        39
    lk1ngaa7  
       May 22, 2018
    软删除
    Reficul
        40
    Reficul  
       May 22, 2018 via Android
    created at,updated at 和 deleted at😂😂
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2506 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 102ms · UTC 09:57 · PVG 17:57 · LAX 02:57 · JFK 05:57
    ♥ Do have faith in what you're doing.