2012-10-17 14 views
7

Mam dobrze skonfigurowany i działający Git Source Control Provider.Jak do kontroli wersji bazy danych SQL Server z dostawcą Git Source Control dostawcy Visual Studio

Dla projektów Visual Studio.

Problem polega na tym, że każdy taki projekt jest ściśle związany z bazą danych SQL Server.

wiem how to version control a database we własnym .git repozytorium, ale to nie jest ani wygodne, ani naprawdę solidne, ponieważ idealnie chciałbym ten sam dodawać, COMMIT, TAG i ODDZIAŁ nakazuje działać na obu drzewach katalogów jednocześnie, w sposób zsynchronizowany.

Czy istnieje sposób na bazę danych Git SQL Server z dostawcą Git Source Control w Visual Studio w opisany sposób?

+1

@marc_s Dzięki za poprawienie literówki. – Souper

Odpowiedz

4

Możesz przechowywać swój schemat bazy danych jako projekt Visual Studio przy użyciu SQL Server Data Tools, a następnie kontrolować ten projekt za pomocą Git.

+0

Nie wiedziałem, że możliwe jest przechowywanie schematu bazy danych jako projektu Visual Studio. To wspaniale! Początkowo myślałem o korzystaniu z SSMS do 'Script Database as'>' DROP AND CREATE To', aby wyeksportować całą zawartość jako tekstowy skrypt do katalogu rozwiązania Visual Studio, ale zintegrowane rozwiązanie takie, jak opisujesz, brzmi bardziej obiecująco. Które narzędzie "Narzędzia danych SQL Server" faktycznie eksportuje? Czy muszę zainstalować cały zestaw narzędzi? +1 – Souper

+1

To jeden pakiet, możesz go pobrać tutaj: http: // msdn.microsoft.com/en-us/data/hh297027 Tutaj masz trochę dokumentacji: http://msdn.microsoft.com/en-us/library/hh272702(v=vs.103).aspx lub filmy: http: // msdn.microsoft.com/en-us/data/hh297028 –

0

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:

  1. 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.
  2. 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ą .
  3. 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.

+0

To jest dobra odpowiedź, która zasługuje na więcej uwagi! Czy mogę dodać, że jeśli zarządzasz aplikacją SQL za pomocą [QueryFirst] (https://marketplace.visualstudio.com/items?itemName=bbsimonbb.QueryFirst), narzędzie może generować metody autotestu dla każdego zapytania, skompilowane do twojego binarnego . W związku z tym możesz przeprowadzić integrację testową pliku binarnego z produkcyjnym DB i upewnić się, że wszystkie zapytania działają i zwrócić te same kolumny, co podczas tworzenia aplikacji. QueryFirst jest * jedynym * narzędziem, o którym wiem, że to zrobi. Zastrzeżenie: napisałem to. – bbsimonbb

Powiązane problemy