Zřetězené joiny a využití NotORM vs. Dibi

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

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
+
0
-

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
+
0
-

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 | 2639
+
0
-

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
+
0
-

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
+
0
-

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é.