2012-03-27 36 views
7

Tôi đã luôn luôn có một cảm giác kỳ lạ trong ruột của tôi về thực sự xóa các hàng từ một số loại bảng.Xóa các hàng MySql hoặc đánh dấu "đã chết"?

Ví dụ: nếu tôi có bảng Người dùng ... khi họ xóa tài khoản của họ, thay vì xóa hoàn toàn hàng của họ, tôi đã đánh dấu là "đã chết" hoặc không hoạt động. Điều này cho phép tôi giữ lại một kỷ lục về sự tồn tại của họ nếu tôi cần nó một lần nữa.

Trong các trường hợp như thế này - xem xét hiệu suất, chi phí, v.v ... - tôi có nên xóa hàng hay chỉ đơn giản là đánh dấu là không hoạt động?

Cái nào phổ biến hơn?

Trả lời

4

Cá nhân, tôi gần như luôn luôn sử dụng "xóa mềm" như bạn mô tả.

Nếu không gian là một mối quan tâm, tôi sẽ có một công việc sẽ định kỳ làm sạch các bản ghi đã xóa mềm sau khi chúng đã bị xóa trong một khoảng thời gian nhất định.

3

Có lẽ bạn có thể di chuyển các bản ghi MySQL không hoạt động sang một bảng riêng biệt được thiết kế để giữ các tài khoản không hoạt động? Bằng cách đó, bạn có thể chỉ cần di chuyển chúng trở lại nếu bạn cần, hoặc xóa bảng nếu kích thước cơ sở dữ liệu trở thành một vấn đề.

3

Dữ liệu rất có giá trị để bị xóa vĩnh viễn khỏi cơ sở dữ liệu. Đánh dấu là dead.

Tôi thường cung cấp trạng thái cho các trường hợp như vậy. Trong mô hình này

  1. 0 Inactive
  2. 1 tích cực
  3. 2 Đã xoá
+0

Tôi thích phương pháp tiếp cận dựa trên số..save trên một chi phí nhỏ :) – johnnietheblack

+0

@johnnietheblack, Yeah 'tinyint' là đủ – Starx

1

Ngoài xóa "mềm", giải pháp khác là sử dụng "bảng kiểm tra". Gần đây tôi đã hỏi what they were về dba.stackexchange.com.

bảng kiểm toán thường được sử dụng để ghi lại hành động, chẳng hạn như chèn/cập nhật/xóa, thực hiện trên một bảng thứ hai, có thể lưu trữ các giá trị cũ và mới, thời gian, vv

Họ có thể được thực hiện sử dụng trigger trong một cách đơn giản.

Ưu điểm:

  • là "không sử dụng" dữ liệu trong một bảng riêng biệt
  • thật dễ dàng để xoay núm level-of-chi tiết từ hạt mịn đến thô-grained
  • nó có thể hơn hiệu quả không gian-khôn ngoan, tùy thuộc vào việc thực hiện chính xác

Nhược điểm:

  • kể từ khi dữ liệu trong một bảng riêng biệt, nó có thể gây ra xung đột quan trọng trong trường hợp đó liên tiếp là "xóa được"
  • nó có thể ít hiệu quả không gian-khôn ngoan, tùy thuộc vào việc thực hiện chính xác
1

Câu hỏi này khiến tôi nhớ điều này giải trí anecdote. Quan điểm của tôi: có rất nhiều yếu tố cần cân nhắc khi chọn giữa xóa cứng và mềm mà không có quy tắc ngón tay cái nào nói cho bạn biết nên chọn yếu tố nào.

Các vấn đề liên quan