Chúng tôi đã thảo luận về các kỹ thuật triển khai cơ sở dữ liệu ngày hôm nay, đã có một vài lỗi gần đây trong quy trình hiện tại của chúng tôi và đã thấy các tình huống mà chúng tôi muốn quay lại triển khai nhưng phiên bản cũ của ứng dụng chưa bao giờ được thử nghiệm so với phiên bản mới của cơ sở dữ liệu.
Một mặt, có các triển khai kiểu Di chuyển, trong đó bạn có hướng dẫn phiên bản và hướng dẫn giảm phiên bản (cho dù được viết bằng SQL hoặc bằng ngôn ngữ ứng dụng của bạn) và ứng dụng của bạn biết phiên bản nào cần có.
Đây là những điều đơn giản và vì chúng tôi sẽ không quay trở lại thường xuyên, các nhà phát triển quan tâm đến sự đơn giản. Tuy nhiên, có những rủi ro khi bạn thêm một trường / bảng và trường đó được điền trước khi bạn quay lại. Hoặc tệ hơn, nơi bạn thả dữ liệu có liên quan đến phiên bản trước.
Mặt khác, chúng ta có thể xem xét một phương pháp nâng cấp, rollback, rollforward trong đó việc quay trở lại không quyết liệt như với Migration. Ví dụ: nâng cấp có thể thêm trường không nullable; rollback làm cho nó vô hiệu để ứng dụng cũ không quan tâm; rollforward điền vào các trường null và làm cho nó không thể rỗng nữa.
Điều này giữ lại dữ liệu nhưng phức tạp cả về mã và kiểm tra (đáng buồn thay, các kiểm tra tích hợp tự động của chúng tôi không tồn tại nhiều và trong khi chúng tôi đang sửa lỗi đó, chúng tôi gặp vấn đề trong lúc này).
Có những cách an toàn để giảm thiểu những vấn đề với những điều này? Có những lựa chọn khác tôi nên xem xét? Bạn đã có những trải nghiệm tồi tệ mà bạn muốn chia sẻ có thể giúp tôi giảm đau sau này chưa?