Jak wersja schematu bazy danych?

Jak przygotować swoje delty SQL? czy ręcznie zapisujesz każdy schemat zmieniający SQL do folderu delta, czy masz jakiś zautomatyzowany proces różnicowania?

Interesują mnie konwencje wersjonowania schematu bazy danych wraz z kodem źródłowym. Może hak Pre-commit, który różni schemat?

Poza DbDeploy , jakie istnieją opcje różnicowania delt?

EDIT: widząc odpowiedzi chciałbym wyjaśnić, że jestem zaznajomiony z standardowy schemat uruchamiania migracji bazy danych przy użyciu deltas. Moje pytanie dotyczy samego tworzenia delt, najlepiej automatycznie.

Również, wersjonowanie jest dla PHP i MySQL, jeśli to robi różnicę. (Bez Ruby solutions proszę).

Author: Joe Phillips, 2008-10-06

17 answers

Zobacz

Czy istnieje system kontroli wersji dla zmian struktury bazy danych?

Jak mogę wersję bazy danych MS SQL w SVN?

I Artykuł Jeffa

Get Your Database Under Version Control

Czuję twój ból i żałuję, że nie ma lepszej odpowiedzi. To może być bliżej tego, czego szukałeś.

Mechanizmy śledzenia zmian schematu DB

Ogólnie uważam, że nie ma odpowiedniej, akceptowanej rozwiązanie tego problemu, a ja sam się w tym obszarze kręcę.

 57
Author: harpo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:26

Możesz rzucić okiem na inny, podobny wątek: Jak wersja bazy danych MS SQL w SVN?.

 4
Author: Jason Jackson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:42

Jeśli nadal szukasz opcji: zajrzyj do Nextep designer. Jest to wolne środowisko programistyczne baz danych GPL oparte na koncepcjach kontroli wersji. W środowisku zawsze pracujesz z wersjonowanymi podmiotami i możesz skupić się na rozwoju modelu danych. Po wydaniu, silnik generowania SQL podłączony do systemu kontroli wersji może wygenerować dowolną deltę, której potrzebujesz między wersjami 2, i zaoferuje Ci mechanizm dostarczania, jeśli zajdzie taka potrzeba.

Między innymi rzeczy, można zsynchronizować i odwrócić synchronizację bazy danych podczas rozwoju, tworzyć diagramy modeli danych, zapytania bazy danych za pomocą zintegrowanych klientów SQL, itp.

Zajrzyj na wiki, aby uzyskać więcej informacji : http://www.nextep-softwares.com/wiki

Obecnie obsługuje Oracle, MySql i PostgreSql i jest w Javie, więc produkt działa na systemach windows, linux i mac.

 4
Author: Christophe Fondacci,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-25 05:06:03

Nie zarządzam deltami. Dokonuję zmian w głównej bazie danych i mam narzędzie, które tworzy skrypt budowania oparty na XML bazujący na głównej bazie danych.

Kiedy przychodzi czas na upgrade istniejącej bazy danych mam program, który wykorzystuje skrypt budowania oparty na XML, aby utworzyć nową bazę danych i gołe tabele. Następnie kopiuję dane ze starej bazy danych za pomocą INSERT INTO X SELECT FROM y, a następnie stosuję wszystkie indeksy, ograniczenia i wyzwalacze.

Nowe tabele, nowe kolumny, usunięte wszystkie kolumny są obsługiwane automatycznie i za pomocą kilku małych sztuczek, aby dostosować procedurę kopiowania, mogę obsłużyć zmianę nazw kolumn, zmiany typu kolumn i inne podstawowe refaktoryzacje.

Nie polecałbym tego rozwiązania na bazie danych z ogromną ilością danych, ale regularnie aktualizuję bazę danych, która jest ponad 1GB z 400 tabel.

 2
Author: Darrel Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-06 18:15:44

Nie wspomniałeś, którego RDBMS używasz, ale jeśli jest to MS SQL Server, porównanie SQL Red-Gate było dla nas niezastąpione w tworzeniu delt pomiędzy skryptami tworzenia obiektów.

 2
Author: jalbert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-06 18:20:06

Nie jestem jednym z nich toot własne horn, ale opracowałem wewnętrzną aplikację internetową do śledzenia zmian w schematach bazy danych i tworzenia wersjonowanych skryptów aktualizacji.

