用户删除掉但系统需要留档的数据应该怎么处理?

2014-09-10 13:13:06 +08:00
 node
比如用户发的一篇文章,被用户删掉之后该怎么做?在文章的表里面标记这个条目已经被删除?还是搞一个已删除的文章的表,把删除的条目挪过去?
另外文章的评论也是级联删除的,假如评论和文章没有外键关联,只是orm级别的级联删除,怎样确保在数据库中删除的一致性?
4029 次点击
所在节点    MySQL
23 条回复
dong3580
2014-09-10 13:16:27 +08:00
删除了文章评论不就不会出来了,不要在数据库中设外键什么的,用程序判断。
只删除文章就行,级联删除可能太麻烦。
窃以为,用户删除了就是删除,你还留着人家的某些信息是违法吧?
再说留着也会造成一堆垃圾信息。
cxe2v
2014-09-10 13:39:01 +08:00
@dong3580 留待有关部门检查
tushiner
2014-09-10 13:51:12 +08:00
给一个标记字段不就行了,对用户显示“已删除”。
node
2014-09-10 15:12:39 +08:00
@tushiner 标记了已删除之后每次查询的时候条件里面都得带上,真是很费神啊~
hellov22ex
2014-09-10 15:20:51 +08:00
楼主,你这不是2么,不判断难道每次删完备份下啊,3楼的方法应该最简单
node
2014-09-10 15:58:06 +08:00
@hellov22ex 原先我也是这么做的,真是很累,开发的时候每一句select,包括其它关联表的查询,都得加上这个判断条件,就像颗定时炸弹一样,一不留神就忘了啊。删除同时备份的话虽然那一下子有点烦,可好歹在开发流程里就这一步。其实我也是拿捏不准怎么样合适,假如你也做过的话,请谈谈看着方面的体会吧
hellov22ex
2014-09-10 16:12:17 +08:00
@node 如果你做的大,肯定加判断很麻烦,但是这时候备份应该更麻烦,你完全可以加个标签,在select那边判断个这个标签,这个应该是最简单的,我做的就是这样子的,没办法,没想到别的办法啊
dongbeta
2014-09-10 16:14:02 +08:00
soft delete
mahone3297
2014-09-10 16:40:20 +08:00
这个问题确实麻烦。。。
php symfony的话,doctrine是有相关插件
其他可能也有,或者需要你造轮子
原理,应该也是有个字段表示isDeleted,然后系统自动每次都帮你加上。
mengzhuo
2014-09-10 18:06:04 +08:00
这年头还有人手写SQL语句??
jucelin
2014-09-10 18:37:30 +08:00
如果用字段标记,key键怎么设 @tushiner
alexapollo
2014-09-10 19:05:04 +08:00
直接放到另外一张专用“回收站”型的数据库里~
node
2014-09-10 20:32:57 +08:00
查了一下,貌似可以建一个isDeleted=false的view来解决之前提到的那个麻烦,不过直接物理删除并挪到另一个表里去,就像 @alexapollo 说的这种,这种过程有没有缺陷呢?
alexapollo
2014-09-10 20:56:15 +08:00
@node 我记得以前有蛮多的老外讨论过这个问题,可以搜搜,SO上应该有
node
2014-09-10 21:23:07 +08:00
@alexapollo 嗯,搜到了这个 http://stackoverflow.com/questions/2549839/are-soft-deletes-a-good-idea ,不过好像没有提到删除到“回收站”表的pros和cons
frankzeng
2014-09-10 22:26:18 +08:00
建个触发器,每次删除就把文章挪到另一个表里,这个能满足你的要求,但是如果数据量大的话,性能会有问题。
belin520
2014-09-10 22:29:37 +08:00
用户被屏蔽而不是删掉就可以了。
JmmBite
2014-09-10 22:35:00 +08:00
status:{true,false} # 公开,删除
status:{1,0,-1} # 公开,草稿,删除
lygmqkl
2014-09-10 22:44:17 +08:00
deleted = 0
minuux
2014-09-11 08:54:35 +08:00
创建一张视图,直接筛掉已经删除的也可以吧?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/132691

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX