Как структурировать модель для правильного и эффективного представления древовидных данных в реляционных базах данных?


13

Основываясь на изучении древовидных данных в реляционной базе данных с помощью вопроса SQL , я хотел бы знать, как регулярно используются способы описания древовидных данных в реляционных базах данных с учетом физических последствий?

Я предполагаю, что СУБД не имеет специальных функций для обработки, кроме обычных SQL ANSI или общих доступных функций.

В сомнениях меня всегда интересуют MySQL, PostgreSQL и, в конечном итоге, SQLite.

Ответы:


8

Я считаю, что он собирается что-то вроде бинарного дерева. Я бы просто включил три ключа, которые привязаны к уникальному идентификатору одной и той же таблицы, один для левого, один для правого дочернего и один для родительского.

т.е. (очень псевдокод)

TABLE tree
int         id                  autoinc
varchar(16) data_you_care_about
int         parent_id
int         left_child_id
int         right_child_id

FOREIGN KEY parent_id = tree.id
FOREIGN KEY left_child_id = tree.id
FOREIGN KEY right_child_id = tree.id

При рассмотрении двусвязного элемента следует учитывать, что любые изменения в позиции дерева в этой схеме приведут к не менее чем 3 обновлениям вместо одного. Как вы заявляете, это также большое предположение, что прямое / обратное двоичное дерево - это то, что было запрошено.
REW

Совершенно верно, по своему опыту я предпочитаю налог на обновления двухсвязного списка односвязному списку, поскольку мне часто приходится проходить по дереву. но во многих случаях в этом нет необходимости
Патрик

Это определенно зависит от базовой модели. Я думаю, что ответ, данный Патриком, достаточен, если это правильная модель.
Jcolebrand

6

Если каждый узел действительно является одним и тем же объектом данных, тогда эта парадигма все равно будет означать одну таблицу на объект и связующий столбец для обхода дерева, где каждый узел связан только один раз.

Для объектов, связанных в нескольких точках дерева, будет использоваться отдельная таблица связей или столбец с несколькими различными значениями.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.