Představte si běžný blogovací systém, kde jsou všechny články uloženy v databázové tabulce. Každý záznam odpovídá jednomu článku a obsahuje jeho text, titulek a datum vložení. Protože systém podporuje více blogů, je tu také informace, do kterého patří, a podporuje-li rozdělení do kategorií, je tu uvedeno číslo kategorie.
Chceme-li zobrazit na titulní stránce 5 nejnovějších spotů, seřadíme tabulku podle datumu od nejnovějšího po nejstarší a vypíšeme prvních pět článků. Je to tak? Není! Je potřeba ještě omezit výběr jen na ty spoty, které náleží do prohlíženého blogu (aby se na titulní stránce nemíchaly příspěvky z různých blogů). A stejně tak je třeba brát v úvahu omezení podle kategorií.
A na toto si musí dávat pozor také plugin, který umí vypsat 5 předchozích příspěvků. Aby náhodou nevypsal příspěvek z jiné kategorie nebo jiného blogu. Tedy naprosto každá funkce (ať už v jádru nebo v pluginu), která pracuje s příspěvky, musí mít toto na zřeteli.
A teď si představte, že náš systém zavede funkci „rozepsaný příspěvek“. Tedy v každém záznamu v databázové tabulce se objeví nová informace – jestli je příspěvek teprve rozepsaný, nebo už dokončený. A je zřejmé, že rozepsané příspěvky se v žádném případě nesmějí na blogu objevit. Co to znamená? Je třeba doplnit všechny funkce využívající databázovou tabulku s příspěvky o filtr, který zabrání zobrazení rozepsaného příspěvku.
Špatná databáze zabila aplikaci
Z předchozího vyplývá jedno: nejen jádro systému, ale každý plugin musí být napsán velmi, velmi sofistikovaně, aby nezačal návštěvníkům zobrazovat Vaše rozepsané články, nebo články patřící do jiných, třeba soukromých blogů. A v případě zavedení některých nových vlastností (např. ony rozepsané články) je třeba všechno znovu předělat.
Je asi jasné, že toto není koncepční řešení. Ideální by bylo, kdyby se filtrování příspěvků mohlo provádět centrálně, a ne v každém kousku kódu zvlášť. A tím se dostáváme zpět k databázi MySQL. Totiž, téměř každá databáze toto centrální filtrování do jisté míry umí. Nazývá se to Pohledy. MySQL o tom ale nemá ani páru.
Mezistupeň
Pokud tedy má běžet sofistikovaná aplikace na databázi MySQL, vyžaduje to od autora programu mnohem více umu a zručnosti. Musí doprogramovat to, co MySQL chybí. Je třeba vytvořit mezistupeň mezi samotnou aplikací a hloupoučkou primitivní databází.
Ale vymyslet a napsat tento mezistupeň je velmi náročný úkol. Proto se ani nedivím, že třeba BLOG:CMS na něco takového zcela rezignoval a obsahuje ono přímé propojení s databází MySQL. Žádný mezistupeň. Sází zkrátka na důvěru ve schopnosti autorů jádra a pluginů.
Komentáře
johno #1
Views v MySQL? Uno momento, por favor.
David Grudl #2
Precioso compańero! Ale než se verze 5 stane běžnou, proteče ještě hodně tequily hrdlem mým 🙂. …Na druhou stranu, ani VIEWs nejsou samospasitelné.
Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.