To narzędzie nazywa się Brazil i jest teraz open source na licencji MIT. Brazil jest oparty na ruby / ruby on rails i obsługuje wdrażanie zmian do dowolnej bazy danych, która obsługuje Ruby dBi (MySQL, ODBC, Oracle, Postgres, SQLite).

Planowane jest wprowadzenie skryptów aktualizacji do kontroli wersji.

 2
Author: Joakim Bodin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-01 19:58:17

Http://bitbucket.org/idler/mmp - Narzędzie do wersjonowania schematów dla mysql, napisane w PHP

 2
Author: user381751,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-02 05:49:47

Upewniam się, że zmiany schematu są zawsze addytywne. Więc nie opuszczam kolumn i tabel, ponieważ to zap Dane i nie może być wycofane później. W ten sposób kod wykorzystujący bazę danych może zostać wycofany bez utraty danych lub funkcjonalności.

Mam skrypt migracji, który zawiera instrukcje, które tworzą tabele i kolumny, jeśli jeszcze nie istnieją i wypełnia je danymi.

Skrypt migracji działa zawsze, gdy kod produkcyjny jest aktualizowany i po nowym instaluje.

Kiedy chciałbym coś upuścić, robię to usuwając je ze skryptu instalacyjnego bazy danych i skryptu migracji, aby te przestarzałe elementy schematu były stopniowo wycofywane w nowych instalacjach. Z tą wadą, że nowe instalacje nie mogą przejść na starszą wersję przed instalacją.

I oczywiście wykonuję DDL za pomocą tych skryptów i nigdy bezpośrednio w bazie danych, aby zachować synchronizację.

 2
Author: Calmarius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-16 10:51:26

Eksportujemy dane do formatu przenośnego( za pomocą naszego zestawu narzędzi), a następnie importujemy je do nowego schematu. nie ma potrzeby stosowania delta SQL. Gorąco polecam.

 1
Author: Shachar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-06 18:07:56

Używam bazy danych Firebird i używam do tego narzędzia administracyjnego FlameRobin. Ma ładną opcję rejestrowania wszystkich zmian. Może zapisywać wszystko do jednego dużego pliku lub jednego pliku na zmianę bazy danych. Używam tej drugiej opcji, a następnie zapisuję każdy skrypt w oprogramowaniu do kontroli wersji-wcześniej korzystałem z Subversion, teraz korzystam z Git.

Zakładam, że możesz znaleźć jakieś narzędzie MySQL, które ma taką samą funkcję logowania, jak FlameRobin dla Firebird.

In w jednej z tabel bazy danych przechowuję Numer wersji struktury bazy danych, dzięki czemu mogę łatwo uaktualnić dowolną bazę danych. Napisałem również prosty skrypt PHP, który wykonuje te skrypty SQL jeden po drugim na dowolnej docelowej bazie danych (ścieżka do bazy danych i nazwa użytkownika/Hasło są dostarczane w wierszu poleceń).

Istnieje również opcja logowania wszystkich poleceń DML (insert, update delete), a ja aktywuję to podczas modyfikowania niektórych 'domyślnych' danych, które zawiera każda baza danych.

I wrote a nice biała księga o tym, jak to wszystko robię w szczegółach. Artykuł można pobrać wformat pdf wraz z demonstracyjnymi skryptami PHP z tutaj .

 1
Author: Milan Babuškov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-06 19:48:01

Opracowałem również zestaw skryptów PHP, gdzie programiści mogą przesyłać swoje skrypty deltasql do centralnego repozytorium.

W jednej z tabel bazy danych (tbsynchronize) przechowuję numer wersji ostatnio wykonanego skryptu, dzięki czemu mogę łatwo uaktualnić dowolną bazę danych za pomocą interfejsu WWW lub klienta opracowanego specjalnie dla Eclipse.

Interfejs WWW pozwala na zarządzanie kilkoma projektami. Obsługuje również bazy danych "branches".

Możesz przetestować aplikację at http://www.gpu-grid.net/deltasql (Jeśli logujesz się jako administrator za pomocą hasła testdbsync). Aplikacja jest open source i można ją pobrać tutaj: http://sourceforge.net/projects/deltasql

Deltasql jest produkcyjnie używany w Szwajcarii i Indiach, a jest popularny w Japonii.

 1
