Criando uma tabela para controle de usuários com o padrão de Soft Delete
Vantagens dos Campos de Exclusão Suave (Soft Delete) Ex. banco de dados #mysql
-
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
-
-
Integridade Referencial:
-
Preserva relacionamentos com outros dados do sistema
-
Evita problemas com registros órfãos em tabelas relacionadas
-
-
Rastreabilidade Completa:
-
deleted_by
registra QUEM executou a exclusão -
deleted_at
registra QUANDO a exclusão ocorreu
-
-
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.
Compartilhe este artigo: