Autor Zpráva
qidak
Profil *
Zdravím a prosím o malou konzultaci. Potřebuji vytvořit uživatelskou strukturu podobnou tradičnímu "letadlu", tj tak aby každý uživatel mohl vytvářet další uživatele, a zároveň aby do činnosti každého uživatele viděli všichni jemu hierarchicky nadřazení v jeho větvi. Mělo by to být dimenzované asi na 500 uživatelů celkem a omezeno na max 20 vnořených úrovní.

Jen pro přesnost - ukázka zamýšlené struktury:

- Ředitel
-- Šéfedaktor
--- Fotograf
--- Redaktor
-- Účetní
--- Asistentka

Ředitel vidí do činnosti všem. Šéfredaktor fotografovi a redaktorovi, ale nikoli účetní. Účetní zase vidí jen k asistentce.

Napadá vás nějaké elegantní řešení?

Přemýšlel jsem o rekurzi, kterou bych zkusil získat pole s ID nadřízených a druhé pole s ID dětí.
Jako další variantu zvažuju uložení všech nadřízených i dětí přímo do databáze ke každému uživateli a osud je načítat, případně updatovat.

Elegance ale oběma řešením chybí, navíc se obávám že by to bylo pomalé...
Alphard
Profil
Tak návrhově by měl mít každý uživatel referenci na svého nadřízeného (nebo null pro ředitele), maximálně ještě seznam přímých podřízených, to stačí a je to čisté.
A teď jde o to, jak to chcete implementovat. Kdyby v PHP nebo v databázi podporující hierarchii, stačí to takto. Pokud to má být třeba v MySQL, nabízí se traverzování kolem stromu. Viz např. www.interval.cz/clanky/metody-ukladani-stromovych-dat-v-relacnich-databazich, je to častý problém, nevidím tady nic unikátního. Algoritmy na vytahování i modifikaci dat jsou na blogu u Jakuba Vrány.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: