Jak zbudować bazę danych na podstawie kontroli źródła?

103

Na wiki społeczności SO odbyła się dyskusja na temat tego, czy obiekty bazy danych powinny podlegać kontroli wersji. Jednak nie widziałem zbyt wielu dyskusji na temat najlepszych praktyk tworzenia procesu automatyzacji kompilacji dla obiektów bazy danych.

To był kontrowersyjny punkt dyskusji dla mojego zespołu - zwłaszcza, że ​​programiści i administratorzy baz danych często mają różne cele, podejścia i obawy podczas oceny korzyści i zagrożeń związanych z automatyzacją wdrażania bazy danych.

Chciałbym usłyszeć kilka pomysłów od społeczności SO na temat praktyk, które okazały się skuteczne w prawdziwym świecie.

Zdaję sobie sprawę, że to, które praktyki są naprawdę najlepsze, jest nieco subiektywne, ale myślę, że dobry dialog o tym, jaka praca może być pomocna dla wielu ludzi.

Oto niektóre z moich zwiastunów pytań dotyczących obszarów zainteresowania w tym temacie. To nie jest ostateczna lista - raczej punkt wyjścia dla ludzi, aby pomóc zrozumieć, czego szukam.

  1. Czy środowiska testowe i produkcyjne powinny być budowane z kontroli źródła?
    • Czy oba powinny być budowane za pomocą automatyzacji - czy też produkcja powinna opierać się na kopiowaniu obiektów ze stabilnego, sfinalizowanego środowiska testowego?
    • Jak radzisz sobie z potencjalnymi różnicami między środowiskami testowymi i produkcyjnymi w skryptach wdrożeniowych?
    • Jak sprawdzić, czy skrypty wdrożeniowe będą działać równie skutecznie w środowisku produkcyjnym, jak w testach?
  2. Jakie typy obiektów powinny podlegać kontroli wersji?
    • Tylko kod (procedury, pakiety, wyzwalacze, java itp.)?
    • Indeksy?
    • Ograniczenia?
    • Definicje tabel?
    • Skrypty zmiany tabeli? (np. ALTER skrypty)
    • Wszystko?
  3. Które typy obiektów nie powinny podlegać kontroli wersji?
    • Sekwencje?
    • Dotacje?
    • Konta użytkowników?
  4. Jak należy zorganizować obiekty bazy danych w repozytorium SCM?
    • Jak radzisz sobie z jednorazowymi rzeczami, takimi jak skrypty konwersji lub skrypty ALTER?
    • Jak radzisz sobie z wycofywaniem obiektów z bazy danych?
    • Kto powinien być odpowiedzialny za promowanie obiektów z poziomu deweloperskiego do poziomu testowego?
    • Jak koordynujesz zmiany wprowadzone przez wielu programistów?
    • Jak radzisz sobie z rozgałęzianiem obiektów bazy danych używanych przez wiele systemów?
  5. Jakie wyjątki, jeśli w ogóle, można rozsądnie wprowadzić w tym procesie?
    • Problemy z bezpieczeństwem?
    • Dane, których dotyczy brak identyfikacji?
    • Skrypty, których nie można w pełni zautomatyzować?
  6. W jaki sposób można uczynić proces odpornym i wykonalnym?
    • Do błędu programisty?
    • Nieoczekiwane problemy środowiskowe?
    • Do odzyskiwania po awarii?
  7. Jak przekonasz decydentów, że korzyści płynące z DB-SCM naprawdę uzasadniają koszty?
    • Dowody anegdotyczne?
    • Badania branżowe?
    • Zalecenia dotyczące najlepszych praktyk w branży?
    • Apelacje do uznanych autorytetów?
    • Analiza kosztów i korzyści?
  8. Kto powinien „posiadać” obiekty bazy danych w tym modelu?
    • Deweloperzy?
    • DBA?
    • Analitycy danych?
    • Więcej niż jeden?
LBushkin
źródło
3
Głębia tego pytania prosi o nagrodę.
Greg D
Zobacz także stackoverflow.com/questions/115369/…
Tim Abell,

Odpowiedzi:

