Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / проектирование меню / 10 сообщений из 10, страница 1 из 1
14.06.2017, 09:06
    #39471277
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проектирование меню
Как грамотно спроектировать таблицу(цы) меню, чтобы была неограниченая вложенность как узлов так и пунктов?
Или ткните ссылкой...
Что-то вроде такого:
узел1
пункт1
пункт2
узел2
узел1
пункт1
узел1
пункт1
пункт2
узел2
пункт1
пункт1
пункт2
пункт1
пункт2

Желательно с примером рекурсивного обхода:)
...
Рейтинг: 0 / 0
14.06.2017, 09:10
    #39471279
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проектирование меню
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
узел1
пункт1
пункт2
узел1
      узел1
          пункт1
          пункт2
узел2
    пункт1
    пункт2
пункт3
узел3
    пункт1
    пункт2
...
Рейтинг: 0 / 0
14.06.2017, 09:21
    #39471283
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проектирование меню
Чем не устраивает классика ID, ParentID ?
...
Рейтинг: 0 / 0
14.06.2017, 10:28
    #39471322
olegeos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проектирование меню
Да устраивает, но вдруг есть хорошая альтернатива.
...
Рейтинг: 0 / 0
14.06.2017, 10:47
    #39471343
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проектирование меню
olegeosДа устраивает, но вдруг есть хорошая альтернатива.Разве что:
"Альтернатива - утки" (с) анек :)
...
Рейтинг: 0 / 0
14.06.2017, 11:05
    #39471364
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проектирование меню
olegeosДа устраивает, но вдруг есть хорошая альтернатива.

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

Если вставка не важна, а важна выборка, то можно Nested Set
...
Рейтинг: 0 / 0
14.06.2017, 17:40
    #39471669
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проектирование меню
olegeos Как грамотно спроектировать таблицу(цы) меню, чтобы была неограниченая вложенность как узлов так и пунктов?Если данным меню будут пользоватся люди, то неограниченная вложенность кончается где-то на 7-10 уровней иерархии (больше просто неудобно пользоватся). Так что материализованный путь наше все.
...
Рейтинг: 0 / 0
15.06.2017, 10:03
    #39471944
kernA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проектирование меню
LSVЧем не устраивает классика ID, ParentID ?

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

Как минимум, будет ID, ParentID, RoleID
...
Рейтинг: 0 / 0
15.06.2017, 10:13
    #39471951
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проектирование меню
А мы вот в MongoDB храним в виде nested array, и называется это не Menu, а Site Structure, а все меню уже по ней строятся :)
...
Рейтинг: 0 / 0
15.06.2017, 10:27
    #39471964
kernA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проектирование меню
У нас был реализован вариант(не айс), когда есть стандартное дерево меню, а из него для каждого пользователя вычитается пункты и узлы к которым пользователь не имеет доступа.

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

При выборе схемы исходили из того, что пользователи имеют доступ к подавляющему большинству форм(пунктов) - примерно 35 из 40, дальше изменение пунктов меню пользователей будет производится силами программистов( для экономии их временеми, изменения должны быть минимальны).
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / проектирование меню / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]