2. 19:10 12/08/2026
Đáp án được người đặt câu hỏi chọn
Chào bạn Trang Nguyễn,
Foreign key là cơ chế bảo vệ integrity rất tốt, nhưng ON DELETE CASCADE là một quyết định nghiệp vụ chứ không chỉ là tiện lợi kỹ thuật. Nó phù hợp khi bản ghi con hoàn toàn vô nghĩa nếu cha biến mất và việc xóa dây chuyền đúng với policy retention/audit của sản phẩm.
Một cách phân loại:
1. Dữ liệu phụ thuộc chặt và có thể tái tạo, như dòng chi tiết tạm hoặc metadata không có giá trị độc lập, có thể cân nhắc cascade.
2. Dữ liệu có giá trị audit, pháp lý, tài chính hoặc cần giữ lịch sử thường cần RESTRICT, immutable ledger hoặc trạng thái archived/anonymized thay vì xóa dây chuyền.
3. Với user, đừng giả định delete là yêu cầu đúng. Có thể cần deactivate, transfer ownership, anonymize PII và giữ record nghiệp vụ theo retention policy.
4. Soft delete không tự động an toàn: mọi query, unique constraint, background job và foreign key semantics phải hiểu record đã xóa mềm. Nếu dùng, cần index/query convention rõ ràng.
5. Thao tác xóa hàng loạt cần quyền riêng, bước xác nhận, scope preview, audit log và có thể là job bất đồng bộ có phê duyệt.
Hãy viết test cho cascade/restrict, rollback transaction và công cụ admin. Cách tốt nhất để tránh orphan không phải luôn cascade, mà là mô hình lifecycle dữ liệu được mô tả rõ rồi được database và application cùng thực thi.
0