Dyskutowaliśmy dziś o technikach wdrażania baz danych, ponieważ mieliśmy kilka ostatnich błędów w naszym bieżącym procesie i widzieliśmy sytuacje, w których chcielibyśmy wycofać wdrożenie, ale stara wersja aplikacji nigdy nie była testowana z nową wersją Baza danych.
Z jednej strony istnieją wdrożenia w stylu migracji, w których masz instrukcję zwiększania wersji i instrukcję zmniejszania wersji (niezależnie od tego, czy są napisane w języku SQL, czy w języku aplikacji), a Twoja aplikacja wie, do której wersji musi się dostać.
Są one proste i ponieważ nie będziemy często wycofywać, programiści chętnie korzystają z prostych. Istnieje jednak ryzyko, gdy dodajesz pole / tabelę i pole to jest zapełniane przed wycofaniem. Lub gorzej, gdy upuszczasz dane, które były istotne dla poprzedniej wersji.
Z drugiej strony możemy rozważyć ulepszenie, wycofanie, podejście do przodu, w którym wycofanie nie jest tak drastyczne jak w przypadku migracji. Na przykład aktualizacja może dodać pole, które nie ma wartości zerowej; wycofanie powoduje, że jest zerowalne, więc stara aplikacja nie dba o to; funkcja rollforward zapełnia pola zerowe i sprawia, że ponownie nie ma wartości null.
Zachowuje to dane, ale jest skomplikowane zarówno pod względem kodu, jak i testowania (niestety, nasze zautomatyzowane testy integracji prawie nie istnieją i podczas gdy my je naprawiamy, w międzyczasie mamy problem).
Czy istnieją bezpieczne sposoby na złagodzenie problemów z nimi? Czy są inne opcje, które powinienem rozważyć? Czy miałeś złe doświadczenia, którymi chciałbyś się podzielić, co może później zaoszczędzić mi bólu?