2012-03-27 62 views
7

我一直有一种奇怪的感觉,在我的内心中实际上是从某些类型的表中删除行。删除MySql行,或者标记为“死”?

例如,如果我有一张用户表...当他们删除他们的帐户,而不是完全删除他们的行,我一直标记为“死”或无效。如果我再次需要它,这可以让我保留它们存在的记录。

在这种情况下 - 考虑性能,开销等 - 我应该删除该行还是简单地标记为不活动?

哪个更“常见”?

回答

4

就个人而言,我几乎总是为你描述使用 “软删除”。

如果空间是一个问题,我会找一份工作,定期清理软删除的记录,删除一段时间之后。

3

也许你可以将不活动的MySQL记录移动到一个单独的表,旨在保存非活动帐户?这样,如果需要,可以简单地将它们移回,或者在数据库大小成为问题时删除表。

3

从数据库中永久删除数据非常有价值。标记为dead

我通常给这种情况的状态。在这种模式

  1. 0无效
  2. 1活动
  3. 2已移除
+0

我喜欢基于数字的方法..保存在一点点的开销:) – johnnietheblack 2012-03-27 16:51:17

+0

@johnnietheblack,是啊'tinyint'就够了 – Starx 2012-03-27 16:54:23

1

除了“软”删除,另一种解决方案是使用“审计表”。我最近在dba.stackexchange.com上问了what they were

审计表通常用于记录的动作,例如插入/更新/删除,在第二表上执行,可能存储新的值和旧值,时间等

它们可以使用触发器在一个实施直截了当的方式。

优点:

  • “未使用”的数据是在一个单独的表
  • 很容易把从细粒至粗粒电平的细节旋钮
  • 它可以是有效的空间明智的,取决于具体的实施

缺点:

  • ,因为数据是在一个单独的表,可能会导致该行是“未删除”的情况下键冲突
  • 可能有效的空间明智的,取决于具体的实施
1

这个问题让我想起了这个有趣的anecdote。我的观点:在硬删除和软删除之间进行选择时需要考虑很多因素,因此没有拇指规则会告诉您要选择哪一个。