Lze tohle resit pres SQL?

Vladimir Naprstek vladimir.naprstek na prodeco.cz
Středa Duben 19 15:30:02 CEST 2000


Petr Novotny wrote:

> [*] Nevim, jak se te strukture rika. Proste kazda vec ma nekolik
> predchudcu (lezicich nad), nekolik nasledovniku (lezicich pod) a
> sipky vedou jen shora dolu.
>
> Otazka: Lze neco takovehoto resit na SQL urovni? Myslim tim, lze
> z uvedeneho grafu nejak zkonstruovat pospojovani tabulky samy se
> sebou, aby se nakonec polozil jeden (nebo nekolik malo) SQL
> dotaz? Nebo to holt mam delat cele v pameti (vcetne vycteni te
> SQL tabulky, ktera ma nekolik desitek tisic zaznamu)?

Urcite to lze, je zalezi na tom, jak chcete stromem cestovat (jak hodne,
jak casto, jak rychle, ...). Sam neco podobneho pouzivam, i kdyz si ukladam
jen "cestu dolu".

napr. tabulka tab obsahuje pole:
id
hodnota
horni
dolni

do pole horni resp. dolni budete ukladat hodnotu id nadrizeneho resp.
podrizeneho prvku.
Potom hledani hodnot nadrizeneho i podrizeneho je jednoduche:
SELECT hodnota FROM tab WHERE id = aktualni_prvek.horni;
SELECT hodnota FROM tab WHERE id = aktualni_prvek.dolni;

A presun ve stromu je obdobou, jen selektujete misto pole hodnota pole id.
Ovsem cestovani naraz o vice urovni uz se bude muset provadet postupnym
prechazenim o jednu uroven. A nezapomenout osetrit hodnoty NULL v nejvyssim
a nejnizsim prvku.

Pokud si budete ukladat jen cestu dolu (tzn. vypustite pole horni), pak
cestu vzhuru lze realizovat i takto:
SELECT hodnota FROM tab WHERE dolni = aktualni_prvek.id; (neboli hledam
polozku, ktera ukazuje na aktualni prvek stromu).

Pri tabulce "tera ma nekolik desitek tisic zaznamu" je pouziti DB jen
chvalihodne, mohl byste totiz uvrtet disk pri swapovani....

--
Vladimir Naprstek
e-mail vladimir.naprstek na prodeco.cz





Další informace o konferenci Databases