53

Oto kilka odpowiedzi na Twoje pytania:

  1. Czy środowiska testowe i produkcyjne powinny być budowane z kontroli źródła? TAK
    • Czy oba powinny być budowane za pomocą automatyzacji - czy też produkcja powinna opierać się na kopiowaniu obiektów ze stabilnego, sfinalizowanego środowiska testowego?
    • Automatyzacja dla obu. NIE kopiuj danych między środowiskami
    • Jak radzisz sobie z potencjalnymi różnicami między środowiskami testowymi i produkcyjnymi w skryptach wdrożeniowych?
    • Używaj szablonów, aby faktycznie tworzyć inny zestaw skryptów dla każdego środowiska (np. Odniesienia do systemów zewnętrznych, połączonych baz danych itp.)
    • Jak sprawdzić, czy skrypty wdrożeniowe będą działać równie skutecznie w środowisku produkcyjnym, jak w testach?
    • Testujesz je na środowisku przedprodukcyjnym: testowe wdrażanie na dokładnej kopii środowiska produkcyjnego (bazy danych i potencjalnie innych systemów)
  2. Jakie typy obiektów powinny podlegać kontroli wersji?
    • Tylko kod (procedury, pakiety, wyzwalacze, java itp.)?
    • Indeksy?
    • Ograniczenia?
    • Definicje tabel?
    • Skrypty zmiany tabeli? (np. ALTER skrypty)
    • Wszystko?
    • Wszystko i:
      • Nie zapomnij o statycznych danych (listach wyszukiwania itp.), Więc nie musisz kopiować ŻADNYCH danych między środowiskami
      • Zachowaj tylko aktualną wersję skryptów bazy danych (oczywiście kontrolowaną wersją) i
      • Przechowuj ALTER skrypty: 1 BIG skrypt (lub katalog skryptów o nazwie polubione 001_AlterXXX.sql, aby uruchomienie ich w naturalnej kolejności sortowania zaktualizowało wersję A do B)
  3. Które typy obiektów nie powinny podlegać kontroli wersji?
    • Sekwencje?
    • Dotacje?
    • Konta użytkowników?
    • patrz 2. Jeśli twoi użytkownicy / role (lub techniczne nazwy użytkowników) są różne w różnych środowiskach, nadal możesz je skryptować za pomocą szablonów (patrz 1.).
  4. Jak należy zorganizować obiekty bazy danych w repozytorium SCM?
    • Jak radzisz sobie z jednorazowymi rzeczami, takimi jak skrypty konwersji lub skrypty ALTER?
    • patrz 2.
    • Jak radzisz sobie z wycofywaniem obiektów z bazy danych?
    • usunięty z DB, usunięty z pnia / końcówki kontroli źródła
    • Kto powinien być odpowiedzialny za promowanie obiektów z poziomu deweloperskiego do poziomu testowego?
    • harmonogram tworzenia / testowania / wydawania
    • Jak koordynujesz zmiany wprowadzone przez wielu programistów?
    • NIE próbuj tworzyć osobnej bazy danych dla każdego programisty. używasz kontroli źródła, prawda? w tym przypadku programiści zmieniają bazę danych i wpisują skrypty. aby być całkowicie bezpiecznym, odtwórz bazę danych ze skryptów podczas nocnej kompilacji
    • Jak radzisz sobie z rozgałęzianiem obiektów bazy danych używanych przez wiele systemów?
    • trudny: staraj się unikać za wszelką cenę.
  5. Jakie wyjątki, jeśli w ogóle, można rozsądnie wprowadzić w tym procesie?
    • Problemy z bezpieczeństwem?
    • nie przechowuj haseł do testów / produktów. możesz pozwolić na to dla programistów, zwłaszcza jeśli zautomatyzowałeś codzienne / nocne przebudowy bazy danych
    • Dane, których dotyczy brak identyfikacji?
    • Skrypty, których nie można w pełni zautomatyzować?
    • dokumentuj i przechowuj za pomocą skryptu informacji o wersji / ALTER
  6. W jaki sposób można uczynić proces odpornym i wykonalnym?
    • Do błędu programisty?
    • testowane z codzienną kompilacją od podstaw i porównaj wyniki z aktualizacją przyrostową (z wersji A do B przy użyciu ALTER). porównaj zarówno wynikowy schemat, jak i dane statyczne
    • Nieoczekiwane problemy środowiskowe?
    • użyj kontroli wersji i kopii zapasowych
    • porównaj schemat bazy danych PROD z tym, co myślisz, że jest, zwłaszcza przed wdrożeniem. SuperDuperCool DBA mógł naprawić błąd, którego nigdy nie było w twoim systemie biletów :)
    • Do odzyskiwania po awarii?
  7. Jak przekonasz decydentów, że korzyści płynące z DB-SCM naprawdę uzasadniają koszty?
    • Dowody anegdotyczne?
    • Badania branżowe?
    • Zalecenia dotyczące najlepszych praktyk w branży?
    • Apelacje do uznanych autorytetów?
    • Analiza kosztów i korzyści?
    • jeśli programiści i DBA się zgodzą, myślę, że nikogo nie trzeba przekonywać (chyba, że ​​potrzebujesz pieniędzy na zakup oprogramowania takiego jak dbGhost dla MSSQL)
  8. Kto powinien „posiadać” obiekty bazy danych w tym modelu?
    • Deweloperzy?
    • DBA?
    • Analitycy danych?
    • Więcej niż jeden?
    • Zazwyczaj DBA zatwierdzają model (przed zaewidencjonowaniem lub po w ramach przeglądu kodu). Zdecydowanie posiadają obiekty związane z performansem. Ale generalnie jest to właściciel zespołu [i oczywiście pracodawca :)]
