Martin Fowler đã viết bài báo yêu thích của tôi về chủ đề này, http://martinfowler.com/articles/evodb.html. Tôi chọn không đặt bãi chứa giản đồ dưới quyền kiểm soát phiên bản là alumb và những người khác đề xuất vì tôi muốn một cách dễ dàng để nâng cấp cơ sở dữ liệu sản xuất của mình.
Đối với một ứng dụng web mà tôi sẽ có một phiên bản cơ sở dữ liệu sản xuất duy nhất, tôi sử dụng hai kỹ thuật:
Tập lệnh nâng cấp cơ sở dữ liệu
Tập lệnh nâng cấp cơ sở dữ liệu trình tự có chứa DDL cần thiết để di chuyển lược đồ từ phiên bản N sang N + 1. (Những thứ này có trong hệ thống kiểm soát phiên bản của bạn.) Một bảng _version_history_, giống như
create table VersionHistory (
Version int primary key,
UpgradeStart datetime not null,
UpgradeEnd datetime
);
nhận mục nhập mới mỗi khi tập lệnh nâng cấp chạy tương ứng với phiên bản mới.
Điều này đảm bảo rằng thật dễ dàng để xem phiên bản nào của lược đồ cơ sở dữ liệu tồn tại và các tập lệnh nâng cấp cơ sở dữ liệu chỉ được chạy một lần. Một lần nữa, đây là không kết xuất cơ sở dữ liệu. Thay vào đó, mỗi tập lệnh đại diện cho các thay đổi cần thiết để chuyển từ phiên bản này sang phiên bản tiếp theo. Chúng là tập lệnh mà bạn áp dụng cho cơ sở dữ liệu sản xuất của mình để "nâng cấp" nó.
Đồng bộ hóa hộp cát dành cho nhà phát triển
- Một tập lệnh để sao lưu, khử trùng và thu nhỏ cơ sở dữ liệu sản xuất. Chạy phần này sau mỗi lần nâng cấp lên DB sản xuất.
- Một tập lệnh để khôi phục (và chỉnh sửa, nếu cần) bản sao lưu trên máy trạm của nhà phát triển. Mỗi nhà phát triển chạy tập lệnh này sau mỗi lần nâng cấp lên DB sản xuất.
Lưu ý:Các bài kiểm tra tự động của tôi chạy trên cơ sở dữ liệu đúng với lược đồ nhưng trống, vì vậy lời khuyên này sẽ không hoàn toàn phù hợp với nhu cầu của bạn.