一尘不染

软删除最佳做法(PHP / MySQL)

mysql

问题

在处理产品和订单的Web应用程序中,我想维护前雇员(用户)与其处理的订单之间的信息和关系。我想维护过时产品与包括这些产品的订单之间的信息和关系。

但是我希望员工能够整理管理界面,例如删除前员工,过时的产品,过时的产品组等。

我正在考虑实施软删除。那么,通常如何做到这一点?

我的即时想法

我的第一个想法是flag_softdeleted在应该可以软删除的每个对象表中粘贴“ TINYINT NOT NULL DEFAULT
0”列。或者使用时间戳代替?

然后,在每个相关的GUI中提供一个“显示已删除”或“取消删除”按钮。单击此按钮,您将在结果中包括软删除的记录。每个删除的记录都有一个“还原”按钮。这有意义吗?

你的想法?

另外,我希望与相关资源建立任何链接。


阅读 403

收藏
2020-05-17

共1个答案

一尘不染

这就是我的方法。我有一个is_deleted默认为0 的字段WHERE is_deleted = 0。然后查询仅检查。

我尽量避免任何硬删除。有时它们是必需的,但是我将其设为仅管理员使用的功能。这样我们就可以硬删除,但用户不能…

编辑: 实际上,您可以使用它在您的应用程序中具有多个“软删除”“层”。所以每个可能是一个代码:

  • 0 ->未删除
  • 1 ->软删除,在管理用户的已删除项目列表中显示
  • 2 ->软删除,除管理员用户外不显示任何其他用户
  • 3 ->仅显示给开发人员。

如果其他两个级别过长,仍然可以使经理和管理员清理已删除列表。而且由于前端代码只检查is_deleted = 0,因此对前端是透明的…

2020-05-17