хранение графа в БД

Sync

Новичок
хранение графа в БД

Интересует оптимальная структура таблиц для хранение графа в базе данных.

Задача состоит в построении отношений между сотрудниками фирмы.

Например, Иванов (И) является начальником для Петрова (П) и Сидорова (С), Вася (В) - заместитель И, то есть также может выступать начальником П и С. В свою очередь П может иметь своих подчиненных, которые могут подчиняться И и В, а могут и нет. То есть насколько я понимаю все сводиться в организации подобного рода связей. (подчиняется, коллега, заместитель, просто сотрудник и тд.). При изображении всего этого на бумаге я вижу граф, можете поправить если не прав.

Что значит оптимальная структура? Чтобы с минимальными затратами находить подобного рода штуки:

- нахождение цепочки от сотрудника до последнего его подчиненного

- аналогично от сотрудника до самого высшего начальника над ним

- нахождение всех подчиненных первого (второго, ...) уровня (то есть прямых, посредственных,... подчиненных)

- аналогично всех стоящих выше.

и т.д.
 

Tor

Новичок
- таблица узлов
- таблица связей

дальше разжевывать?
 

Sync

Новичок
Автор оригинала: Tor
- таблица узлов
- таблица связей

дальше разжевывать?
узлы

employ_id name


связи

link_id name
1         podchinen
2         nachalnik
3         friend


узлы-связи

employ_1 employ_2 link_id
1              2          1        
1              3          3        
3              2          2


Типа такого?

-~{}~ 06.03.06 14:55:

Автор оригинала: ZN
Nested Sets ?
не совсем подходят. в nested sets нужно что-то допридумывать со связями отдельных веток. (это когда речь идет не только о "подчиненности" и "начальстве")

да и вообще, связи эти могут быть разными
 

Sync

Новичок
Вот поганял эту структуру и вижу, что она далека от идеала. Трудности возникают, например, при нахождении цепочки от одного сотрудника к другому, нахождении подчиненных второго ранга (то есть, подчиненных моих подчиненнных).
Все-таки должно существовать какое-то решение наподобии деревьев?
Если кто встречал такое, ткните пожалуйста.
 

Sync

Новичок
Автор оригинала: baev
http://forum.dklab.ru/viewtopic.php?p=69500#69500

Между прочим, эта ссылка здесь в FAQ имеется:
http://phpclub.ru/faq/wakka.php?wakka=Tree/Al&v=4nm
Спасибо.

В деревьях и списках смежности насколько я понимаю главным принципом структур является иерархия (вложенность). Я же говорю именно про представление ГРАФА.

Вот что-то нужное нарыл тут:

http://xpoint.ru/forums/computers/dbms/misc/thread/30669.xhtml

http://xpoint.ru/know-how/SUBD/HranenieDrevovidnyihStruktur?5
 
Сверху