van
źródło
Dziękuję za odpowiedź! Czy uważasz, że te zalecenia dotyczą wszystkich projektów? Czy znasz jakieś narzędzia, które pomagają osiągnąć ten poziom automatyzacji? Będę aktualizować moje pytanie, w miarę jak coraz więcej osób będzie się nim zajmować. Pamiętaj też, że moje pytania „teaserowe” nie były pomyślane jako ostateczna lista problemów, którymi należy się zająć - ale raczej jako punkt wyjścia do dyskusji.
LBushkin,
Jasny. Myślę, że zadałeś bardzo, bardzo dobre pytanie. I naprawdę mam nadzieję, że to pytanie będzie wystarczająco atrakcyjne, abyś mógł skompilować świetne wiki HowTo na ten temat. ---- z narzędzi: Użyłem dbGhost od Innovartis, o którym wspomniałem w odpowiedziach na zarządzanie serwerem MSSQL i wykonałem świetną robotę. Prawdopodobnie istnieją inne narzędzia do tego zadania, ale biorąc pod uwagę, że pełny schemat SQL nie jest standardem wśród dostawców, nie ma rozwiązania typu „wszystko w jednym” (dla wszystkich SCM i RDMBS).
van
Dobra odpowiedź. Zakładam, że „listy wyszukiwania” oznaczają dane używane do wypełniania pól <select>? Nie zawsze jest to możliwe, ponieważ dane te mogą być modyfikowane przez użytkowników (w jakiś sposób) na produkcji. Przechowywanie kopii zapasowych ma w tym przypadku sens. Sugerujesz także odtworzenie bazy danych od podstaw w ramach nocnej kompilacji. Nie sądzę, że to dobry pomysł; może usunąć trwającą pracę lub wymagać ponownej instalacji / konfiguracji innego oprogramowania. Na koniec sugerowałbym tworzenie trybów testowych, walidatorów danych i innych narzędzi zamiast budowania od zera, aby zapewnić odporność procesów.
Richard Levasseur
@Richard. Dobre punkty, ale jednak. Kiedy czytasz „zbuduj bazę danych od podstaw”, nie zawsze oznacza to usunięcie danych. Ma na celu przebudowanie schematu i danych statycznych. Jeśli jest jakaś praca w toku (dotycząca schematu lub danych statycznych), powinna znajdować się w kontroli źródła, więc będzie częścią nocnej kompilacji. Jeśli pracujesz w gałęzi z dużym przeprojektowaniem bazy danych, masz oddzielną bazę danych do tego rodzaju rozwoju. A jeśli używasz testów jednostkowych, nie polegasz na stanie danych w bazie danych, ale tworzysz / usuwasz w ramach testu jednostkowego db. --- Dane statyczne do wykorzystania przez użytkowników - zgadzam się.
van
Nie zgadzam się na odbudowywanie baz danych każdej nocy. Podczas gdy wszystko, co definiuje bazę danych, takie jak schematy, wyzwalacze, procedury składowane i niektóre statyczne dane „zarządzane”, powinno być zapisane w postaci skryptów, rzeczywisty materiał nie powinien. Sama treść może być sterowana zadaniami programisty. Mamy programistów, którzy pracują nad zestawami danych do testowania i eksperymentowania. Co by się stało, gdyby przychodzili codziennie, a ich aktualny stan był „zresetowany”? Niedobrze. Używam testów TestNG, które czyści niektóre tabele, a następnie codziennie ładuję dane testowe. Nie brzmi jak kandydat do kontroli źródła.
gregturn
5

