Egoblog.cz - Petr Kobelka

Lexikální stromy - ukládání hierarchických dat

Hodně Vás budou učit a do Vás tlačit, aby jste využívali binární stromy, odkazování na předka přes jeho integer ID atd. Ukážu Vám i jinou cestu.


Webdesign | Komentáře (0) | Shlédnuto 864 × | Vloženo: 30. července 2013

Co jsou to hierarchická data?

Pohledem selského rozumu jde o data, která mají hierarchii - tedy některá jsou nadřazená a jim jsou některá podřízená. Britská monarchie je typickým příkladem hierarchie, kdy nahoře, úplně nahoře, je královna, pod ní je parlament a pod ním jsou občané britského království.

Co je to lexikální strom?

Lexikální strom využívá k odkazování unikátní ID, které zároveň obsahuje kompletní cestu zpátky přes všechny předchůdce až ke kořenu stromu. Velmi často se k takovému ID využívají znaky abecedy, protože je pak mnohem jednodušší s nimi pracovat (kvůli lidské představivosti, ne rychlosti aplikace).

Nepoužívejte znak CH, protože to jsou 2 spojené znaky a to není možná jednoduše používat aniž by jste docházeli k chybám ve vazbách.

Příklad hierarchického stromu

Jeden příklad je lepší než tisíce slov, proto se pod touto vědou podívejte na typickou implementaci hierarchivkého stromu.

ID NAZEV
NULL pomyslný kořen stromu
A Můj e-shop
AA Něco o mě
AB Moji Zákazníci
AC Obchodní podmínky
B Oblečení pánské
BA BUndy
BB košile

Jak na to?

Základem je si dobře spočítat kolik můžete mí podvětví. Tohle může být nevýhodou vůči stromům, které přímo odkazují na ID (int) svého předka. Potomek lexikálního stromu to dělá nepřímo (je uvedeno v ID potomka). V případě odkazování na předka přes integer máme mnohem více možných podstromů, než v případě lexikálního, na druhou stranu v lexikálním stromu hned vidíme, co musíme udělat, abychom se dostali o 2 úrovně výše (všechny informace jsou v ID potomka). V případě integer to musíme (rekurzivně?) dopočítat.

Jako příklad vezmu nějaký e-shop. Vím co chci prodávat a tudíž můžu bez problémů stanovit maximální počet větví (tedy podkategorií). ID takového potomka v lexikálním stromu je tedy řetězec znaků! Použiju li příklad výše pak klasický binární strom bude vypadat např. takto:

ID ID-PREDEK NAZEV
1 0 Můj e-shop
2 1 Něco o mě
3 1 Moji Zákazníci
4 1 Obchodní podmínky
5 0 Oblečení pánské
6 5 BUndy
7 5 košile

kdežto lexikální strom bude vypadat následovně:

ID NAZEV
A Můj e-shop
AA Něco o mě
AB Moji Zákazníci
AC Obchodní podmínky
B Oblečení pánské
BA Bundy
BB košile

Hned máme o sloupeček méně a např. hned vidíme, že Bundy jsou z pánského oblečení - šetříme počty dotazů do databáze.

Závěr o lexikálním stromu?

Můj názor je, že je to velice užitečný nástroj, který má své uplatnění v mnoha možných problémech. Jeho slabinou pak je využívání řetězců jako ID což vede ke slabším výkonům v databázi. Hodí se tedy spíše k menším projektům.

Petr Kobelka | Egoblog.cz | Tvorba www stránek - www.petrkobelka.cz

Petr Kobelka
Autor je zkušeným web developerem a programátorem s více než 10 letými zkušenostmi. Pracuje jako programátor pro známou Olomouckou společnost zabývající se tvorbou internetových a intranetových řešení. Spolu se zaměstnáním pracuje na volné noze a zabývá se tvorbou internetových stránek. Ve volném čase rád fotí, jezdí na kole, plave a cestuje.

Komentáře

E-mail je potřeba pouze pro vygenerování Gravataru!

Oups, žádné komentáře? Buďtě první !!!

Blog píše Petr Kobelka

Petr Kobelka - egoblog.cz

Žádám všechny, kteří mají zájem vkládat komentáře, aby se řídili pravidly NETikety. Komentáře, porušující tato pravidla můžou být bez varování smazány.