软删除最佳实践(PHP / MySQL)
问题
在处理产品和订单的Web应用程序中,我希望维护前员工(用户)与他们处理的订单之间的信息和关系。我想维护过时的产品和包含这些产品的订单之间的信息和关系。
但是,我希望员工能够解除管理界面的混乱,例如删除以前的员工,过时的产品,过时的产品组等。
我正在考虑实现软删除。那么,人们通常如何做到这一点?
我的直接想法
我的第一个想法是在每个应该是软删除的对象表中粘贴一个“
flag_softdeleted
TINYINTNOT NULL DEFAULT 0”列。或者可以使用时间戳代替?
然后,我在每个相关的GUI中提供“显示已删除”或“取消删除”按钮。单击此按钮,您将在结果中包含软删除的记录。每个删除的记录都有一个“恢复”按钮。这有意义吗?
你的意见?
此外,我很感激任何相关资源的链接。
没有找到相关结果
已邀请:
6 个回复
河饶办斜施
字段,默认为0.然后查询只检查
。 我试图尽可能远离任何难以删除的东西。它们有时是必要的,但我将其设为仅限管理员的功能。这样我们可以硬删除,但用户不能...... 编辑:事实上,你可以使用它在你的应用程序中有多个软删除“层”。所以每个都可以是一个代码:
- >未删除
- > Soft Deleted,显示在管理用户的已删除项目列表中
- > Soft Deleted,不会显示除admin用户以外的任何用户
- >仅显示给开发人员。 拥有其他2个级别仍然允许管理员和管理员清理已删除的列表,如果它们太长。由于前端代码只检查
,它对前端是透明的...
茶鬼失形
某些用户不想显示商品B的价格,因为他们不再销售该商品。所以他删除了它。另一个用户通过误导为物品A创建了价格,因此他将其删除并按预期为物品C创建了价格。现在,您能告诉我所有产品的价格清单吗?不,因为要么必须显示潜在的错误数据(A),要么必须排除除当前价格之外的所有数据(C)。 当然,上述内容可以通过多种方式处理。我的观点是,您需要非常清楚删除所指的内容,并确保用户无法理解它。一种方法是强制用户做出选择(隐藏/删除)。
镶骄册筷
抵舵
篮肥炼皖
裸雷胜檀哭
甚至
代表
或
的状态。根据这被认为是“业务”还是“持久性”数据,它可以尽可能透明地烘焙到应用程序/域逻辑中,例如直接在存储过程中并且应用程序代码不知道。但听起来这是符合您需求的合法商业信息,因此需要在整个代码中了解。 (因此用户可以按照您的建议查看已删除的记录。) 我见过的另一种方法是使用两个时间戳的组合来显示给定记录的活动“窗口”。维护它的代码要多一些,但好处是可以安排某些东西在预定的时间进行软删除。例如,限时产品可以在创建时以这种方式设置。 (为了使记录无限期激活,可以使用最大值(或者只是一些荒谬的遥远的未来日期),或者如果您对此结束日期,则结束日期为
。) 当然,还会不时考虑删除/取消删除的内容并跟踪某种审计。标志方法只知道当前状态,时间戳方法只知道最近的窗口。但是,任何像审计线索一样复杂的东西都应该与所讨论的记录分开存储。