Databázový návrh MySQL pro nový web 2.0 projekt
V hlavě se mi spřádají plány na nový komunitní projekt, který bych chtěl v druhé polovině roku spustit. Rozhodl jsem se abstrahovat od klasické kategoriální navigace a vše by mělo být založeno čistě na free taggingu. Na českém a zahraničním internetu lze najít dostatek odstrašujích případů, jak se může tagování zvrhnout. Na většině stránek jsou nálepky úplně zbytečné, na další části stránek přímo vtahují návštěvníky do částí webu, který stojí mimo hlavní záběr. Na WordPress.com se mi naopak líbí, díky nim najdu posty z příslušných kategorií a zároveň tagy, které jsou vzájemně relevantní. Žádný iPhone, sex a webdesign v jednom tag cloudu (ten bude navíc hezky skrytý, aby komunitu neblbl jako našeptávače).
U té příležitosti jsem hledal vhodné databázové schéma, protože špatný návrh databáze by mi při stovkách tisíc položek mohl hezky zatopit. Našel jsem k tomuto tématu pár let starý (ale stále užitečný) článek (návrh + benchmark) srovnávají výkon čtyř řešení: s jednou tabulkou, s jednou tabulkou a fulltextovou optimalizací, dvěmi tabulkami a třemi tabulkami. Je v něm diskutována rychlost v závislosti na počtu položek, ale i variabilitě dat, a to z pohledu různých operací. Nakonec jsem se rozhodl pro trojtabulkovou variantu s vnořenou mapovací tabulkou napojenou na dva primární klíče. Toto schéma využívá třeba WordPress od verze 2.3 a umožňuje autorům pluginů pružně vytvářet libovolné druhy taxonomických řazení. Ve výchozí instalaci se u WordPressu starají tři tabulky o řazení článků do kategorií i přiřazování tagů (viz schéma a popis).