Jeśli to możliwe, traktuję SQL jako kod źródłowy

Jeśli mogę napisać to w zgodnym ze standardem SQL to zwykle trafia do pliku w mojej kontroli źródła. Plik będzie definiował jak najwięcej, na przykład SP, instrukcje Table CREATE.

Dołączam też fikcyjne dane do testów w kontroli źródła:

  1. proj / sql / setup_db.sql
  2. proj / sql / dummy_data.sql
  3. proj / sql / mssql_specific.sql
  4. proj / sql / mysql_specific.sql

Następnie wyodrębniam wszystkie moje zapytania SQL, aby móc zbudować cały projekt dla MySQL, Oracle, MSSQL lub czegokolwiek innego.

Automatyzacja kompilacji i testów wykorzystuje te skrypty kompilacji, ponieważ są one równie ważne jak źródło aplikacji i testują wszystko, od integralności po wyzwalacze, procedury i rejestrowanie.

Aiden Bell
źródło
4

Stosujemy ciągłą integrację poprzez TeamCity. Przy każdym meldowaniu się do kontroli źródła baza danych i wszystkie dane testowe są odtwarzane od podstaw, następnie kod, a następnie testy jednostkowe są uruchamiane względem kodu. Jeśli używasz narzędzia do generowania kodu, takiego jak CodeSmith, możesz je również umieścić w procesie kompilacji, aby wygenerować warstwę dostępu do danych na nowo przy każdej kompilacji, upewniając się, że wszystkie warstwy „pasują do siebie” i nie powodują błędów z powodu niezgodne parametry SP lub brakujące kolumny.

Każda kompilacja ma własną kolekcję skryptów SQL, które są przechowywane w katalogu $ project \ SQL \ w kontroli źródła, mają przypisany numeryczny prefiks i są wykonywane w kolejności. W ten sposób ćwiczymy naszą procedurę wdrażania przy każdej kompilacji.

W zależności od tabeli przeglądowej większość naszych wartości wyszukiwania jest również przechowywana w skryptach i uruchamiana, aby upewnić się, że dane konfiguracyjne są zgodne z oczekiwaniami, powiedzmy „kody_przyczyny” lub „kody_kraju”. W ten sposób możemy dokonać zmiany danych wyszukiwania w oprogramowaniu deweloperskim, przetestować je, a następnie „promować” poprzez kontrolę jakości i produkcję, zamiast używać narzędzia do modyfikowania wartości wyszukiwania w środowisku produkcyjnym, co może być niebezpieczne dla czasu pracy.

Tworzymy również zestaw skryptów "przywracania", które cofają zmiany w naszej bazie danych na wypadek, gdyby kompilacja do produkcji uległa awarii. Możesz przetestować skrypty wycofywania, uruchamiając je, a następnie ponownie uruchamiając testy jednostkowe dla wersji kompilacji poniżej Twojej, po uruchomieniu skryptów wdrażania.

Chris McCall
źródło
4

