Vytvářet (používáte?) pohledy namísto složitějších selectů?

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

Zdravím,
používáte pohledy pro složitější dotazy?
Např. budu mít článek, který může mít nějaké tagy. Logicky dochází k dekompozici a vzniku třetí tabulky clanky_tagy.

Takhle by vypadal např. mysql dotaz s tím, že bych na výstupu chtěl název článku a seznam tagů oddělené čárkou:

<?php
SELECT clanky.name AS nazev, GROUP_CONCAT(tag.name SEPARATOR ', ') AS tagy
FROM clanky
LEFT JOIN clanky_tagy ON clanky.id = clanek_id
JOIN tagy ON tagy.id = tag_id GROUP BY clanky.name;
?>

Kdybych si to definoval jako pohled, tak bych se mohl krásně dotazovat jen jako

<?php
SELECT * FROM nazevPohledu;
?>

takže by to bylo super i pro použití s Nette\Database\Table\Selection

Zatím jsem ale na žádném webu, co jsem spravoval, neviděl, že by někdo používal pohledy, tak jsem k tomu trochu skeptický. Nemá to nějaké extremní nevýhody?

Dělali jste si někdo nějaký benchmark, jestli je rychleší nasypat do db např. tenhle dotaz jako jeden, přes nějakou obecnou metodu v Nette\Database nebo používat tu NotORM syntaxi, kde se vytvoří postupně hned několik dotazů.
V Nette\Database\Table\Selection by asi navíc ani nešlo použít ten group_concat a musel bych to pak implodnout, že?

Ot@s
Backer | 476
+
0
-

Ano, používám to. Resp. pokud je to pro mě výhodnější, tak složitější SQL konstrukce ukládám do pohledu. V kódu to vypadá přehledněji a pokud používáš externí komponenty typu Gridito, tak si ušetříš spoustu starostí. Benchmarky pohledů neřeším, páč mám důvěru v optimalizátor dotazu databázového serveru (pokud ten SQL napíšeš dobře, v pohledu to horší nebude, spíše naopak). Samo to s sebou nese nějaké omezení (např. hodně parametrizovaný/závislý SQL dotaz), ale ty se řeší za pochodu.