Một số đồng nghiệp và tôi đã tranh luận về cách tốt nhất để lưu trữ dữ liệu lịch sử. Hiện tại, đối với một số hệ thống, tôi sử dụng một bảng riêng để lưu trữ dữ liệu lịch sử và tôi giữ một bảng gốc cho bản ghi hoạt động hiện tại. Vì vậy, hãy nói rằng tôi có bảng FOO. Theo hệ thống của tôi, tất cả các hồ sơ hoạt động sẽ đi vào FOO và tất cả các hồ sơ lịch sử sẽ đi trong FOO_Hist. Nhiều người dùng khác nhau trong FOO có thể được cập nhật, vì vậy tôi muốn giữ một tài khoản chính xác về mọi thứ được cập nhật. FOO_Hist giữ các trường chính xác giống như FOO ngoại trừ HIST_ID tự động tăng. Mỗi khi FOO được cập nhật, tôi thực hiện một câu lệnh chèn vào FOO_Hist tương tự như : insert into FOO_HIST select * from FOO where id = @id
.
Đồng nghiệp của tôi nói rằng đây là thiết kế tồi vì tôi không nên có một bản sao chính xác của bảng vì lý do lịch sử và chỉ nên chèn một bản ghi khác vào bảng hoạt động với một lá cờ cho biết đó là vì mục đích lịch sử.
Có một tiêu chuẩn để đối phó với lưu trữ dữ liệu lịch sử? Dường như với tôi rằng tôi không muốn làm lộn xộn các hồ sơ hoạt động của mình với tất cả các hồ sơ lịch sử của tôi trong cùng một bảng xem xét rằng nó có thể vượt quá một triệu hồ sơ (tôi đang suy nghĩ lâu dài).
Làm thế nào để bạn hoặc công ty của bạn xử lý này?
Tôi đang sử dụng MS SQL Server 2008, nhưng tôi muốn giữ câu trả lời chung chung và tùy ý cho bất kỳ DBMS nào.