如果要删除表中的一条数据,那么是添加deleted的字段表示是否删除好,还是直接删除该条记录好。两种方法都有怎样的优缺点。谢谢各位大神指点!
1
maemual 2015-07-13 16:19:52 +08:00
通常情况都是使用字段标记进行假删除。
|
2
wingoo 2015-07-13 16:21:38 +08:00
标记字段
|
3
cjyang1128 OP |
4
line 2015-07-13 17:25:11 +08:00
@cjyang1128 定期转移。
|
5
mahone3297 2015-07-13 18:11:17 +08:00
其实,直接delete也好的。
只是,现在,大家都喜欢留案底,都喜欢收集数据。。。所以,就多了这么一个事情。。。增加了复杂性,个人觉得。 |
6
hging 2015-07-13 18:13:20 +08:00
看你要怎么样的需求了, 没需求谈功能都是扯淡.
比如用户-文章 这个简单的模型, 删除文章可以直接删除, 不用标记delete 用户的话删除建议就标记, 因为可能用户发表的有文章什么的. 删除了关联处理起来非常麻烦. |
7
wingoo 2015-07-13 18:58:31 +08:00
@cjyang1128 看你需求吧, 如果实在没有回溯的需要, 那也可以删除
另外, 很多业务相关的表会有个日志表, 所有操作都会在日志中记录, 那原记录也是可以删除的 |
8
redsonic 2015-07-13 19:08:30 +08:00
请教一下,两者在重负载下删除性能差别有多大?
|
9
idblife 2015-07-13 19:13:39 +08:00
字段标记,否则,嘿嘿
不是所谓留案底的事情,是性能 |
12
yangqi 2015-07-13 20:29:49 +08:00
直接删除过多还有一个就是会导致表的碎片过多,索引不够优化,会影响性能。所以软删除加定期转移还是比较好的,不过具体还要看业务了
|
13
wy315700 2015-07-13 20:30:50 +08:00
@mahone3297
比如订单,删除以后还可以恢复。这个时候就必须这么做 |
14
mahone3297 2015-07-13 21:43:07 +08:00
@wy315700 删除后为什么还要恢复呢?
|
15
wy315700 2015-07-13 21:45:55 +08:00
|
17
mouhong 2015-07-13 22:59:57 +08:00
个人感觉这个问题分两个层面来看:
1. 业务层 你的记录真的需要删除操作吗?有的时候,删除操作只是数据驱动的开发模式里的一个惯性思维。尝试更多地从业务角度进行建模。详情见: http://www.udidahan.com/2009/09/01/dont-delete-just-dont/ 2. 数据层 数据层仅管理数据,算是 Infrastructure 的一部分,所以可能会需要有软删除之类的支持 |
18
redsonic 2015-07-13 23:47:33 +08:00
我可能理解错了,以为有什么数据库内置有标记删除的动作。
现在我觉得具体要看业务了,和性能没有关系,要考虑性能也不应该动这方面的脑筋。 |
19
WildCat 2015-07-13 23:49:47 +08:00 via iPhone
Soft delete,很多 ORM 的扩展都支持,delete 的字段需要加个索引
|
20
mahone3297 2015-07-14 09:55:54 +08:00
@wy315700 这个是业务的设计的问题,我认为跟删除没什么关系。。。
|