25 php mysql database-design soft-delete
问题
在处理产品和订单的Web应用程序中,我希望维护前员工(用户)与他们处理的订单之间的信息和关系.我想维护过时的产品和包含这些产品的订单之间的信息和关系.
但是,我希望员工能够解除管理界面的混乱,例如删除以前的员工,过时的产品,过时的产品组等.
我正在考虑实现软删除.那么,人们通常如何做到这一点?
我的直接想法
我的第一个想法是flag_softdeleted在应该是软删除的每个对象表中粘贴一个" TINYINT NOT NULL DEFAULT 0"列.或者可以使用时间戳代替?
然后,我在每个相关的GUI中提供"显示已删除"或"取消删除"按钮.单击此按钮,您将在结果中包含软删除的记录.每个删除的记录都有一个"恢复"按钮.这有意义吗?
你的意见?
此外,我很感激任何相关资源的链接.
irc*_*ell 32
我就是这样做的.我有一个is_deleted默认为0 的字段WHERE is_deleted = 0.然后查询只是检查.
我试图尽可能远离任何难以删除的东西.它们有时是必要的,但我将其设为仅限管理员的功能.这样我们可以硬删除,但用户不能......
编辑:事实上,你可以使用它在你的应用程序中有多个软删除"层".所以每个都可以是一个代码:
0 - >未删除1 - > Soft Deleted,显示在管理用户的已删除项目列表中2 - > Soft Deleted,不会显示除admin用户以外的任何用户3 - >仅显示给开发人员.拥有其他2个级别仍然允许管理员和管理员清理已删除的列表,如果它们太长.由于前端代码只是检查is_deleted = 0,它对前端是透明的...
使用软删除是很常见的事情,它们对许多事情都很有用,例如:
我想指出的一件事是,几乎所有人都会想念,并且总是会在后面的部分中咬你.您的应用程序的用户与删除的理解不同.
有不同程度的删除.典型的用户在他(s)时删除东西
问题是如果你没有记录删除的意图,你的应用程序就无法区分错误的数据(应该永远不会创建)和历史上正确的数据.
看看以下数据:
PRICES | item | price | deleted |
+------+-------+---------+
| A | 101 | 1 |
| B | 110 | 1 |
| C | 120 | 0 |
+------+-------+---------+
Run Code Online (Sandbox Code Playgroud)
某些用户不想显示商品B的价格,因为他们不再销售该商品.所以他删除了它.另一个用户通过误导为物品A创建了价格,因此他将其删除并按预期为物品C创建了价格.现在,您能告诉我所有产品的价格清单吗?不,因为要么必须显示潜在的错误数据(A),要么必须排除除当前价格之外的所有数据(C).
当然,上述内容可以通过多种方式处理.我的观点是,你必须非常清楚什么你有一个删除的意思,并确保有没有办法为用户missunderstand它.一种方法是强制用户做出选择(隐藏/删除).
如果我有现有的代码命中该表,我会添加该列并更改表的名称.然后我将创建一个与当前表同名的视图,该视图仅选择活动记录.这样,现有的代码都没有破坏,你可以拥有软删除列.如果要查看已删除的记录,请从基表中进行选择,否则使用该视图.
| 归档时间: |
|
| 查看次数: |
17369 次 |
| 最近记录: |