🔹 Soft Delete là gì?

Published on March 06, 2025

jsdatabasemysql

View: 105

🔹 Soft Delete là gì?

Soft Delete là kỹ thuật xóa dữ liệu bằng cách đánh dấu một bản ghi là đã bị xóa, thay vì xóa vĩnh viễn khỏi cơ sở dữ liệu. Điều này giúp bảo toàn dữ liệu và cho phép khôi phục lại nếu cần.


🔹 Cách hoạt động của Soft Delete

Thay vì dùng DELETE để xóa bản ghi khỏi database, ta thường thêm một trường (column) như:

  • deleted_at (kiểu DATETIME hoặc TIMESTAMP)

  • is_deleted (kiểu BOOLEAN hoặc TINYINT)

Khi muốn xóa, thay vì DELETE FROM, ta chỉ cập nhật trường này:

UPDATE users SET deleted_at = NOW() WHERE id = 1;

Hoặc:

UPDATE users SET is_deleted = 1 WHERE id = 1;

🔹 Lợi ích của Soft Delete

Tránh mất dữ liệu vĩnh viễn: Có thể khôi phục khi cần.
Dễ dàng truy vết: Lưu trữ dữ liệu lịch sử, audit logs.
Tránh lỗi do xóa nhầm: Người dùng có thể khôi phục thay vì mất dữ liệu.
Dữ liệu không bị ảnh hưởng ngay lập tức: Các tham chiếu khóa ngoại (foreign key) không bị lỗi.


🔹 Ví dụ trong ORM (Sequelize, TypeORM, Prisma)

🔹 TypeORM (NestJS)

import { Entity, Column, PrimaryGeneratedColumn, DeleteDateColumn } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @DeleteDateColumn() // Tự động quản lý soft delete
  deletedAt?: Date;
}

🔹 Xóa mềm:

await userRepository.softDelete(1);

🔹 Khôi phục:

await userRepository.restore(1);

🔹 Sequelize (Node.js)

const User = sequelize.define('User', {
  name: DataTypes.STRING,
  deletedAt: DataTypes.DATE
}, { paranoid: true }); // Kích hoạt soft delete

🔹 Xóa mềm:

await User.destroy({ where: { id: 1 } });

🔹 Khôi phục:

await User.restore({ where: { id: 1 } });

🔹 So sánh Soft Delete vs Hard Delete

Tiêu chí

Soft Delete

Hard Delete

Dữ liệu

Vẫn còn trong database nhưng bị ẩn

Xóa vĩnh viễn khỏi database

Khả năng khôi phục

✅ Có thể khôi phục

❌ Không thể khôi phục

Hiệu suất

❌ Có thể chậm hơn do cần lọc dữ liệu

✅ Nhanh hơn vì dữ liệu được xóa ngay

Tính toàn vẹn dữ liệu

✅ Giữ được dữ liệu liên quan (FK)

❌ Có thể gây lỗi nếu FK không được xử lý

Dung lượng DB

📈 Cần thêm bộ nhớ lưu trữ

📉 Giảm kích thước DB


🔹 Khi nào nên dùng Soft Delete?

✅ Cần lưu lịch sử dữ liệu (Audit log).
✅ Cần khả năng khôi phục bản ghi sau khi xóa.
✅ Muốn tránh lỗi khi xóa dữ liệu có ràng buộc (FK).

🔹 Khi nào nên dùng Hard Delete?
❌ Khi dữ liệu thực sự không còn giá trị.
❌ Khi muốn tiết kiệm không gian lưu trữ.


🔹 Tóm lại

Soft Delete là giải pháp an toàn để xóa dữ liệu mà không mất vĩnh viễn, giúp dễ dàng khôi phục và duy trì tính toàn vẹn của dữ liệu. Tuy nhiên, nó có thể làm tăng dung lượng DB và cần tối ưu truy vấn để tránh ảnh hưởng hiệu suất. 🚀

Related Articles

How to Improve Your Blog Design

Learn tips and tricks to enhance your blog's appearance and usability.

Top Blogging Tools in 2024

Discover the best tools to elevate your blogging experience.

Writing Content that Converts

Learn the art of creating engaging and effective blog content.

Ôn tập là dễ

Ôn tập là dễ

Nền tảng thi trắc nghiệm số 1 Việt Nam giúp bạn tạo, quản lý và chia sẻ bộ đề một cách nhanh chóng và dễ dàng.

© 2025 Ôn tập là dễ. Tất cả các quyền được bảo lưu.