🔹 Soft Delete là gì?
Published on March 06, 2025
jsdatabasemysql
🔹 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ểuDATETIME
hoặcTIMESTAMP
)is_deleted
(kiểuBOOLEAN
hoặcTINYINT
)
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.