Ієрархічні структури даних в реляційних бд

структур з порозрядним ключем

При структурі з порозрядним правим ключем безпосередні нащадки мають первинні ключі c ненульовим наступним розрядом і таким же, як первинний ключ предка числом в молодших розрядах. У раніше розглянутому нами випадку нащадки першого кореневого елемента (ID = 1) будуть мати ID 11,21,31,41, ... 91. Запит на вибірку:

SELECT "ID" FROM "CATALOG4" WHERE "ID" IN (11,21,31,41,51,61,71,81,91)

Отримання всіх нащадків

Досить часто виникає задача отримання всіх, в тому числі і не прямих нащадків даного елемента. Розглянемо рішення цієї задачі для наведених структур.

структура з посиланням на предка і її модифікація з підтримкою інформації про рівень елементу

Простого способу, на жаль, немає. Доводиться організовувати рекурсію запитів.

структура з потаблічним зберіганням рівнів

Нащадки цього елемента містяться в "нижчих" таблицях і мають як частина складовою посилання на предка в одному з полів значення ID предка. Загальний список нащадків можна отримати об'єднанням (UNION) запитів.

Введення додаткового поля LEVEL в запит обумовлений тим, що нащадки елемента в різних таблицях можуть мати однакові ID і при об'єднанні запитів замість кількох рядків у результаті буде отримана одна. Ще одна проблема, яка веде до необхідності введення додаткового поля в запит, тому що треба знати, з якої таблиці вибрано цей ID.

структура з порозрядним ключем

У даній структурі міститься інформація про повне шляху до елемента. Це полегшує вибірку всіх нащадків.

лівий ключ

правий ключ

Ну, тут теж все просто. Перший елемент ієрархії ID = 1, на другому рівні його перший предок 11 і т.д. Таким чином, нащадки матимуть в кінці ID цифри, що збігаються з ID предка.

структура зі зберіганням кордонів гілки

Елементи структури LOW і HIGH зберігають межі діапазону первинних ключів всіх нащадків.

Отримання рівня вкладеності елемента

Часто рівень вкладеності елемента ієрархії прив'язаний до якогось класифікаційної ознаки предметної області. Звідси виникає завдання визначення рівня вкладеності довільного елемента.

структура з посиланням на предка, структура зі зберіганням кордонів гілки

Побудова повного шляху до кореня дерева і визначення числа предків. Досить незручно, але іншого способу немає.

структура з посиланням на предка і зберіганням рівня вкладеності

Недарма ми ввели поле для зберігання рівня вкладеності. Воно-то і містить потрібну нам інформацію.

структура з потаблічним зберіганням рівнів

Рівень вкладеності визначається таблицею, в якій зберігається запис про елемент.

структура з порозрядним ключем

Рівень вкладеності визначається положенням останнього ненульового розряду в ключі.

Отримання повного шляху від елемента до кореня ієрархії

структура з посиланням на предка і її модифікація з підтримкою інформації про рівень елементу, структура зі зберіганням кордонів гілки

Знову ж таки, для обчислення повного шляху потрібно отримувати предків за допомогою послідовних запитів. Одним простим запитом тут не обійтися. Нижче наведено текст збереженої процедури отримання повного шляху від довільного елемента:

структура з потаблічним зберіганням рівнів, структура з порозрядним ключем

Повний шлях міститься в первинному ключі елементу.

Операції вставки, видалення, переміщення елемента і його нащадків

структура з посиланням на предка

Додавання нового елемента: