这适用于使用PHP / MySQL的CRM应用程序。用户可以“删除”诸如客户,联系人,注释等各种实体。我只是希望它被删除到应用程序中,而不是实际从数据库中删除实体,而是保存在数据库中,并且如果以后需要,可以“恢复”。甚至可能会在应用程序中添加某种“回收站”。
我想过几种方法可以做到这一点:
将删除的实体移动到另一个表。 (customer to customer_deleted)
更改实体的属性。 (启用为false)
我确信还有其他方法,每个方法都有自己对数据库大小,性能等的影响,我只是想知道通常建议的方法是做什么的?
答案 0 :(得分:1)
我会将两者结合起来:
deleted
设置为true ARCHIVE
select into
文章表并从存档为什么我会这样走?
答案 1 :(得分:0)
通常的做法是将deleted_at
列设置为用户删除实体的日期(默认为null)。您还可以添加deleted_by
列,以标记是谁删除了它。使用某种删除列使FK关系更容易使用,因为这些不会中断。通过将行移动到新表,您必须更新FK(如果您取消删除,则再次更新它们)。缺点是您必须确保所有查询都排除已删除的行(如果将行移动到新表,则不会出现问题)。许多ORM使这种过滤更容易,这取决于您使用的是什么。