Będąc w przestrzeni kontroli wersji bazy danych przez 5 lat (jako dyrektor ds. Zarządzania produktami w DBmaestro) i pracując jako DBA przez ponad dwie dekady, mogę powiedzieć ci prosty fakt, że nie możesz traktować obiektów bazy danych jak Ty traktuj swoje Java, C# lub inne pliki i zapisz zmiany w prostych skryptach DDL.
Istnieje wiele powodów, a ja wymienić tylko kilka:
- Pliki są przechowywane lokalnie na komputerze programisty i zmianą on/ marki nie mają wpływu na innych deweloperów. Podobnie deweloper nie podlega zmianom dokonanym przez jej współpracownika. W bazie danych jest to (zwykle) nie w tym przypadku, a programiści korzystają z tej samej bazy danych, co środowisko , więc każda zmiana, która została zatwierdzona w bazie danych, wpływa na inne.
- Publikowanie zmian w kodzie odbywa się za pomocą opcji Zamelduj/Prześlij zmiany/ itp. (W zależności od używanego narzędzia kontroli źródła). W tym momencie kod z lokalnego katalogu dewelopera jest wstawiany do repozytorium kontroli źródła. Deweloper, który chce uzyskać najnowszy kod , musi poprosić o niego z narzędzia kontroli źródła. W bazie danych zmiana już istnieje i wpływa na inne dane, nawet jeśli nie została zarejestrowana w repozytorium.
- Podczas odprawy pliku narzędzie kontroli źródła wykonuje konflikt sprawdzając, czy ten sam plik został zmodyfikowany i sprawdzony przez innego dewelopera podczas modyfikacji lokalnej kopii. I znowu tam nie sprawdza tego w bazie danych. Jeśli zmienisz procedurę z na swoim lokalnym komputerze i jednocześnie zmodyfikuję tę samą procedurę za pomocą kodu z mojego lokalnego komputera PC, wówczas będziemy nadpisywać nawzajem swoje zmiany.
- Proces budowania kodu wykonuje się, pobierając etykietę/najnowszą wersję kodu do pustego katalogu, a następnie wykonuje kompilację build - .Dane wyjściowe to pliki binarne, w których kopiujemy & zastępujące istniejące. Nie obchodzi nas, co było wcześniej. W bazie danych nie możemy odtworzyć bazy danych tak, jak potrzebujemy do przechowywania danych! Również wdrożenie wykonuje skrypty SQL, które zostały wygenerowane w procesie kompilacji .
- Podczas wykonywania skryptów SQL (przy użyciu poleceń DDL, DCL, DML (dla statycznych )) przyjmuje się, że bieżąca struktura środowiska jest zgodna ze strukturą podczas tworzenia skryptów. Jeśli nie, to wtedy twoje skrypty mogą zawieść, gdy próbujesz dodać nową kolumnę, która już istnieje .
- Traktowanie skryptów SQL jako kodu i ręczne ich generowanie spowoduje błędy składniowe, błędy zależności baz danych, skrypty, które nie są ponownie używane, co utrudnia zadanie testowania tych skryptów. Ponadto skrypty te mogą działać w środowisku , które różni się od środowiska, w którym byłby uruchamiany .
- Czasami skrypt w repozytorium kontroli wersji nie pasuje do struktury obiektu, który został przetestowany, a następnie błędy będą miały miejsce w produkcji w postaci !
Jest o wiele więcej, ale myślę, że masz zdjęcie.
Co stwierdziliśmy, że działa to:
- Użyć egzekwowane system kontroli wersji, która wymusza check-out/operacje zameldowania na obiektach bazy danych. To sprawi, że repozytorium kontroli wersji będzie zgodne z kodem, który został zarejestrowany pod numerem , ponieważ odczytuje metadane obiektu w operacji check-in , a nie jako oddzielny krok wykonany ręcznie. Umożliwia to także kilku programistom równoległą pracę w tej samej bazie danych, podczas gdy zapobiega przypadkowemu nadpisaniu każdego innego kodu.
- pomocą analizy skutków, które wykorzystują bazowe jako część porównania celu identyfikacji konfliktów i określić czy różnica (gdy porównując strukturę obiektu pomiędzy repozytorium kontroli źródła i bazy danych) jest prawdziwa zmiana, że pochodzenie z rozwoju lub różnicę pochodzącą z innej ścieżki , a następnie należy ją pominąć, na przykład inną gałąź lub naprawę awaryjną .
- Użyj rozwiązania, które wie, jak wykonać analizę wpływu wielu schematów za jednym razem, używając interfejsu użytkownika lub interfejsu API, aby ostatecznie uzyskać zautomatyzować proces wdrażania wersji &.
Artykuł, który napisałem na ten temat, został opublikowany here, zapraszamy do lektury.
@marc_s Dzięki za poprawienie literówki. – Souper