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