W jaki sposób grupa może śledzić schemat bazy danych?

67

Jakie metody kontroli wersji pomagają zespołom ludzi śledzić zmiany schematu bazy danych?

Toby
źródło
Co próbujesz tutaj osiągnąć? Czy chcesz powiadomić ludzi o zmianach lub utworzyć ścieżkę audytu, kto i co zmienił? Coś zupełnie innego?
ScottCher,
@Scott - Zasadniczo, aby móc tworzyć prawie jak ścieżkę audytu dla innych programistów - dzięki czemu wiemy, że mamy najbardziej aktualny schemat programistów, a witryny testowe i działające na żywo można łatwo sprawdzić, aby zobaczyć, jaki schemat działają.
Toby
1
Jest to podobne do pytania, które właśnie opublikowałem, ale myślę, że są na tyle różne, aby odpowiedzieć na oba dba.stackexchange.com/questions/64/…
Beth Whitezel
1
@BitOff - Zgadzam się i myślę, że moja odpowiedź na pytanie, o którym wspomniałeś, również tutaj stoi. Korzystanie z narzędzia, takiego jak PowerDesigner lub ERWin, może pomóc w kontroli wersji projektu bazy danych - jeśli baza danych jest modelowana zewnętrznie, a wszystkie zmiany są planowane za pomocą modelu, można lepiej kontrolować i rozpowszechniać te zmiany do przeglądu.
ScottCher
1
Sprawdź Liquibase lub Flyway
a_horse_w_na_nazwa

Odpowiedzi:

44

zaledwie kilka minut temu sprawdzałem to: tabela, która powinna istnieć we wszystkich projektach z bazą danych , wydaje się dość prosta do zastosowania w praktyce, sprawdź to:

Nazywa się to schema_version (lub migracje lub cokolwiek, co Ci odpowiada), a jego celem jest śledzenie zmian strukturalnych lub danych w bazie danych. Możliwą strukturą (przykład w MySQL) jest:

create table schema_version (
     `when` timestamp not null default CURRENT_TIMESTAMP,
     `key` varchar(256) not null,
     `extra` varchar(256),
     primary key (`key`)
) ENGINE=InnoDB;

wstaw do wartości schema_version ( key, extra) („001”, „wersja schematu”);

Niezależnie od tego, czy dodasz tę tabelę od początku projektu, czy zaraz po wdrożeniu pierwszej wersji na serwerze pomostowym lub produkcyjnym, zależy od Ciebie.

Ilekroć trzeba wykonać skrypt SQL, aby zmienić strukturę bazy danych lub przeprowadzić migrację danych, należy również dodać wiersz w tej tabeli. I zrób to za pomocą instrukcji insert na początku lub na końcu tego skryptu (który jest przypisany do repozytorium kodu projektu).

eiefai
źródło
1
@David - jest to pytanie samo w sobie, ale czy mógłbyś bardzo szybko wyjaśnić, w jaki sposób tabela może przekazać informacje zwrotne Twojemu VCS? Tylko z ręcznym zrzutem?
Toby
@Toby - po wdrożeniu skrypty zostały umieszczone w SVN, a programista dostarczył błąd SVN rev lub błąd JIRA # - my (dbas) umieściliśmy ich szybkie notatki i rev # w tej tabeli. Aby jednak to ze sobą powiązać, stworzyliśmy stronę internetową, która wskazuje ten stół za pomocą hiperłącza do JIRA.
David Hall
Tak. Zasadniczo OP ma to do tyłu - używasz skryptów wdrażania, które aktualizujesz, nie pracujesz z delt bazy danych. Te i tak działają tylko w zdegenerowanych (uproszczonych) przypadkach - może być konieczne wykonanie wieloetapowych przekształceń w celu zaktualizowania schematu, którego narzędzie nie może wygenerować wstecz. Ale skrypty wdrażania mogą sobie z tym poradzić.
TomTom,
23

