Praca nad projektem z wieloma gałęziami, w którym każda gałąź jest ostatecznie łączona z powrotem z główną gałęzią i zasadniczo jest izolowana w celu opracowania nowej funkcji.
Baza danych, którą jest MS SQL Server, ma wspólny schemat, jednak każda gałąź wprowadza zmiany do schematu w miarę jego rozwoju.
Moje podstawowe pytanie dotyczy tego, jakie są dobre sposoby radzenia sobie z udostępnianiem schematu od gałęzi głównej do gałęzi pochodnej, tak że zmiany dokonane w gałęzi głównej można łatwo scalić z gałęzią pochodną, bez konieczności wprowadzania nowych zmian w gałęzi pochodnej gałąź?
Odpowiedzi:
Z powodzeniem zastosowałem następującą metodologię, opracowaną w Kontroli wersji i Twojej bazie danych :
Często słyszę opinię „czym to się różni od zwykłego trzymania skryptów definicji obiektów pod kontrolą źródła?”. Różnica jest ogromna, ponieważ podczas wdrażania nowej wersji aplikacji nie będziesz po prostu tworzyć nowej bazy danych. Najczęściej aplikacja będzie musiała zaktualizować istniejącą bazę danych, w tym istniejące dane . Jest to zasadnicza różnica, ponieważ kroki aktualizacji muszą zapewnić integralność i spójność istniejących danych podczas aktualizacji. Niektóre operacje są trywialne w kodzie (dodaj kolumnę niepozwalającą wartości zerowej z wartością domyślną do skryptu definicji obiektu tabeli, gotowe), ale w rzeczywistości są bardzo bolesne przy rzeczywistym wdrożeniu (tabela ma 1,5 miliarda wierszy, kolumna dodania skończyłaby się miejsca w dzienniku, jeśli wykonano to w sposób „uproszczony”).
Jak to działa z rozgałęzianiem:
Zauważ, że nie jest w to zaangażowane żadne narzędzie, nie ma skryptu magicznego schematu różnicowego, nie ma żadnych kreatorów ani żadnego skryptu generującego kliknięcie prawym przyciskiem myszy. Jest to proces w 100% sterowany przez programistów, oparty na źródłach (skryptach). Wielu uważa, że cały proces jest skomplikowany, ale działa. W rzeczywistości, jako użytkownik programu SQL Server, wykorzystałeś już wyniki tego procesu w codziennym korzystaniu z programu SQL Server: sam program SQL Server korzysta z bardzo podobnego procesu aktualizacji bazy danych i, jak można się spodziewać, proces rozwoju produktu ma szerokie zastosowanie rozgałęzień, a wspomniany problem jest bardzo realnym problemem, który należy rozwiązać.
BTW, sposób, w jaki faktycznie zachodzi rozgałęzienie / integracja, różni się w zależności od produktów kontroli źródła, używam terminów znanych z trybu działania integracji z perforacją .
źródło
Chociaż moja odpowiedź może nie być tak długa jak odpowiedź Remusa, uznałem, że jest to naprawdę dobre rozwiązanie. Nie mam go jeszcze w produkcji, więc YMMV *.
Liquibase
Zasadniczo jest to plik XML, w którym wprowadza się zmiany schematu w bazie danych jako nowe elementy w pliku XML. Na przykład:
Ma w pełni rozwiniętą składnię, dzięki czemu możesz praktycznie zrobić dowolną bazę danych.
W instalacji Liquibase określasz również, która baza danych ma być wersjonowana. Następnie „uruchom” plik .xml za pomocą dołączonego pliku wykonywalnego Java (plik jar). To w zasadzie odtwarza te zmiany określone w pliku XML w bazie danych.
Prawdziwym kickerem jest to, że przechowujesz ten plik XML w tym samym wersjonowanym folderze co kod. Więc w moim przypadku był to Git. Miałem ten plik XML w folderze projektu (na tym samym poziomie co /.git), a następnie za każdym razem, gdy przełączałem gałęzie, plik XML zmieniał się na tę wersję gałęzi i uruchamiałem plik .jar, a moja baza danych odzwierciedlała teraz tę gałąź.
* Uwaga: Nie ukończyłem implementacji, ponieważ miałem problemy z podłączeniem Javy do SQL Server. Potrzebuje sterowników jdbc itp. I nie byłem w nastroju. W związku z tym przebieg może się różnić.
źródło
Tutaj w Red Gate wkrótce wypuszczamy rozwiązanie do wersjonowania baz danych, które wykorzystuje zarówno SQL Compare, jak i SQL Source Control. Wykorzystuje to podejście do aktualizacji skryptów migracyjnych i stempluje bazę danych właściwością rozszerzoną do wersji, która odpowiada rewizji kontroli źródła.
Mamy nadzieję na wydanie w połowie grudnia. Dostępny jest teraz kandydat do wydania. Po więcej informacji odwiedź:
http://www.red-gate.com/products/sql-development/sql-source-control/entrypage/migration
Mamy nadzieję, że w nadchodzących miesiącach będziemy korzystać z tego rozwiązania, więc daj nam znać, co myślisz.
źródło
Jeśli Ty i zajmujesz się zmianami schematu poprzez generowanie skryptów i utrzymywanie tych skryptów pod kontrolą źródła, powinieneś być w stanie traktować zmiany jak w przypadku każdego innego scalenia kodu. Możesz wybrać automatyczne scalanie lub podjąć więcej ręcznej interwencji.
źródło
Jestem w podobnej sytuacji, gdy pracuję na działającej stronie internetowej i kilku gałęziach programistycznych, w których muszę zmienić schemat bazy danych.
Rozwiązałem to, pisząc po kasie i haku po scaleniu, które można ładnie używać z git. Wszystkie moje migracje przechowuję w postaci plików SQL w osobnym katalogu i zatwierdzam je wraz ze zmienionym kodem PHP. Za każdym razem wykonuję
lub a
git automatycznie wywoła odpowiednie migracje w górę i w dół. Zobacz moją implementację na Github .
źródło