什么是软删除?何时使用?

在数据库上下文中,“软删除”模式是指一种处理记录删除的方法,该方法涉及将记录标记为已删除,而不是从数据库中物理删除它们。此方法与“硬删除”相反,“硬删除”中的记录会从数据库中永久删除。

以下是软删除模式的关键组成部分:

标志或列:常见的实现涉及向数据库表添加一个布尔列(通常命名为is_deleted或)。soft_deleted该列用于标记一条记录是否被删除。当删除记录时,您不是将其从数据库中删除,而是设置此标志来指示其“已删除”状态。

CREATE TABLE my_table (
    id INT PRIMARY KEY,
    name VARCHAR(255),
    is_deleted BOOLEAN DEFAULT false
);

查询修改:查询数据库时,您需要修改查询以排除软删除的记录。此修改通常涉及向 WHERE 子句添加一个条件,以过滤掉设置了删除标志的记录。

-- Select all non-deleted records
SELECT * FROM my_table WHERE is_deleted = false;

恢复:如果需要,您可以通过更新标志将其标记为未删除来“恢复”软删除的记录。或者,您可能有一个单独的过程来永久删除在一段时间内软删除的记录。

-- Recover a soft-deleted record
UPDATE my_table SET is_deleted = false WHERE id = 123;

当您想要保留已删除项目的历史记录,或者需要遵守某些法规要求时,软删除非常有用。它允许以更安全且可逆的方式处理删除。但是,它可能会导致查询变得复杂,特别是如果您忘记包含过滤已删除记录的条件。

请务必注意,实施细节可能会有所不同,具体取决于您使用的特定数据库系统和应用程序的要求。一些 ORM(对象关系映射)框架还提供对软删除的内置支持。

软删除可能不值得
该文讨论了软删除模式的一些问题。软删除是通过将记录标记为已删除而不是直接删除数据来实现的。

然而,软删除模式存在一些缺点。

  • 首先,软删除逻辑需要渗透到代码的各个部分,容易忽略删除标记而意外返回已删除的数据。
  • 其次,软删除会导致外键关联的数据丢失。
  • 此外,软删除的数据保留时间不受控制,可能需要编写复杂的查询来永久删除已软删除的数据。因此,软删除是否真正有用是有争议的。

总之:

  • 软删除模式的优点是可以让删除操作更安全、可逆,即使记录被软删除,仍可以通过恢复操作找回数据。
  • 软删除模式的缺点之一是容易在代码中遗漏软删除的逻辑,导致意外返回已被删除的数据。
  • 软删除模式还会导致外键的丢失,无法保证数据引用的完整性。