Поиск СУБД с иерархической структурой
Существует ли какая-либо иерархическая база данных с открытым исходным кодом или эмуляция поверх существующих СУБД?
Я ищу DMBS (или подключаемый модуль к существующей СУБД), который может хранить иерархические данные и позволяет выполнять запросы к иерархическим данным (например, что-то вроде "SELECT LEVEL ... CONNECT BY ...", "SELECT PARENT ...", например). Я знаю, что в Oracle есть какая-то поддержка, но есть ли более сложное решение?
3 ответа
Для этого не существует стандартного плагина. Я смотрел не раз. Тем не менее, есть ряд вариантов. Смотрите из моего предыдущего вопроса на ту же тему:
Какие есть варианты хранения иерархических данных в реляционной базе данных?
Короче говоря, если вы используете таблицу с ID и ParentID (он же список смежности), вы используете выражения Common Table с большинством баз данных (Oracle CONNECT BY является одним из наиболее заметных исключений). OTO, что-то вроде материализованного пути или вложенных множеств может лучше подходить для вашей ситуации - например, возможность легко найти "родословную", где со списком смежности это дорогостоящая операция.
Обычно в конечном итоге происходит с системой, которая должна интенсивно работать с иерархическими данными, например с CMS, является то, что она реализует более одного из этих решений. Предположение, что читает сильно перевешивает пишет.
Вы пробовали модель набора гнезд http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
Реляционные данные не поддерживают напрямую иерархии так, как это делает внутренне иерархическая структура, подобная XML. Вы должны использовать модель данных, такую как вложенные наборы или прямое самостоятельное соединение, чтобы смоделировать иерархию.
В зависимости от типа вашей системы, Common Table Expressions позволит вам выполнять иерархические запросы к данным. CTE поддерживаются версиями SQL Server с 2005 года, последними версиями DB/2 и PostgreSQL - и, возможно, некоторыми другими системами. CTE немного сложнее, чем CONNECT BY, но они работают на довольно разнообразных платформах.