W czasach intensywnego rozwoju schemat bazy danych zmienia się zarówno szybko, jak i ciągle, a zanim nadejdzie nasza cotygodniowa aktualizacja wersji beta, schemat zmienił się tak bardzo, że jedyną sensowną opcją jest nuke wszystkich tabel, które mogę i skopiuj nowe wersje z mojej bazy danych deweloperów. Oczywiście, to nie zadziała po uruchomieniu, ponieważ nukowanie danych produkcyjnych jest receptą na katastrofę, więc zastanawiałem się, jakie były strategie zarządzania zmianami schematu bazy danych z jednej wersji / wersji do drugiej?
Niektóre znalazłem lub doświadczyłem:
- Proste nuke-and-dump z jednej bazy danych do drugiej (co teraz robię)
- Utrzymanie pliku UPDATE.sql z instrukcjami SQL, które uruchamiane są albo przez skrypt, albo ręcznie.
- Utrzymanie pliku update.php z odpowiednią wartością „db-schema-version” w aktywnej bazie danych
Trzecia opcja wydaje się najbardziej sensowna, ale nadal istnieje możliwość, że źle skonstruowane zapytanie SQL zawiedzie w połowie skryptu, pozostawiając bazę danych w stanie częściowo zaktualizowanym, co wymaga przywrócenia kopii zapasowej.
Wydaje się, że to nie problem, ale tak się dzieje, ponieważ jako zespół używamy phpMyAdmina i nie mogę nawet polegać na sobie, że pamiętam, że skopiowałem wykonaną instrukcję SQL w celu wklejenia do pliku update.php. Po przejściu do innej strony muszę ręcznie napisać instrukcję SQL lub cofnąć moją zmianę i zrobić to ponownie.
Myślę, że to, na co mam nadzieję, to rozwiązanie, które nie ma wpływu na nasz ustalony obieg pracy programistycznej?
update.php
lubupdate.sql
plik w środowisku testowym przed zastosowaniem go do aktywnej bazy danych, prawda? A PHPMyAdmin jest obwiniany za możliwe problemy, które mogą się zdarzyć w skrypcie, może nadszedł czas, aby spojrzeć na inne / lepsze narzędzie?