powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Посоветуйте структуру?
7 сообщений из 7, страница 1 из 1
Посоветуйте структуру?
    #32236588
Tosha81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посоветуйте пожалуйста структуру базы для дерева с неограниченным кол-вом уровней и разветвлений на каждом уровне. И желательно с возможностью связей как в графе, т.е. не совсем правильное дерево, а со связями через уровень...
Заранее благодарен!
...
Рейтинг: 0 / 0
Посоветуйте структуру?
    #32236831
Фотография Циничный Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДДдык. Это уже не дерево, а сетевая структура какая-то получается. Что имеем?

-набор узлов
-набор связей (ребер)

В простейшем случае их можно хранить в виде списка узлов и списка ребер:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE NODES_TBL(
SINGLE_NODE NUMBER NOT NULL PRIMARY KEY);

CREATE TABLE LINKS_TBL(
SOURCE_NODE NUMBER NOT NULL 
TARGET_NODE NUMBER NOT NULL
CONSTRAINT SOURCE_NODE_FK FOREIGN KEY (SOURCE_NODE, REFERENCES NODES_TBL (SINGLE_NODE)) 
CONSTRAINT TARGET_NODE_FK FOREIGN KEY (TARGET_NODE, REFERENCES NODES_TBL (SINGLE_NODE)) 
);


Усё... Даже связи направленные получились. Даже несколько различных связей из одного узла в другой построить можно, если оч-чень захотеть...
...
Рейтинг: 0 / 0
Посоветуйте структуру?
    #32237262
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Циничный Кот

>Усё... Даже связи направленные получились

Эээ, направленный граф каждый дурак (шутка) сделает, а вот попробуй ненаправленый таким же легким движением изобразить.

ИМХО все правильно, самое простое решение. Но вопрос о ненаправленном графе остается. Самое лучшее что мне в голову приходит это вью доопределяющее отношение LINKS_TBL до симметричного. Может другие идеи есть?

2 Tosha81

С обработкой дерева могут быть пробемы. Какой SQL сервер? Оракл и ДБ2 поддерживают рекурсивные селекты, там проблем не будет вообще. MSSQL такого не поддерживает и не любит рекурсивных SP (точнее любит только первые 32 или что-то вроде этого), чтоб получить неограниченную глубину нужно будет разворачивать рекурсию в цикл, или на клиент все вытаскивать и там обрабатывать, что еще хуже.
...
Рейтинг: 0 / 0
Посоветуйте структуру?
    #32237292
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если все дерево удасться представить как направленный граф без циклов (а я надеюсь, что удасться), то структура ЦК весьма подходяща.

Если еще предположить, что количество уровней будет все же не бесконечным (ну хотя бы не порядка миллиона), тогда для избежания рекурсии в запросах можно хранить вспомогательную таблицу, где хранить ссылки parent-узлов на все его child узлы. Придется "ручками" поддерживать целостность такой системы (с помошью триггеров или же открытия доступа ко всем операциям только через ХП), но запросы строить будет зело легко.

Дополнительно к ЦК:
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE TABLE LINKS_CACHE(
PARENT_NODE NUMBER NOT NULL 
CHILD_NODE NUMBER NOT NULL
LEVEL NUMBER NOT NULL
CONSTRAINT PARENT_NODE_FK FOREIGN KEY (PARENT_NODE, REFERENCES NODES_TBL (SINGLE_NODE)) 
CONSTRAINT CHILD_NODE_FK FOREIGN KEY (CHILD_NODE, REFERENCES NODES_TBL (SINGLE_NODE)) 
);

поле LEVEL необязательно, но в моем случае было нужно.
...
Рейтинг: 0 / 0
Посоветуйте структуру?
    #32238138
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vdimas> Если все дерево удасться представить как направленный граф без циклов (а я надеюсь, что удасться), то структура ЦК весьма подходяща.

Сто раз тут уже говорилось: дерево и есть граф без циклов. По определению. Направление задай произвольно, если так хочется, это ничего не меняет. Другими словами: дерево УЖЕ ПРЕДСТАВЛЕНО в виде направленного графа.

Структура ЦК реализует произвольный граф, что и требовалось по условию, и поэтому подходяща всегда, без всяких "если".
...
Рейтинг: 0 / 0
Посоветуйте структуру?
    #32238777
Tosha81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Каждая не конечная вершина этого полу-дерева с циклами - это категория, каждая следующая (ниже уровнем) - подкатегория.
Селектами нужно будет ывбирать, например, всё, что принадлежит какой - нибудь категории.
Не замучусь ли с таким представлением.
База MySQL.
...
Рейтинг: 0 / 0
Посоветуйте структуру?
    #32239664
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Замучаешься.
Подкатегории:
select * from LINKS_TBL where SOURCE_NODE=:category_id;

Подкатегории подкатегорий (через вершину):
select t2.* from LINKS_TBL t1, LINKS_TBL t2 where t1.TARGET_NODE=t2.SOURCE_NODE and t1.SOURCE_NODE=:category_id;

Глубже у тебя не бывает по условию.

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


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