Myślę, że najlepszą metodą jest wygenerowanie bazy danych w ramach procesu kompilacji . Trzymaj wszystkie skrypty pod kontrolą źródła wraz z resztą kodu, a każdy jest odpowiedzialny za własne środowisko.

W przeciwnym razie RedGate ma narzędzie do zintegrowania kontroli źródła z SSMS, a porównywanie SQL jest przydatne do porównywania / synchronizacji schematów MS SQL Server. Program Visual Studio Database Edition ma również wbudowane narzędzie do porównywania schematów .

Kolejne SO pytanie zaprowadziło mnie do Migrator Dot Net, które zamierzam rozpocząć w czasie mojego wolnego czasu. Wygląda to na dobrą metodę, ale może być bardziej czasochłonną / kosztowną inwestycją, niż jesteś skłonny poczynić.

Larry Smithmier
źródło
„Edycja bazy danych” programu Visual Studio była kiedyś oddzielnym produktem, ale teraz jest dołączana do wydań obejmujących Team Server. Osobiście wolę narzędzie RedGate (porównanie SQL) do synchronizacji.
Tangurena
12

eiefai już wspomniał Tabela, która powinna istnieć we wszystkich projektach z bazą danych . To świetny post na blogu, ale IMO stanowi tylko część drogi do działającego rozwiązania do kontroli wersji bazy danych. Myślę, że każda próba „odpowiedzi” na to pytanie w realnym świecie wymaga uwzględnienia niektórych innych informacji o VCS i bazach danych:

TML
źródło
8

Sądzę, że istnieje kilka różnych punktów widzenia, aby podejść do tego pytania. Uważam, że kąt „pierwsze narzędzie” będzie się różnić w zależności od platformy i osobistych preferencji. Przykład: korzystam z projektu bazy danych w MS Visual Studio, ale nie jestem pewien, czy jest to świetne rozwiązanie dla MySQL. Znam również ludzi, którzy są sprzedawani na swoich ulubionych narzędziach od Redgate, Erwin, Embarcadero itp.

Istnieje również „pierwszy proces” dla tego pytania, które (miejmy nadzieję) zostanie ponownie omówione na tej stronie w kolejnych pytaniach. Najważniejsze w tym procesie jest kontrolowanie schematu i zarządzanie zmianami, dzięki czemu można zastosować zmiany schematu z wersji „x” do wersji „y” praktycznie na żądanie.

Ostateczna odpowiedź na ten temat będzie wyglądać jak książka, więc prawdopodobnie warto zacząć od odwołania się do jednego z nich: Redgate niedawno opublikował darmowy ebook o nazwie „ Przewodnik po bramce Red Development dotyczący tworzenia zespołowego programu SQL Server ” i chociaż istnieje jest wiele do dyskusji, to całkiem dobre miejsce do rozpoczęcia dyskusji, IMO. Wbrew nazwie, duża część materiału w tej książce jest na tyle ogólna, że ​​można ją zastosować do dowolnej bazy danych (nie tylko SQL Server) i dowolnego zestawu narzędzi (nie tylko Redgate). Jeśli jeszcze tego nie widziałeś, zdecydowanie warto to przejrzeć.

Wreszcie, prawdopodobnie warto połączyć w „starszej odpowiedzi” z przepełnienia stosu .

D. Lambert
źródło
5

SchemaCrawler to moje narzędzie do tworzenia pliku tekstowego ze wszystkimi obiektami schematu bazy danych. Zaprojektowałem ten tekst wyjściowy tak, aby był czytelny dla człowieka, a także odróżniał się od podobnych wyników z innego serwera.

W praktyce odkryłem, że wyjście pliku tekstowego schematu bazy danych jest przydatne, gdy jest wykonywane jako część kompilacji. W ten sposób możesz sprawdzić plik tekstowy w systemie kontroli kodu źródłowego i mieć historię wersji, w której ewoluował twój schemat. SchemaCrawler jest również zaprojektowany do automatyzacji tego z poziomu wiersza poleceń.

Sualeh Fatehi
źródło
Zobacz wyrocznię na code.google.com/p/oracle-ddl2svn
popalka