Verzování změn struktury databáse

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ZETCHA
Člen | 59
+
0
-

Měl bych dotaz.
Před časem jsem na pár měsíců zavítal do vod Ruby a Ruby on Rails.
Po návratu do světa PHP mi chybí jedna šikovná věc při vývoji ve větším týmu a nasazování jednotlivých změn na web.

Jedná se o verzování změn v DB tzv. migrace. Hledal jsem na webu nějaké šikovné a přitom jednoduché řešení pro PHP. Zatím jsme neuspěl. Máte někdo s tímto zkušenosti popřípadě nějaké dostupné řešení?

Ideál je samozřejmě ukládání jednotlivých změn do dokumentů v rámci projektu a jejich obsluha např. z příkazové řádky (tak jako v Railsech). Výhoda je zřejmá – možnost verzovat dokumenty v SVN, GIT, … a zautomatizovat provedení změn v instal. scriptu.

Dík za Vaše zkušenosti.

Mikulas Dite
Člen | 756
+
0
-

Jde udržovat nějaký soubor s sql pro vytvořením tabulek (případně i databáze). Dobře se to verzuje a deploy je taky hračka. Jediný problém je občas v přenášení dat mezi původní a novou verzí, to se ale moc vyřešit nedá.

ZETCHA
Člen | 59
+
0
-

To samozřejmě jde, ale je to dosti nepřehledné (hlavně u aplikací s velkým množstvím tabulek).

Preferoval bych jednotlivá změna = jeden soubor. V DB by byla tabulka ve které je zapsaná verze stavu DB. Z příkazové řádky spustit všechny aktualizace DB nebo jen jednotlivé, popřípadě mít možnost vrátit se k předchozí verzi. Pak by šlo i zautomatizovat upozornění, že po updatu z SVN je zapotřebí udělat migrace.

Mikulas Dite
Člen | 756
+
0
-

Mít všechny soubory není potřeba, protože se to přeci verzuje. Situace, že se vrátí db a ne kód nestojí za složité workflow.

S nepřehledností více méně souhlasím, ale i pár desítek CREATE TABLE je docela čitelné. Navíc se z toho dá snadno generovat UML, což jednotlivé ALTER TABLE v různých souborech nedokážou zdaleka tak dobře.

ZETCHA
Člen | 59
+
0
-

Hmm, nevím jestli ti teď rozumím. Pokud budu udržovat jeden soubor ve kterém budu mít definici všech tabulek a budu ho verzovat tak mi to neřeší případy změn v DB. Nechci mazat a znovu vytvářet novou strukturu.

Potřebuji právě jen ten jednotlivý alter. Mohu to přidávat do toho souboru, ale bojím se, že u větších a dlouhodobě vyvíjených projektů se časem začneme ztrácet.

Nemluvě o případech kdy se do toho jednoho souboru přidá úprava DB (dokud si ji pamatuji) související s ještě nedokončenými úpravami kódu a aplikace po migraci DB přestane fungovat.

V případě jednotlivých souborů kde by byli nadefinovány akce pro upgrade i downgrade DB by to znamenalo couvnout v migraci zpět a hotovo (samozřejmě mimo případů ztrát dat), ale pokud dobře chápu tvůj návrh – bylo by s tím více práce.

Co se týká UML – nedokážu posoudit. Jsem ním zatím nedotčen.

Filip Procházka
Moderator | 4668
+
0
-

Nebudeš se ztrácet, je to prosté. Stačí si udělat na začátku souboru „counter“

1234_feature_kratky_popis_upravy.sql

Funguje to. A pokud potřebuju nějaké UML, tak si buďto zobrazím strukturu v Admineru, nebo si aktuální sql struktury vygeneruju :)

A vůbec se neboj toho, že tam dáš strukturu i aktualizace dat na převod na novou strukturu. Je to aspoň hezky pohromadě a ví se co se tou aktualizací má změnit/změnilo.

BigCharlie
Člen | 283
+
0
-

Myslím, že hledáš tohle. Koneckonců je to importováno z Ruby. Pokud se nepletu, pracuje/pracoval s tím Jirka Knesl, ten by s tím mohl mít víc zkušeností.

ZETCHA
Člen | 59
+
0
-

Jo tohle je co jsem hledal. Díky

mcmatak
Člen | 490
+
0
-

ruckusing vypadá zajímavě, ale není mi jasné, jak dochází k vrácení databáze, vždyť často jde o změny, kde dochází ke ztrátě kontextu, co třeba odstranění sloupce? kde vezmu data pokud se chci vrátit o verzi níže?

Jan Tvrdík
Nette guru | 2595
+
0
-

AFAIK jsou takové změny prostě nevratné. Měl sis to pořádně rozmyslet.

mkoubik
Člen | 728
+
0
-

V railsech je na tohle tušim IreversibleMigration, která má jenom metodu up (ne down).

mcmatak
Člen | 490
+
0
-

down mi prijde nerealny, ve vetsine pripadu to skoro nejde snad pouzit ja pouzivam uplne jednoduchy skript, vsechny zmeny ukladam v souborech se zvysujicim cislem v nazvu, v databazi je tabulka ktera udrzuje aktualni verzi, skript pak zjistit jeslti existuji soubory s vyssim cislem verze a ty proste importuje do databáze, skript má asi 10 řádků … down bohužel neřeším