+1 dla Liquibase : LiquiBase to biblioteka typu open source (LGPL) niezależna od bazy danych do śledzenia, zarządzania i stosowania zmian w bazie danych. Jest zbudowany na prostym założeniu: wszystkie zmiany w bazie danych (struktura i dane) są przechowywane w sposób opisowy oparty na XML i sprawdzane w kontroli źródła. Dobrze, że zmiany DML są przechowywane semantycznie, a nie tylko w plikach diff, abyś mógł śledzić cel zmian.

Można go połączyć z kontrolą wersji GIT dla lepszej interakcji. Mam zamiar skonfigurować nasze środowisko dev-prod, aby go wypróbować.

Możesz także użyć systemów kompilacji Maven, Ant do budowania kodu produkcyjnego ze skryptów.

Minusem jest to, że LiquiBase nie integruje się z szeroko rozpowszechnionymi IDE SQL i powinieneś samodzielnie wykonywać podstawowe operacje.

Dodatkowo możesz użyć DBUnit do testowania bazy danych - to narzędzie pozwala na użycie skryptów generujących dane do testowania środowiska produkcyjnego z czyszczeniem w tył.

MOIM ZDANIEM:

  1. Przechowuj DML w plikach, aby móc je wersjonować.
  2. Zautomatyzuj proces tworzenia schematu z poziomu kontroli źródła.
  3. Do celów testowych deweloper może użyć lokalnej bazy danych zbudowanej na podstawie kontroli źródła za pośrednictwem systemu kompilacji + testowanie obciążenia Dane za pomocą skryptów lub skryptów DBUnit (z kontroli źródła).
  4. LiquiBase pozwala na zapewnienie „sekwencji uruchamiania” skryptów w celu poszanowania zależności.
  5. Powinien istnieć zespół DBA, który sprawdza master brunch ze WSZYSTKIMI zmianami przed użyciem produkcyjnym. Mam na myśli, że sprawdzają linię główną / gałąź od innych DBA przed przejściem do linii MASTER. Tak więc mistrz jest zawsze spójny i gotowy do produkcji.

Napotkaliśmy wszystkie wymienione problemy ze zmianami kodu, scalaniem, przepisywaniem w naszej produkcyjnej bazie danych rozliczeniowych. Ten temat jest świetny do odkrywania tego wszystkiego.

zmische
źródło
3

Zadając „teaserowe pytania” wydajesz się być bardziej zainteresowany dyskusją niż czyjąś opinią o ostatecznych odpowiedziach. Aktywna lista mailingowa (> 2500 członków) agileDatabases zawiera odpowiedzi na wiele z tych pytań i, z mojego doświadczenia, stanowi wyrafinowane i obywatelskie forum dla tego rodzaju dyskusji.

Glenn
źródło
Myślę, że jest mało prawdopodobne, aby można było znaleźć jedną, powszechnie uzgodnioną odpowiedź. Chciałbym jednak wskazać kilka wspólnych obszarów porozumienia - i być może zebrać rozsądne zalecenie. Na pewno przyjrzę się też forum agileDatabases, dzięki.
LBushkin
3

Zasadniczo zgadzam się z każdą odpowiedzią udzieloną przez van . Aby uzyskać więcej informacji, moim punktem odniesienia dla zarządzania bazą danych jest seria K. Scotta Allena (lektura obowiązkowa, IMHO. Wydaje się, że także opinia Jeffa ).

  • Obiektów bazy danych można zawsze przebudowany od podstaw poprzez uruchomienie pojedynczego pliku SQL (który sam w sobie może wywołać inne pliki SQL) Create.sql. Może to obejmować statyczne wstawianie danych (listy ...).
  • Skrypty SQL są sparametryzowane, aby żadne informacje zależne od środowiska i / lub wrażliwe informacje nie były przechowywane w zwykłych plikach.
  • Do uruchomienia używam niestandardowego pliku wsadowego Create.sql : Create.cmd. Jego celem jest głównie sprawdzenie wymagań wstępnych (narzędzia, zmienne środowiskowe ...) i przesłanie parametrów do skryptu SQL. Może również ładować zbiorczo dane statyczne z plików CSV w przypadku problemów z wydajnością.
  • Zwykle poświadczenia użytkownika systemu byłyby przekazywane jako parametr do Create.cmdpliku.

