Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
бд.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.92 Mб
Скачать

Операції над ієрархічною структурою

Операції, що виконуються над ієрархічною структурою, поділяють на дві групи:

  • операції пошуку (чи вибирання);

  • операції оновлення даних (або маніпулювання ними).

У цьому підрозділі операції, які формують семантичну основу мови маніпулювання даними тієї чи іншої СКБД, описуються на концептуальному рівні без уточнення синтаксису та інших другорядних деталей. Зазначимо кілька базових принципів, характерних для мов маніпулювання даними ієрархічних систем:

  • об'єктом маніпулювання є екземпляр сегмента;

  • у результаті успішного виконання пошукових операцій визначається поточний екземпляр сегмента, який може відігравати роль стартової позиції для операцій маніпулювання;

  • спочатку поточним є кореневий екземпляр сегмента;

  • пошук необхідного сегмента відбувається за «навігаційним» принципом: необхідно прокласти шлях від кореневого екземпляра сегмента (або ж поточного) до шуканого, перевіряючи умови, накладені на значення полів сегментів, які розташовані на шляху, що будується. Операція в ієрархічній моделі визначається шляхом програмування «навігації» структурою даних.

В описаних далі операціях було використано мову DL/1 системи IMS, синтаксис якої тут значно спрощений.

Вибирання даних

Необхідний екземпляр сегмента вибирається в ієрархічній структурі за допомогою команди «навігації» структурою. Екземпляр сегмента є одиницею навігації. Для визначення необхідного сегмента навігації може накладатися умова на значення полів сегмента. Відносно поточного сегмента можна переміщуватися ієрархічною структурою вгору, вниз і вбік.

Навігацію ієрархічною структурою можна здійснювати з метою її впорядкування, а потім переміщуватися нею згідно зі встановленим порядком. Порядок переміщення встановлюється, починаючи з кореня або будь-якого первинного сегмента. Далі рухатись можна зверху донизу і зліва направо.

Приклади типових операторів пошуку даних:

  • знайти вказане дерево БД;

  • перейти від одного дерева до іншого;

  • знайти екземпляр сегмента, що задовольняє умові пошуку;

  • перейти від одного сегмента до іншого всередині дерева;

  • перейти від одного сегмента до іншого в порядку обходу ієрархії.

В ієрархічній моделі автоматично підтримується цілісність посилань між предками і нащадками. Основне правило: ніякої нащадок не може існувати без свого батька.

Доступ до даних здійснюється за допомогою команди GET, різновиди якої розглядаються нижче:

  • GET UNIQUE — пряме вибирання. Вибирання першого сегмента вказаного типу, що відповідає умові пошуку. За допомогою цієї операції фіксується початкова позиція для подальшої навігації ієрархією;

  • GET NEXT — послідовне вибирання. Вибирання сегмента, розташованого відразу за поточним, згідно з наявним порядком розташування сегментів у базі даних. Задаючи різні значення параметрів команди, можна отримати:  а) сегмент, який розташований за поточним (при цьому тип сегмента може виявитися довільним);  б) наступний сегмент заданого типу;  в) наступний сегмент заданого типу, що відповідає заданій умові.

  • GET NEXT WITHIN PARENT — послідовне вибирання в межах поточного батьківського сегмента.

Розглянемо декілька найпростіших прикладів вибирання даних. Користуватимемось ієрархічною схемою, що зображена на рис. 8.1. ФАКУЛЬТЕТ (Назва, Декан), КАФЕДРА (Назва, Завідувач, Корпус), ВИКЛАДАЧ (Ім'я, Посада, Адреса).

Команда GET UNIQUE має такий синтаксис:

GET UNIQUE <тип сегмента> [WHERE <умова>]

За цією командою знаходиться перший сегмент вказаного типу, що відповідає вказаній умові. Тут <умова> - це предикат, у якому можуть зазначатися будь-які типи сегментів, що є батьківськими до типу <тип сегмента>, та сам вказаний тип сегмента. Фраза WHERE може бути відсутня, тоді команда знаходить перший екземпляр сегмента вказаного типу.

Розглянемо кілька прикладів. Перший екземпляр кафедри в корпусі 5 знаходиться у такий спосіб:

GET UNIQUE КАФЕДРА WHERE КАФЕДРА.Корпус = 5;

Знайдений сегмент стає поточним. Для знаходження професора кафедри АСУ факультету інформатики слід записати:

GET UNIQUE ВИКЛАДАЧ  WHERE ФАКУЛЬТЕТ.Назва = "інформатики"  AND КАФЕДРА.Назва = "АСУ"  AND ВИКЛАДАЧ.Посада = "професор";

Пошук першого професора здійснюється згідно з прийнятою впорядкованістю екземплярів сегментів.

Якщо необхідно знайти кілька сегментів, що відповідають умові пошуку, слід скористатися командою GET NEXT (вона має синтаксис, аналогічний GET UNIQUE). За допомогою цієї команди знаходиться наступний сегмент, що відповідає заданій умові пошуку. Наприклад, щоб послідовно знайти всіх професорів кафедри математики факультету інформатики, слід виконати таку команду:

GET UNIQUE ВИКЛАДАЧ  WHERE ФАКУЛЬТЕТ.Назва = "інформатики"  AND КАФЕДРА.Назва = "математики"  AND ВИКЛАДАЧ.Посада = "професор";  NT: GET NEXT ВИКЛАДАЧ  WHERE ФАКУЛЬТЕТ.Назва = "інформатики"  AND КАФЕДРА.Назва = "математики"  AND ВИКЛАДАЧ.Посада = "професор";  GOTO NT

Тут спочатку фіксується перший сегмент типу «викладач кафедри математики факультету інформатики», а потім за допомогою команд GET NEXT, що виконуються в циклі, здійснюється послідовне перебирання сегментів.

Наведені вище різновиди команди GET здійснюють пошук конкретного екземпляра сегмента в межах усієї ієрархічної структури. Коли необхідно віднайти дані в межах піддерева, пошук його кореневого сегмента здійснюється за допомогою команд GET UNIQUE та/або GET NEXT. Знайдений у такий спосіб екземпляр сегмента стає поточним батьківським сегментом для того піддерева, що нас цікавить. Подальший пошук у піддереві виконується за допомогою команди GET NEXT WITHIN PARENT, яка має синтаксис, аналогічний розглянутим раніше різновидам команди GET. Наприклад, для знаходження всіх професорів факультету інформатики можна виконати наведені нижче команди:

GET UNIQUE ФАКУЛЬТЕТ  WHERE ФАКУЛЬТЕТ.Назва = "інформатики";

...NT: GET NEXT WITHIN PARENT ВИКЛАДАЧ  WHERE ВИКЛАДАЧ.Посада = "професор";  GOTO NT

Отже, операція в ієрархічній моделі програмує «навігацію» структурою даних.