Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: rooobertek 26. 10. 2010, 20:19:01

Název: Ako na verzovanie databáz?
Přispěvatel: rooobertek 26. 10. 2010, 20:19:01
Ahojte

Riešim čo ste určite riešili aj ďalší 1000x - verzovanie databáz.
Pracujem na dvoch projektoch klasika php+mysql. V prvom prípade máme jednu databázu a každý svoju working copy, pracujeme v jednej miestnosti. Druhý prípad je taký, že pracujeme v podstate po celom Slovensku, každý má svoju databázu a working copy. V oboch prípadoch používame subversion.
V prvom prípade db neverzujeme vôbec, v druhom prípade síce verzujeme, ale nemáme v tom žiadny systém. Je to totálny bordel. Aj tak sa musíme kontaktovať mailom a upozorniť na zmeny v db. Pravdupovediac, nenapadá mi, ako do toho systém zaviesť.
Ako to robíte vy?
Název: Re: Ako na verzovanie databáz?
Přispěvatel: Ahmul 26. 10. 2010, 20:37:54
V RoR jsou na tohleto migrace (http://guides.rubyonrails.org/migrations.html) plus exportované schema db ve stejném zápisu, které se nechá verzovat společně se zbytkem kódu. Pro PHP byste mohl najít něco podobného, nebo napsat vlastní. 
Název: Re: Ako na verzovanie databáz?
Přispěvatel: pecko007 26. 10. 2010, 21:01:56
pokial ide o kod, preco nepouzivate git? svn je uz vycerpany prezitok:)
Název: Re: Ako na verzovanie databáz?
Přispěvatel: rooobertek 26. 10. 2010, 22:02:00
V oboch prípadoch je svn hyperluxus :) Nabudúce určite skúsim niečo novšie.

Tie migrations vyzerajú výborne, ale v projekte, kde ešte len trochu zavádzam objekty do kódu písaného za raných čias php4 by to bolo už moc :) A hlavne je to robota navyše, ktorú kolegov nedonútim robiť.
Název: Re: Ako na verzovanie databáz?
Přispěvatel: Logik 26. 10. 2010, 22:09:25
svn je hyperluxus do tý doby, než např. přesuneš jeden adresář jinam (včetně debilního .svn podadresáře) apod - vrátit to pak do funkčního stavu je opruz.

Jinak, co se týče verzování, tak buďto dump databáze, nebo zmíněné migrace
(můžou bejt např. realizovaný i jednoduchym upgrade skriptem), nrbo sofistikovanější systém alá railsy.

Imho nejlepší přístup je mít databázi podobně jako třídy rozdělenou po tabulkách nebo alespoň (v postgres) po schématech a přistupovat k verzování úplně stejně jako se přistupuje k verzování zdrojáků.
Název: Re: Ako na verzovanie databáz?
Přispěvatel: rooobertek 26. 10. 2010, 22:16:10
Tie upgrade skripty ako by som tam mal ukladať? Dátum zmeny? Verzia? Nejaké poradové číslo? Teraz tam máme zmes súborov pomenovaných zhruba podľa popisu zmeny, ale zrejme niektorým kolegom dochádza predstavivosť, tak dopisujú do tých súborov a je z toho chaos.

2. bolo by teoreticky možné napísať skript, ktorý by z diffu dvoch dumpov vedel spoľahlivo robiť tie upgrady?
Název: Re: Ako na verzovanie databáz?
Přispěvatel: pecko007 26. 10. 2010, 22:44:21
heh, svn ako hyperluxus:D vazne skus git, potom uvidis intergalaktickymegahyperluxus:D ale teraz vazne. spominal si aj kod, preto som ti na to odporucil tento nastroj. co sa db tyka, hm, no mozno aj tie dumpy by sli. s gitom potom trivialna vec. treba si len ozrejmit system a dodrziavat ho. pred skoncenim prace pushnut do repa a rano na zaciatku pullnut. vsetko veci na sekundy:) a mozno by sa to dalo aj zautomatizovat. ale urcite by som uvazoval nad gitom. jednoznacne:)
Název: Re: Ako na verzovanie databáz?
Přispěvatel: PCnity 26. 10. 2010, 22:59:17
U nas ma kazdy dev svoj branch a svoju working copy... Avsak kazdu zmenu db layoutu musia dat do db_layout update sql suboru... S tym potom riesia svoj branch a ked maju svoje upravy dokoncene ziadaju o schvaldenie ich db layout uprav.

Samotna prod databaza obsahuje tabulky v ktorych su uvedene vsetky doteraz aplikovane upravy.

Nasli si proste nejaky system aj na db... Kod je v csv alebo gite ale zeby mali nieco podobne aj na db si nemyslim.
Název: Re: Ako na verzovanie databáz?
Přispěvatel: Logik 27. 10. 2010, 19:26:40
Citace
Tie upgrade skripty ako by som tam mal ukladať?
no je tisíc možností. Od nejhloupější varianty jednoho obrovskýho dumpu - kdy prostě provedeš merge dvou souborů a občas to budeš muset řešit rúčo, po systém, kdy je databáze rozdělená např. po tabulkách - málokdy se sejdou updaty stejnejch tabulek (imho nejčistší řešení), nebo kdy má každej vývojář "svoje" soubory (např. ve tvaru datum.vyvojar.sql) a skript je pak provede ve spravnym pořadí.

Klíčovej je IMHO pohled: "správný" je to, co je v souborech jako definice struktury, nikoli to, co je reálně v databázi (stejně jako člověk nepovažuje za správnej stav zkompilovanej zdroják).
Název: Re: Ako na verzovanie databáz?
Přispěvatel: Developer 28. 10. 2010, 12:14:34
Da sa pouzit javovsky opensource DbDeploy http://dbdeploy.com/ v kombinacii s Phingom.
Název: Re: Ako na verzovanie databáz?
Přispěvatel: asdfasdf 28. 10. 2010, 13:25:06
Zrovna vo včerajšej Sklizni je popísaný Another PostgreSQL Diff Tool:

http://www.root.cz/clanky/softwarova-sklizen-27-10-2010/#apgdiff
Název: Re: Ako na verzovanie databáz?
Přispěvatel: rooobertek 28. 10. 2010, 13:29:37
apgdiff vyzerá fajne, ale som zvedavý, čo to spraví s mysql dumpom. Ak by sa mi moc chcelo, spravím fork :)
Název: Re: Ako na verzovanie databáz?
Přispěvatel: asdfasdf 28. 10. 2010, 19:19:06
Samozrejme existuje nejeden diff pre mysql, stačí použiť google než vytiahneš ťažkú artilériu.