IMHO, dynamiczne ładowanie danych powinno wymagać innego kroku, w zależności od środowiska. Programiści będą chcieli załadować swoją bazę danych testami, śmieciami lub wcale, podczas gdy z drugiej strony kierownicy produkcji będą chcieli załadować dane produkcyjne. Rozważałbym również przechowywanie danych testowych w kontroli źródła (na przykład w celu ułatwienia testów jednostkowych).

Po wprowadzeniu pierwszej wersji bazy danych do produkcji będziesz musiał nie tylko zbudować skrypty (głównie dla programistów), ale także skrypty upgrade'owe (na tych samych zasadach):

  • Musi istnieć sposób na pobranie wersji z bazy danych (używam procedury składowanej, ale wystarczyłaby tabela).
  • Przed wydaniem nowej wersji tworzę Upgrade.sqlplik (który może wywoływać inne), który umożliwia aktualizację wersji N-1 do wersji N (N to wydana wersja). Przechowuję ten skrypt w folderze o nazwie N-1.
  • Mam plik wsadowy, który wykonuje aktualizację: Upgrade.cmd. Może pobrać aktualną wersję (CV) bazy danych za pomocą prostej instrukcji SELECT, uruchomić Upgrade.sqlskrypt przechowywany w CVfolderze i zapętlić, aż żaden folder nie zostanie znaleziony. W ten sposób możesz automatycznie uaktualnić, powiedzmy, N-3 do N.

Problemy z tym to:

  • Trudno jest automatycznie porównać schematy bazy danych, w zależności od dostawców baz danych. Może to prowadzić do niekompletnych skryptów aktualizacji.
  • Każda zmiana w środowisku produkcyjnym (zwykle dokonywana przez administratorów baz danych w celu dostrojenia wydajności) powinna również trafić do kontroli źródła. Aby się tego upewnić, zwykle można rejestrować każdą zmianę w bazie danych za pomocą wyzwalacza. Ten dziennik jest resetowany po każdej aktualizacji.
  • Najlepiej jednak byłoby, gdyby zmiany zainicjowane przez DBA były częścią procesu wydawania / aktualizacji, jeśli to możliwe.

Jakiego rodzaju obiekty bazy danych chcesz mieć pod kontrolą źródła? Cóż, powiedziałbym jak najwięcej, ale nie więcej ;-) Jeśli chcesz tworzyć użytkowników z hasłami, podaj im domyślne hasło (login / login, praktyczne do celów testów jednostkowych) i spraw, aby zmiana hasła była operacją ręczną . Dzieje się tak często w przypadku Oracle, gdzie schematy są również użytkownikami ...

Mac
źródło
1

Mamy projekt Silverlight z bazą danych MSSQL w kontroli wersji Git. Najłatwiej jest upewnić się, że masz odchudzoną bazę danych (pod względem zawartości) i wykonać pełny zrzut z np. Programu Visual Studio. Następnie możesz wykonać 'sqlcmd' ze swojego skryptu budującego, aby odtworzyć bazę danych na każdej maszynie deweloperskiej.

W przypadku wdrożenia nie jest to możliwe, ponieważ bazy danych są zbyt duże: to jest główny powód, dla którego warto je umieścić w bazie danych.

Rutger Nijlunsing
źródło
1

