Vantagens dos Campos de Exclusão Suave (Soft Delete) Ex. banco de dados #mysql

  1. Preservação de Dados Históricos:

    • Mantém #registros importantes mesmo após "exclusão"

    • Permite recuperação acidental de dados

    • Atende a requisitos de compliance e auditoria

  2. Integridade Referencial:

    • Preserva relacionamentos com outros dados do sistema

    • Evita problemas com registros órfãos em tabelas relacionadas

  3. Rastreabilidade Completa:

    • deleted_by registra QUEM executou a exclusão

    • deleted_at registra QUANDO a exclusão ocorreu

  4. Controle de Acesso:

    • Permite implementar diferentes níveis de "exclusão" (ex: ocultar vs desativar)

    • Facilita a criação de lixeiras ou áreas de arquivamento

 

CREATE TABLE users (
 id INT AUTO_INCREMENT PRIMARY KEY,
 name VARCHAR(100) NOT NULL,
 login VARCHAR(50) NOT NULL UNIQUE,
 password VARCHAR(255) NOT NULL,
 role_id INT NOT NULL,
 status ENUM('active', 'inactive', 'suspended', 'pending') DEFAULT 'pending',
 created_by INT,
 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 updated_by INT,
 updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 deleted_by INT NULL,
 deleted_at TIMESTAMP NULL,
 FOREIGN KEY (created_by) REFERENCES users(id),
 FOREIGN KEY (updated_by) REFERENCES users(id),
 FOREIGN KEY (deleted_by) REFERENCES users(id),
 FOREIGN KEY (role_id) REFERENCES roles(id),
 INDEX idx_deleted_at (deleted_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

 

Implementação Prática do Soft Delete

#Mysql insert

SELECT * FROM users WHERE deleted_at IS NULL;

Exclusão.

UPDATE users 
SET deleted_at = CURRENT_TIMESTAMP, 
 deleted_by = [ID_DO_USUARIO_QUE_EXCLUIU] 
WHERE id = [ID_DO_USUARIO];

Restauração de registro.

UPDATE users 
SET deleted_at = NULL,
 deleted_by = NULL
WHERE id = [ID_DO_USUARIO];

 

Esta turorial é uma pequena amostra de como criar uma #tabela bem estruturada e de fácil manutenção.