В какой базе данных могут храниться деревья? - PullRequest
1 голос
/ 18 декабря 2011

Существует ли БД, которая может хранить древовидные структуры (например, для вложенных комментариев) без использования анти-шаблонов или тому подобного.
Я думаю, что LDAP - это одно, но есть ли другие?

Мне также нужно иметь возможность индексировать детей.Мне нужно, чтобы было легко перемещать ветку от одного узла к другому и быстро читать + форматировать.

Я видел другие подобные вопросы.Проблема с теми (для меня), они спрашивают, какой самый эффективный способ сделать это в БД ХХХ, а я спрашиваю, какую БД мне следует использовать.

Ответы [ 2 ]

0 голосов
/ 18 декабря 2011

«Реляционные базы данных», конечно, подчеркивают «таблицы» (двумерные отношения).

Среди поставщиков RDBMS существует много различных альтернатив.Например, у DB2 есть «иерархические структуры», а у Oracle «иерархические запросы»:

В целом, большинство основных продуктов RDBMS (MS Sql Server, IBM DB2, Oracle) все стали поддерживать XML.Это обеспечивает более надежный и переносимый подход к манипулированию структурированными данными.

Конечно, среди поставщиков, не относящихся к РСУБД, существует еще больше альтернатив для работы с нереляционными данными (такими как деревья).Соответственно, меньше переносимости - блокирование себя в одной «базе данных, отличной от SQL», чаще всего блокирует вас из-за легкого переноса приложения в другую базу данных.

ВНИЗ:

Если вы может использовать XML с реляционной базой данных, это, вероятно, ваш лучший вариант.Вот несколько хороших ссылок:

'Надеюсь, это поможет!

0 голосов
/ 18 декабря 2011

Реляционные базы данных не будут лучшими для этого, если дерево очень глубокое. Я бы порекомендовал граф или базу данных объектов.

«Хранение комментариев»? Как те, которые следуют за блогами или статьями? Если это так, я бы сказал, что вы можете предположить, что они не будут такими глубокими. Десятиуровневое дерево комментариев было бы исключительным.

В этом случае достаточно простых реляционных отношений родитель / потомок с использованием внешних ключей:

CREATE TABLE IF NOT EXISTS article
(
    article_id integer not null auto_increment,
    comment_id integer,
    primary key(article_id),
    constraint fk_comment foreign key(comment_id) references article(article_id) on delete cascade on update cascade
);
...