2010-07-06 52 views
6

Chúng tôi đang triển khai Hệ thống mới bằng cách sử dụng Java/Spring/Hibernate trên PostgreSQL. Hệ thống này cần tạo bản sao của mỗi bản ghi ngay sau khi sửa đổi/xóa được thực hiện trên (các) bản ghi trong (các) bảng. Sau đó, (các) Bảng Kiểm tra sẽ được truy vấn bởi Báo cáo để hiển thị dữ liệu cho người dùng.Cách triển khai Kiểm tra/phiên bản Bảng Sửa đổi trên PostgreSQL

Tôi đã lên kế hoạch triển khai tính năng kiểm tra/phiên bản này bằng cách kích hoạt (các) bảng sẽ tạo bản sao của hàng đã sửa đổi (hàng đã xóa) "TO" BẢNG có tên ENTITY_VERSIONS có khoảng 20 cột được gọi là col1, col2, col3, col4, vv sẽ lưu trữ các cột từ Bảng trên; Tuy nhiên, vấn đề là nếu có nhiều hơn 1 Bảng được phiên bản và CHỈ 1 bảng TARGET (ENTITY_VERSIONS) để lưu trữ tất cả các phiên bản của bảng, làm cách nào để thiết kế bảng TARGET?

HOẶC có tốt hơn là sẽ có COPY của Bảng VERSION cho mỗi Bảng cần phiên bản không?

Nó sẽ là tiền thưởng nếu một số gợi ý hướng tới PostgreSQL Triggers (và thủ tục lưu trữ liên quan) mã để thực hiện kiểm toán/phiên bản có thể được chia sẻ.

P.S: Tôi đã xem số Suggestions for implementing audit tables in SQL Server? và giống như câu trả lời, ngoại trừ tôi KHÔNG biết loại OldValue và NewValue là gì?

P.P.S: Nếu các bảng sử dụng xóa DELETE (phantom deletes) thay vì xóa HARD, bạn có thực hiện bất kỳ lời khuyên nào thay đổi không?

Trả lời

4

Tôi sẽ có một bản sao của mỗi bảng để giữ các phiên bản của bảng đó mà bạn muốn giữ lại. Nghe có vẻ như một cơn ác mộng để duy trì và sử dụng một bảng phiên bản toàn cầu.

This link trong tài liệu Postgres hiển thị một số ví dụ kích hoạt kiểm tra trong Postgres.

+0

+1 cảm ơn. Tôi tự hỏi những điểm mạnh của việc có "BẢNG KIỂM TOÁN TOÀN CẦU" so với "Bảng Kiểm toán cho mỗi Bảng" là truy vấn dữ liệu để báo cáo? – anjanb

+1

Nếu bạn bằng cách nào đó quản lý để có một bảng kiểm toán TOÀN CẦU, tôi thấy trước ALOT của loại đúc. Ý tôi là ... bạn sẽ lưu trữ tất cả các cột trong loại nào? – rfusca

+0

rfusca: đúng. vâng, đó cũng là nghi ngờ của tôi! – anjanb

2

Trong bảng tổng thể, tất cả các cột có thể được lưu trữ trong cột đơn dưới dạng kiểu hstore. Tôi vừa thử kiểm toán và tôi hoạt động rất tốt, tôi khuyên bạn nên thử. Ví dụ bảng kiểm toán tuyệt vời theo dõi tất cả các thay đổi trong bảng đơn bằng cách thêm một trình kích hoạt vào các bảng mà bạn muốn bắt đầu giữ lịch sử kiểm tra. tất cả các thay đổi được lưu trữ ở dạng hstore type- hoạt động cho v 9.1+ this link

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