我应该删除我的MySQL记录,还是应该有一个“is_deleted”标志?
出于某种原因,有人告诉我永远不要删除任何MySQL记录。只需将其标记为已删除。我应该删除我的MySQL记录,还是应该有一个“is_deleted”标志?
例如,我正在构建一个“关注”社交网络,如Twitter。
+-------------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | NO | | NULL | |
| to_user_id | int(11) | NO | | NULL | |
+-------------+------------+------+-----+---------+----------------+
用户1如下:用户2 ...
所以,如果一个用户停止关注的人,我应该删除此记录吗?或者我应该为is_deleted创建一个列?
我一直都很喜欢创建一个blnDeleted字段,并用它来代替删除记录。如果将数据保留在数据库中,恢复或添加数据会容易得多。
你可能会认为你永远不会再需要数据,但它是可能的。即使是像追踪退订或类似的事情一样简单。
我不会说“从不删除任何MySQL记录”。这取决于。如果你想跟踪用户交互,你可以通过使用删除标记来完成。您甚至可以创建一个独立的日志记录表,使用相应的用户标识和时间戳跟踪每个操作,如“跟随”和“取消关注”,最终为您提供更多信息。
这取决于您,取决于您要存储哪些数据。并请考虑您的用户的隐私。如果他们希望他们的数据被明确删除,那就这样做。
这是一个名为“软删除”的概念。谷歌在那个时期寻找更多。但用标记标记只是一种选择 - 你也可以实际执行删除操作,但是有一个触发器,它将一个副本存储在历史记录表中。这样您就不必更新所有的选择功能来专门过滤掉已删除的记录。此外,您不必在桌面上加载太多的负载,因为您必须扫描乱抛桌面的其他记录。
归纳一下:“你不应该删除记录”大概念会(也应该)可能会得到这个问题进行封闭没有建设性,但是你给一个特定的场景:
用户1如下:用户2 ...
因此,如果一个用户停止关注某人,我应该删除此记录吗? 或者我应该为is_deleted创建一个列吗?
在你的情况下,答案取决于,后停止关注,你以后再需要知道用户1跟随的用户2.有些编造的,可能是愚蠢的,例子,其中这可能是这样的:
- ,如果它是需要更改文本用户1选举从“跟随用户2”遵循用户2时,看到“再按照用户2?真的吗?你没有汲取教训?”
- ,如果你想显示用户2谁(或合共多少)的追随者,他们已经有一段时间
的图表如果您不需要依赖于过去状态的功能用户相互关注,那么删除记录是安全的。当you ain't gonna need it时无需承担软删除的复杂性。
你有一些很好的观点和强烈的建议。 –
这取决于。想想你自己;这个记录会不会再被需要_?如果没有,请删除它。如果你认为可能,保留它。 – Bojangles
这取决于你是否可能需要删除记录 - 恢复它们,或作为诉讼中的证据等。 –
['active'flag or not?]的可能重复(http://stackoverflow.com/questions/) 102278/active-flag-or-not) –