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

  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.