2010-05-01 38 views
6

Tôi đang cố gắng sử dụng một cơ sở dữ liệu mysql đơn giản nhưng tinh chỉnh nó sao cho mọi trường được sao lưu lên tới vô số phiên bản. Cách tốt nhất tôi có thể minh họa điều này là bằng cách thay thế từng trường của mỗi bảng bằng một chồng tất cả các giá trị mà trường này đã có (mỗi giá trị này phải được đặt thời gian). Tôi đoán nó giống như có kiểm soát phiên bản tùy chỉnh cho tất cả dữ liệu của tôi ..Làm thế nào để phiên bản dữ liệu kiểm soát được lưu trữ trong mysql

Bất kỳ ý tưởng nào về cách thực hiện điều này?

+0

có thể trùng lặp của http://stackoverflow.com/questions/2724187/where-are-all-the-native-revisioned-databases –

Trả lời

7

Phương pháp thông thường để "theo dõi bất kỳ thay đổi" nào đối với bảng là thêm các thủ tục kích hoạt chèn/cập nhật/xóa trên bảng và lưu các bản ghi đó trong bảng lịch sử. Ví dụ, nếu bảng dữ liệu chính của bạn là "ItemInfo" thì bạn cũng sẽ có một bảng ItemInfo_History có bản sao của bản ghi mới mỗi lần thay đổi bất kỳ (thông qua trình kích hoạt).

Điều này giúp hiệu suất của bảng chính của bạn nhất quán, nhưng cho phép bạn truy cập vào lịch sử của bất kỳ thay đổi nào nếu bạn cần.

Dưới đây là một số ví dụ, họ cho SQL Server nhưng họ chứng minh logic:

My Repository table My Repository History table My Repository Insert trigger procedure My Repository Update trigger procedure

+0

Tôi chưa thực sự theo dõi bạn, nhưng bạn đã giới thiệu tôi với những người kích hoạt và có lẽ họ sẽ sử dụng nó. Cảm ơn – Shawn

+0

Đã thêm các liên kết vào một số ví dụ có thể (hy vọng) làm cho quy trình rõ ràng hơn. :-) –

1

Một giải pháp đơn giản là thêm trường phiên bản/sửa đổi vào bảng và bất cứ khi nào bản ghi được cập nhật thay vì cập nhật tại chỗ, hãy chèn bản sao có thay đổi được áp dụng và số phiên bản tăng lên. Sau đó, khi chọn, luôn chọn bản ghi với phiên bản mới nhất. Đó là gần như thế nào hầu hết các đề án như vậy được thực hiện (ví dụ: Wikimedia thực hiện khá nhiều theo cách chính xác này).

+0

Tôi đã nghĩ về điều này nhưng sau đó tôi phải sao chép mọi trường trong hàng đó thay vì chỉ các lĩnh vực đã thực sự thay đổi giá trị .. Có vẻ một chút lãng phí, trí nhớ khôn ngoan. – Shawn

3

Hmm, những gì bạn đang nói về âm thanh tương tự như Slowly Changing Dimension.

Lưu ý rằng việc kiểm soát phiên bản trên cấu trúc cơ sở dữ liệu tùy ý chính thức là một vấn đề khá khó. :-)

+0

Dường như việc thay đổi kích thước từ từ đòi hỏi tôi phải sao chép mọi trường liên tiếp ngay cả khi chỉ một trong các trường bị thay đổi. Có vẻ như một chút lãng phí, bộ nhớ khôn ngoan – Shawn

+0

Vâng, đó là lý do tại sao bạn sử dụng nó để thay đổi từ từ * kích thước. – Ken

0

Có thể một công cụ có thể giúp bạn thực hiện điều đó cho bạn. Hãy nhìn vào thiết kế nextep:

http://www.nextep-softwares.com

Với IDE này, bạn sẽ có thể chụp những bức ảnh của cấu trúc cơ sở dữ liệu và dữ liệu của bạn và đặt nó dưới sự kiểm soát phiên bản. Sau này, bạn có thể tính toán sự khác biệt giữa 2 phiên bản bất kỳ và tạo ra SQL thích hợp có thể chèn/cập nhật/xóa dữ liệu của bạn.

Có thể đây là một cách khác để đạt được những gì bạn muốn.

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