Trước tiên tôi phải làm rõ rằng cột trạng thái không nhằm phản ánh trạng thái của một mục trong thế giới thực được biểu thị bằng bản ghi (hàng) trong bảng. Thay vào đó, nó được dự định để hiển thị trạng thái của bản ghi.
Nó có thể đơn giản như Hoạt động / Không hoạt động hoặc phức tạp như Đã phê duyệt / Đã xóa / Đã khóa / Đang chờ / Từ chối, v.v. Trạng thái có thể được lưu trữ trên cột số nguyên boolean / ngắn hoặc cột một ký tự, với ánh xạ như true
/ 1
= Hoạt động hoặc A
= Đã phê duyệt.
Ý tưởng cơ bản là có một thùng rác / hỗ trợ phục hồi giống như thùng rác trong ứng dụng (và mô phỏng nó trong cơ sở dữ liệu). Nếu có GUI phía trước hoặc giao diện khác có thể cho phép người dùng "xóa" các bản ghi, thì thực tế nó không xóa bản ghi trong bảng, mà chỉ thay đổi trạng thái bản ghi thành Không hoạt động hoặc Đã xóa. Khi giao diện tìm nạp các bản ghi, nó luôn nhận được các bản ghi chỉ phù hợp với điều kiện trạng thái là Hoạt động hoặc Được phê duyệt.
Nếu người dùng mắc lỗi và bản ghi "đã xóa" (theo quan điểm của người dùng) cần được phục hồi, DBA có thể dễ dàng vá lại bản ghi thành Đang hoạt động hoặc Được phê duyệt, sẽ tốt hơn tìm kiếm bản sao lưu và hy vọng tìm thấy bản ghi gốc ở đó Hoặc bản thân giao diện có thể cho phép người dùng xem các bản ghi bị xóa trong một chế độ xem riêng và khôi phục chúng khi cần hoặc thậm chí xóa chúng vĩnh viễn (xóa bản ghi thực tế).
Những câu hỏi của tôi:
- Đây là một thực hành tốt, hay một thực hành xấu?
- Nó có ảnh hưởng đến bình thường hóa dữ liệu?
- Những cạm bẫy tiềm năng là gì?
- Có phương pháp nào khác để đạt được cùng một mục tiêu không? (xem ghi chú)
- Làm thế nào bạn có thể có cơ sở dữ liệu thực thi các ràng buộc duy nhất trên dữ liệu cho một trạng thái nhất định (nhưng cho phép bất kỳ số lượng trùng lặp cho các trạng thái khác)?
- Tại sao cơ sở dữ liệu không cung cấp tính năng giống như "thùng rác" hoặc theo dõi / khôi phục bảng nguyên bản, vì vậy chúng tôi có thể để giao diện xóa các bản ghi thực mà không phải lo lắng?
Lưu ý: Tôi đã đọc về việc duy trì một bảng lịch sử riêng biệt nhưng điều đó có vẻ tệ hơn về mặt lưu trữ và phải tạo ra các kích hoạt và giữ cho các kích hoạt được cập nhật với lược đồ của bảng được theo dõi.