Author: Tiziano Mengotti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-29 13:26:54

Kilka miesięcy temu szukałem narzędzia do wersjonowania schematu MySQL. Znalazłem wiele przydatnych narzędzi, takich jak migracja Doctrine, migracja RoR, niektóre narzędzia pisane w Javie i Pythonie.

Ale nikt z nich nie spełnił moich wymagań.

Moje wymagania:

  1. Brak wymagań, wyklucz PHP i MySQL
  2. Brak plików konfiguracyjnych schematu, takich jak schemat.yml w doktrynie
  3. potrafi odczytać bieżący schemat z połączenia i utworzyć nowy skrypt migracji, niż reprezentować identyczny schemat w innych instalacjach aplikacji.

Zacząłem pisać moje narzędzie do migracji, a dziś mam wersję beta.

Proszę, spróbuj, jeśli interesuje Cię ten temat. Proszę wysłać mi przyszłe prośby i zgłoszenia błędów.

Kod źródłowy: bitbucket.org/idler/mmp/src Przegląd w języku angielskim: bitbucket.org/idler/mmp/wiki/Home Przegląd w języku rosyjskim: antonoff.info/development/mysql-migration-with-php-project

 1
Author: Maxim Antonov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-07 21:31:42
 1
Author: popalka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-18 16:18:39

Ja też jestem zainteresowany tym tematem.

Istnieje kilka dyskusji na ten temat w Django wiki .

Co ciekawe, wygląda na to, że CakePHP ma wbudowaną wersję schematu za pomocą komendy just cake schema generate.

 1
Author: Swaroop C H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-20 04:26:10

Dla MySQL

Kiedy wyląduję na nowym DB:

Po pierwsze sprawdzam strukturę:

mysqldump --no-data --skip-comments --skip-extended-insert -h __DB_HOSTNAME__ -u __DB_USERNAME__ -p __DB1_NAME__ | sed 's/ AUTO_INCREMENT=[0-9]*//g' > FILENAME_1.sql
mysqldump --no-data --skip-comments --skip-extended-insert -h __DB_HOSTNAME__ -u __DB_USERNAME__ -p __DB2_NAME__ | sed 's/ AUTO_INCREMENT=[0-9]*//g' > FILENAME_2.sql
diff FILENAME_1.sql FILENAME_2.sql > DIFF_FILENAME.txt
cat DIFF_FILENAME.txt | less

Dzięki użytkownikom stackoverflow mogłem napisać ten szybki skrypt, aby znaleźć różnice w strukturze.

src: https://stackoverflow.com/a/8718572/4457531 & https://stackoverflow.com/a/26328331/4457531

W drugim kroku sprawdzam Dane, Tabela po tabeli z mysqldiff. To trochę archaiczne, ale pętla php oparta na danych information_schema make job surely

Do wersjonowania używam tego samego sposobu, ale formatuję skrypt SQL update (upgrade lub rollback) z wynikami diff i używam konwencji numeru wersji (z kilkoma modyfikacjami numer wersji wygląda jak adres ip) .

initial version : 1.0.0
                  ^ ^ ^
                  | | |
structure change: - | |
datas added: -------- |
datas updated: --------
 1
Author: Nolwennig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:26

Używam ścisłego wersjonowania schematu bazy danych (śledzonego w osobnej tabeli). Skrypty są przechowywane w kontroli wersji, ale wszystkie weryfikują aktualną wersję schematu przed dokonaniem jakichkolwiek zmian.

Oto pełna implementacja dla SQL Server (to samo rozwiązanie może być opracowane dla MySQL w razie potrzeby): Jak utrzymać wersję schematu bazy danych SQL Server

 0
Author: Zoran Horvat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-14 14:12:00

Po długim śledztwie zorientowałem się, że istnieją narzędzia stron trzecich lub Typy projektów Visual Studio, które mnie nie satysfakcjonują, lub po prostu blogi o teorii, ale bez implementacji. Zaimplementowałem więc działający system, który jest używany prawie rok, i wyjaśniłem tutaj:

Http://nalgorithm.com/2015/11/09/database-versioning-part-1/

W zależności od zainteresowania, będzie nadal pisać więcej.

 0
Author: Yuksel Daskin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-07 08:57:38