关于在数据库中删除记录的小疑问

2015-07-13 16:17:33 +08:00
 cjyang1128

如果要删除表中的一条数据,那么是添加deleted的字段表示是否删除好,还是直接删除该条记录好。两种方法都有怎样的优缺点。谢谢各位大神指点!

2231 次点击
所在节点    问与答
20 条回复
maemual
2015-07-13 16:19:52 +08:00
通常情况都是使用字段标记进行假删除。
wingoo
2015-07-13 16:21:38 +08:00
标记字段
cjyang1128
2015-07-13 17:05:43 +08:00
@maemual
@wingoo 那么会不会导致整张表变得很大,比如是新增操作发生的很平常的表
line
2015-07-13 17:25:11 +08:00
@cjyang1128 定期转移。
mahone3297
2015-07-13 18:11:17 +08:00
其实,直接delete也好的。
只是,现在,大家都喜欢留案底,都喜欢收集数据。。。所以,就多了这么一个事情。。。增加了复杂性,个人觉得。
hging
2015-07-13 18:13:20 +08:00
看你要怎么样的需求了, 没需求谈功能都是扯淡.
比如用户-文章 这个简单的模型,
删除文章可以直接删除, 不用标记delete
用户的话删除建议就标记, 因为可能用户发表的有文章什么的. 删除了关联处理起来非常麻烦.
wingoo
2015-07-13 18:58:31 +08:00
@cjyang1128 看你需求吧, 如果实在没有回溯的需要, 那也可以删除
另外, 很多业务相关的表会有个日志表, 所有操作都会在日志中记录, 那原记录也是可以删除的
redsonic
2015-07-13 19:08:30 +08:00
请教一下,两者在重负载下删除性能差别有多大?
idblife
2015-07-13 19:13:39 +08:00
字段标记,否则,嘿嘿
不是所谓留案底的事情,是性能
herozzm
2015-07-13 20:26:17 +08:00
@idblife 能解释下吗?
redsonic
2015-07-13 20:27:19 +08:00
@idblife 有确认过性能差别吗?
yangqi
2015-07-13 20:29:49 +08:00
直接删除过多还有一个就是会导致表的碎片过多,索引不够优化,会影响性能。所以软删除加定期转移还是比较好的,不过具体还要看业务了
wy315700
2015-07-13 20:30:50 +08:00
@mahone3297
比如订单,删除以后还可以恢复。这个时候就必须这么做
mahone3297
2015-07-13 21:43:07 +08:00
@wy315700 删除后为什么还要恢复呢?
wy315700
2015-07-13 21:45:55 +08:00
@mahone3297
以前,08年左右,没有网银,上京东买东西都是汇款的,然后,汇款有时候要三天。
但是京东当时一个订单2天没有支付就删除了。
然后收到汇款以后订单会被恢复。
idblife
2015-07-13 22:38:57 +08:00
@herozzm
@redsonic
update和delete的性能差别,批量物理删除是可控的
交给应用程序就有可能出问题
mouhong
2015-07-13 22:59:57 +08:00
个人感觉这个问题分两个层面来看:

1. 业务层

你的记录真的需要删除操作吗?有的时候,删除操作只是数据驱动的开发模式里的一个惯性思维。尝试更多地从业务角度进行建模。详情见: http://www.udidahan.com/2009/09/01/dont-delete-just-dont/

2. 数据层

数据层仅管理数据,算是 Infrastructure 的一部分,所以可能会需要有软删除之类的支持
redsonic
2015-07-13 23:47:33 +08:00
我可能理解错了,以为有什么数据库内置有标记删除的动作。
现在我觉得具体要看业务了,和性能没有关系,要考虑性能也不应该动这方面的脑筋。
WildCat
2015-07-13 23:49:47 +08:00
Soft delete,很多 ORM 的扩展都支持,delete 的字段需要加个索引
mahone3297
2015-07-14 09:55:54 +08:00
@wy315700 这个是业务的设计的问题,我认为跟删除没什么关系。。。

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

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

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

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

© 2021 V2EX