目前正在处理项目,我们必须为大多数用户(用户角色)实施软删除.我们决定在数据库中的每个表上添加"is_deleted ='0'"字段,如果特定用户角色点击特定记录上的删除按钮,则将其设置为"1".
对于将来的维护,每个SELECT查询都需要确保它们不包含is_deleted ='1'的记录.
是否有更好的解决方案来实现软删除?
更新:我还应该注意到,我们有一个Audit数据库,用于跟踪Application数据库中所有表/字段的更改(字段,旧值,新值,时间,用户,ip).
我出于好奇而问这个问题.基本上我的问题是当你有一个数据库需要一个行条目来做一些像旗帜一样的东西时,最佳做法是什么?一个很好的例子就是堆栈溢出上的徽章,或者bugzilla中的操作系统字段.可以为给定条目设置标志的任何子集.
通常,我做c和c ++工作,所以我的直觉反应是使用无符号整数字段作为一组可以翻转的位......但我知道这不是一个好的解决方案,原因有几个.其中最明显的是比例能力,我可以拥有多少旗帜的硬上限.
我还可以考虑其他几种解决方案,这些解决方案可以更好地扩展,但会出现性能问题,因为它们需要多次选择才能获得所有信息.
那么,做到这一点的"正确"方法是什么?
出于某种原因,有人告诉我永远不要删除任何 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 | |
+-------------+------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
用户 1 关注用户 2...
那么,如果一个用户停止关注某人,我应该删除这条记录吗?或者我应该为 is_deleted 创建一个列?
考虑一个带有7列的索引MySQL表,不断查询和写入.在通过将数据拆分到其他表中来提高性能之前,应该允许此表包含哪些可行行数?