Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Проектирование БД Новый топик    Ответить
 проектирование меню  [new]
olegeos
Member

Откуда:
Сообщений: 139
Как грамотно спроектировать таблицу(цы) меню, чтобы была неограниченая вложенность как узлов так и пунктов?
Или ткните ссылкой...
Что-то вроде такого:
узел1
пункт1
пункт2
узел2
узел1
пункт1
узел1
пункт1
пункт2
узел2
пункт1
пункт1
пункт2
пункт1
пункт2

Желательно с примером рекурсивного обхода:)
14 июн 17, 09:06    [20562400]     Ответить | Цитировать Сообщить модератору
 Re: проектирование меню  [new]
olegeos
Member

Откуда:
Сообщений: 139
узел1
пункт1
пункт2
узел1
      узел1
          пункт1
          пункт2
узел2
    пункт1
    пункт2
пункт3
узел3
    пункт1
    пункт2
14 июн 17, 09:10    [20562407]     Ответить | Цитировать Сообщить модератору
 Re: проектирование меню  [new]
LSV
Member

Откуда: Киев
Сообщений: 30148
Чем не устраивает классика ID, ParentID ?
14 июн 17, 09:21    [20562437]     Ответить | Цитировать Сообщить модератору
 Re: проектирование меню  [new]
olegeos
Member

Откуда:
Сообщений: 139
Да устраивает, но вдруг есть хорошая альтернатива.
14 июн 17, 10:28    [20562660]     Ответить | Цитировать Сообщить модератору
 Re: проектирование меню  [new]
LSV
Member

Откуда: Киев
Сообщений: 30148
olegeos
Да устраивает, но вдруг есть хорошая альтернатива.
Разве что:
"Альтернатива - утки" (с) анек :)
14 июн 17, 10:47    [20562735]     Ответить | Цитировать Сообщить модератору
 Re: проектирование меню  [new]
mad_nazgul
Member

Откуда:
Сообщений: 4232
olegeos
Да устраивает, но вдруг есть хорошая альтернатива.


Альтернативы есть.
Если узлов и пунктов не много, можно хранить в строке путь.

Если вставка не важна, а важна выборка, то можно Nested Set
14 июн 17, 11:05    [20562824]     Ответить | Цитировать Сообщить модератору
 Re: проектирование меню  [new]
SERG1257
Member

Откуда:
Сообщений: 2499
olegeos
Как грамотно спроектировать таблицу(цы) меню, чтобы была неограниченая вложенность как узлов так и пунктов?
Если данным меню будут пользоватся люди, то неограниченная вложенность кончается где-то на 7-10 уровней иерархии (больше просто неудобно пользоватся). Так что материализованный путь наше все.
14 июн 17, 17:40    [20564632]     Ответить | Цитировать Сообщить модератору
 Re: проектирование меню  [new]
kernA
Member

Откуда: Санкт-Петербург
Сообщений: 246
LSV
Чем не устраивает классика ID, ParentID ?


Рано или поздно каждой роли(группа пользователей), в соответствии с правами, придётся давать доступ на определённые пункты.
В соответствии с этим, дерево меню для каждого роли будет уникальным.
Причём, хорошим моветоном считается случай, когда для своей роли мы можем назначить пункт в свой узел(логично, если пользователь часто обращается к пункту, то этот пункт должен ближе располагаться в меню) или взять местоположение, по умолчанию, из настроек.

Как минимум, будет ID, ParentID, RoleID
15 июн 17, 10:03    [20565788]     Ответить | Цитировать Сообщить модератору
 Re: проектирование меню  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22808
А мы вот в MongoDB храним в виде nested array, и называется это не Menu, а Site Structure, а все меню уже по ней строятся :)
15 июн 17, 10:13    [20565811]     Ответить | Цитировать Сообщить модератору
 Re: проектирование меню  [new]
kernA
Member

Откуда: Санкт-Петербург
Сообщений: 246
У нас был реализован вариант(не айс), когда есть стандартное дерево меню, а из него для каждого пользователя вычитается пункты и узлы к которым пользователь не имеет доступа.

Дерево меню хранилось в таблице с id, parent_id.
Убираемые пункты пользователя хранились в отдельной таблице.
Обсчёт дерева меню пользователя происходил по схеме:
Сначала брался нижний уровень дерева(допустим, уровень пунктов) из него вычитались хранимые пункты.
Получали узлы с непустыми пунктами и так выше по дереву.
В итоге, получили очень длительный обсчёт дерева меню(около 30 секунд).

При выборе схемы исходили из того, что пользователи имеют доступ к подавляющему большинству форм(пунктов) - примерно 35 из 40, дальше изменение пунктов меню пользователей будет производится силами программистов( для экономии их временеми, изменения должны быть минимальны).
15 июн 17, 10:27    [20565856]     Ответить | Цитировать Сообщить модератору
Все форумы / Проектирование БД Ответить