出于某种原因,有人告诉我永远不要删除任何MySQL记录。只需将其标记为已删除即可。
例如,我正在建立一个“关注”的社交网络,比如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创建一个列?
发布于 2011-11-26 07:35:05
这是一个称为“软删除”的概念。在谷歌上搜索这个词,可以找到更多。但是使用标志进行标记只是一种选择--您也可以实际执行删除操作,但需要一个触发器来在历史表中存储一个副本。这样,您就不必更新所有的select函数来专门过滤掉删除的记录。而且,您的表上不会有太多的负载,因为您必须扫描散落在表中的其他记录。
发布于 2011-11-26 08:20:41
概括“你永远不应该删除记录”这一更大的概念可能(也应该)结束这个问题,因为它没有建设性,但你已经给出了一个具体的场景:
用户%1关注用户% 2...
那么,如果一个用户停止关注某人,我应该删除此记录吗?或者我应该为is_deleted创建一个列?
在你的案例中,答案取决于在取消关注之后,你是否需要再次知道用户1关注了用户2。一些虚构的、可能很愚蠢的例子可能是这样的:
追随者的图表
如果您不需要依赖于用户相互关注的过去状态的功能,那么删除记录是安全的。当you ain't gonna need it时,不需要承担软删除的复杂性。
发布于 2011-11-26 07:34:43
我不会说“永远不要删除任何MySQL记录”。那得看情况。如果你想跟踪用户交互,你可以通过使用删除标志来实现。您甚至可以创建一个单独的日志表,它使用适当的用户id和时间戳跟踪每个操作,如“跟随”和“取消跟随”,这将在最后为您提供更多信息。
这取决于您,取决于您想要存储哪些数据。请考虑用户的隐私。如果他们想显式删除他们的数据,那么就这样做。
https://stackoverflow.com/questions/8275102
复制相似问题