Jestem głęboko przekonany, że baza danych powinna być częścią kontroli źródła iw dużym stopniu częścią procesu budowania. Jeśli jest w kontroli źródła, mam takie same zabezpieczenia kodujące podczas pisania procedury składowanej w SQL, jak podczas pisania klasy w C #. Robię to, dołączając katalog skryptów DB do mojego drzewa źródłowego. Ten katalog skryptów niekoniecznie ma jeden plik dla jednego obiektu w bazie danych. To byłby wrzód na tyłku! Rozwijam się w mojej bazie danych tylko w moim projekcie kodu. Następnie, kiedy jestem gotowy do odprawy, robię różnicę między ostatnią wersją mojej bazy danych a bieżącą, nad którą pracuję. Używam do tego SQL Compare i generuje skrypt wszystkich zmian. Ten skrypt jest następnie zapisywany w moim katalogu db_update z określoną konwencją nazewnictwa 1234_TasksCompletedInThisIteration, gdzie numer jest kolejnym numerem w zestawie skryptów, który już tam jest, a nazwa opisuje, co jest robione podczas tego wpisywania. Robię to w ten sposób, ponieważ część mojego procesu budowania Zaczynam od nowej bazy danych, która jest następnie budowana programowo przy użyciu skryptów w tym katalogu. Napisałem niestandardowe zadanie NAnt, które iteruje przez każdy skrypt wykonując swoją zawartość na czystej bazie danych. Oczywiście, jeśli potrzebuję danych, aby przejść do bazy danych, mam też skrypty wstawiania danych. Ma to również wiele zalet. Po pierwsze, wszystkie moje rzeczy są wersjonowane. Po drugie, każda kompilacja jest świeżą kompilacją, co oznacza, że ​​nie będzie żadnych podstępnych rzeczy, które pojawią się w moim procesie rozwoju (takich jak brudne dane, które powodują dziwności w systemie). Po trzecie, kiedy do zespołu programistów dodaje się nowego faceta, po prostu muszą mieć najnowsze informacje, a ich lokalny programista jest dla nich tworzony w locie. Po czwarte, mogę uruchamiać przypadki testowe (nie nazwałem tego „testem jednostkowym”!) W mojej bazie danych, ponieważ stan bazy danych jest resetowany przy każdej kompilacji (co oznacza, że ​​mogę testować moje repozytoria bez martwienia się o dodawanie danych testowych do db).

To nie jest dla każdego.

To nie jest dla każdego projektu. Zwykle pracuję nad projektami od podstaw, co pozwala mi na taką wygodę!

Andrew Siemer
źródło
Miło słyszeć, że używasz narzędzia SQL Compare w ramach cyklu rozwoju bazy danych. Uważamy, że mogliśmy ułatwić programistom wprowadzanie nowych zmian. Sprawdź kontrolę źródła SQL. Działa to równolegle z funkcją Porównywanie SQL, aby ułatwić współpracę programistów, a także umożliwić kontrolę źródła obiektów schematu (pod warunkiem, że używasz SVN lub TFS). red-gate.com/products/sql_source_control/index.htm
David Atkinson
1

Zamiast wdawać się w kłótnie z białą wieżą, oto rozwiązanie, które bardzo dobrze się sprawdziło w przypadku rzeczywistych problemów.

Budowanie bazy danych od podstaw można podsumować jako zarządzanie skryptami sql.

DBdeploy to narzędzie, które sprawdzi aktualny stan bazy danych - np. Jakie skrypty były wcześniej uruchamiane, jakie skrypty są dostępne do uruchomienia, a zatem jakie skrypty są potrzebne do uruchomienia.

Następnie zestawi razem wszystkie potrzebne skrypty i uruchomi je. Następnie rejestruje, które skrypty zostały uruchomione.

Nie jest to najpiękniejsze ani najbardziej złożone narzędzie, ale przy starannym zarządzaniu może działać bardzo dobrze. Jest open source i łatwo rozszerzalny. Gdy uruchamianie skryptów jest ładnie obsługiwane, można łatwo dodać kilka dodatkowych komponentów, takich jak skrypt powłoki, który sprawdza najnowsze skrypty i uruchamia program dbdeploy dla określonej instancji.

Zobacz dobre wprowadzenie tutaj:

http://code.google.com/p/dbdeploy/wiki/GettingStarted

Pablojim
źródło
0

Może się okazać, że Liquibase obsługuje wiele z tego, czego szukasz.

David Plumpton
źródło
0

Każdy programista powinien mieć własną lokalną bazę danych i używać kontroli kodu źródłowego do publikowania w zespole. Moje rozwiązanie jest tutaj: http://dbsourcetools.codeplex.com/ Baw się dobrze, - Nathan

Nathan Rozentals
źródło