Zřetězené joiny a využití NotORM vs. Dibi
- Macicek
- Člen | 4
Nedávno sem se rozhodl začít s Nette a použít ho jako výstup k databázi fotografií, která obsahuje mimojiné i celkem složité struktury dat od geografických, po exif, atd.
A celkem často je třeba použít relativně složíte dotazy se
zřetězenými joiny, např. i v kombinaci s různymi GROUP BY-HAVING
`SELECT * FROM table
LEFT JOIN table2 ON table.id=table2.id
LEFT JOIN table3 ON table2.id=table3.id
LEFT JOIN table4 ON table2.id=table4.id
…`
Postupovat jsem podle quickstartu, takže jsem zkoušel Nette\Database a asi mi nesedne úplně logika NotORM, ale brzo jsem se rozhodl ji vyměnit za Dibi.
Měl bych tedy dotaz, v připadě, že se bude jednat vyloženě o aplikaci, která bude postavena jako jakási fotobanka a jeden z hlavních stavebních kamenů bude možnost pracovat se složitými databázemi… je vhodnější použít Dibi? Neb co se tak postupně prokousávám dokumentací, tak z toho dostávám pocit že proti Nette\Database / NotORM už je tak trochu deprecated :).
- Jan Tvrdík
- Nette guru | 2595
Macicek wrote: co se tak postupně prokousávám dokumentací, tak z toho dostávám pocit že proti Nette\Database / NotORM už je tak trochu deprecated :).
Omg. Kde na tyhle fámy chodíte? dibi není deprecated, nedávno vyšla dibi 2.0. Rozdíl je akorát v tom, že protože dibi je už vyladěná knihovna, tak nemá tak aktivní vývoj. V Nette\Database se naproti tomu neustále něco opravuje.
- stekycz
- Člen | 152
Mě osobně na složitější dotazy více vyhovuje Dibi. S NotORM logikou jsem se nedokázal sžít ani po 3 měsících aktivního používání. Ale v principu jen záleží na tom, jaké kdo má preference. Pokud se ti s \Nette\Database a potažmo NotORM pracuje mnohem hůře než s Dibi, tak jednoznačně použij Dibi. Pokud to máš obráceně, tak bych použil \Nette\Database.
- Šaman
- Člen | 2666
Bohužel, začátečník k tomuto závěru dospěje, protože na tomto fóru sekce Dibi není a v dokumentaci je jen jedna zmínka ve FAQ, zatímco o Nette\Database je stránka v dokumentaci a je použitá v sandboxu.
Mě osobně to připadá trochu nešťastné rozhodnutí, protože pokud chci používat Dibi, tak mám v projektu zcela zbytečně dvě databázové vrstvy. A začátečníkům bych doporučil Dibi bez fluent, protože je méně magické a programátor je blíže SQL dotazům.
Pro lepší informovanost čtenářů dokumentace bych prosil o doplnění výše zmíněného odkazu na začátek stránky Databáze & ORM, můžete to někdo s editačními právy zařídit, pls?
- Macicek
- Člen | 4
Já právě všude viděl Nette\Database + zmínky o tom jak je NotORM geniální a mělo by se využívat jak jen to jde + je to samozřejmě aktivní projekt. Dibi tu bylo zmíněno spíše ve starší dokumentaci. Tak sem si nutně řekl, to Nette\Database musí bejt bomba. Sice nebyl problém vytvořit SQL dotaz s jedním JOINem, ale jakmile jsem potřeboval těch joinů více, do toho třeba nedej bože nějakou tu agregační funkci, tak tu po 6-ti hodinách zemřelo pár ještě nenarozených tučňáků.
Navíc vycházím z C++ prostředí, kde veškerou tu magii na pozadí vnímám více, než podežřele, takže je mi příjemnější Dibi, kde se SQLka „solí rovnou“.
Spíš by mě zajímalo, jestli to není nevhodné rozhodnutí.
S těma databázovejma vrstvama to myslíš jak? Já si nastavil Dibi připojení v configu, načetl Dibi rozšíření v bootstrapu a teď už si vždy jen zaregistruju service a napíšu třídu modelu nad danou tabulkou, ze které pak čerpám pomocí Presenteru. Přijde mi to dost podobný jako Nette\Database way (nebo aspoň to co jsem pochytil z quickstartu), jen s trochu větším overheadem neb tam nepoužívám továrny.
Editoval Macicek (25. 3. 2012 16:06)
- stekycz
- Člen | 152
Macicek napsal(a):
S těma databázovejma vrstvama to myslíš jak? Já si nastavil Dibi připojení v configu, načetl Dibi rozšíření v bootstrapu a teď už si vždy jen zaregistruju service a napíšu třídu modelu nad danou tabulkou, ze které pak čerpám pomocí Presenteru. Přijde mi to dost podobný jako Nette\Database way (nebo aspoň to co jsem pochytil z quickstartu), jen s trochu větším overheadem neb tam nepoužívám továrny.
Pokud myslíš to, že v projektu jsou dvě databázové vrstvy, tak je to yšleno jen obsahem kódu. \Nette\Database je v projektu vždy, nezávisle na dalších knihovnách a tak ti IDE může napovídat tyto třídy a zabírá to několik kilobytů na disku, případně na serveru. V případě minimalizované verze mi to přijde ale úplně jedno. Možná by to mohl lépe vyřešit Composer, o kterém bude přednáška na nejbližší Poslední sobotě.
S oběma knihovnama se pracuje velice podobně, největší (a snad i jediný) rozdíl je jen v sestavování SQL dotazů, kde \Nette\Database je více magické.