我一直有一种奇怪的感觉,在我的内心中实际上是从某些类型的表中删除行。删除MySql行,或者标记为“死”?
例如,如果我有一张用户表...当他们删除他们的帐户,而不是完全删除他们的行,我一直标记为“死”或无效。如果我再次需要它,这可以让我保留它们存在的记录。
在这种情况下 - 考虑性能,开销等 - 我应该删除该行还是简单地标记为不活动?
哪个更“常见”?
我一直有一种奇怪的感觉,在我的内心中实际上是从某些类型的表中删除行。删除MySql行,或者标记为“死”?
例如,如果我有一张用户表...当他们删除他们的帐户,而不是完全删除他们的行,我一直标记为“死”或无效。如果我再次需要它,这可以让我保留它们存在的记录。
在这种情况下 - 考虑性能,开销等 - 我应该删除该行还是简单地标记为不活动?
哪个更“常见”?
就个人而言,我几乎总是为你描述使用 “软删除”。
如果空间是一个问题,我会找一份工作,定期清理软删除的记录,删除一段时间之后。
也许你可以将不活动的MySQL记录移动到一个单独的表,旨在保存非活动帐户?这样,如果需要,可以简单地将它们移回,或者在数据库大小成为问题时删除表。
从数据库中永久删除数据非常有价值。标记为dead
。
我通常给这种情况的状态。在这种模式
0
无效1
活动2
已移除除了“软”删除,另一种解决方案是使用“审计表”。我最近在dba.stackexchange.com上问了what they were。
审计表通常用于记录的动作,例如插入/更新/删除,在第二表上执行,可能存储新的值和旧值,时间等
它们可以使用触发器在一个实施直截了当的方式。
优点:
缺点:
这个问题让我想起了这个有趣的anecdote。我的观点:在硬删除和软删除之间进行选择时需要考虑很多因素,因此没有拇指规则会告诉您要选择哪一个。
我喜欢基于数字的方法..保存在一点点的开销:) – johnnietheblack 2012-03-27 16:51:17
@johnnietheblack,是啊'tinyint'就够了 – Starx 2012-03-27 16:54:23