Лекція 5 Індексування Визначення ключа для таблиці означає автоматичне сортування записів, контроль відсутності повторення значень у ключових полях записів і підвищення швидкості виконання операцій пошуку у таблиці. Для реалізації цих функцій у СУБД застосовують індексування .Термін “індекс” тісно пов'язаний з поняттям “ключ”, хоча між ними є і деякі відміни. Під індексом розуміють засіб прискорення операції пошуку записів у таблиці, а отже, і інших операцій, використовуючих пошук: витяг, модифікація, сортировка і т.д. Таблицю, для котрої використовується індекс, називають індексованою. Індекс виконує роль змісту таблиці, перегляд котрого передує зверненню до записів таблиці. В деяких системах, наприклад, Paradox, індекси зберігаються в індексних файлах, що зберігаються окремо від табличних файлів.На практиці для створення індексу для деякої таблиці БД користувач вказує поле таблиці, котре вимагає індексації. Ключові поля таблиці в багатьох СУБД, як правило, індексуються автоматично. Індексні файли, що створюються по ключовим полям таблиці, часто називаються файлами первинних індексів. Індекси, що створюються користувачем для не ключових полів, іноді називають вторинними (користувальницькими) індексами. Введення таких індексів не змінює фізичного розміщення записів таблиці, але впливає на послідовність перегляду записів. Індексні файли, що створюються для підтримання вторинних індексів таблиці, звичайно називаються файлами вторинних індексів. Зв ’зок вторинного індексу з елементами даних бази може бути встановлена різними способами. Один з них – використання вторинного індексу як входу для отримання первинного ключа, по котрому потім з використанням первинного індексу провадиться пошук необхідних записів. (мал.3.5)Деякими СУБД, наприклад Access, поділ індексів на первинні і вторинні не робиться. В цьому випадку використовується автоматично створювані індекси та індекси, що визначаються користувачем по будь-якому із не ключових полів.Головна причина підвищення швидкості виконання різноманітних операцій в індексованих таблицях полягає в тому, що основна частина роботи формується з невеликими індексними файлами, а не з самими таблицями. Найбільший ефект підвищення продуктивності роботи з індексованими таблицями досягається для значних за об ’ємом таблиць. Індексування потребує невеликого додаткового місця на диску і незначних затрат процесора на зміну індексів у процесі роботи. Індекси в загальному випадку можуть змінюватися перед виконанням запитів до БД, після виконання запитів до БД, спеціальними командами користувача чи програмними викликами додатків.При проектуванні реальних БД інформацію звичайно розміщують в декількох таблицях. Таблиці при цьому зв’язані інформаційно. В реляційних СУБД для вказівки на зв’язок між таблицями проводять операцію їх зв’язування. Основні види зв’язків між таблицями При зв ’язуванні двох таблиць виділяють основну да допоміжну (підлеглу) таблицю. Логічне зв’язування таблиць провадиться за допомогою ключа зв’язку.Ключ зв ’язку, за аналогією із звичайним ключом таблиці, складається з одного або декільких полів, які в даному випадку називаються полями зв’язку (ПС).Сутність зв ’язку складається з встановлення полів зв’язку основної та підлеглої таблиць. Поля зв’язку основної таблиці можуть бути заичайними та ключовими. В ролі полів зв’язку підлеглої таблиці частіше за все використовують ключові поля.В залежності від того, як визначені поля зв ’язку основної та підлеглої таблиць між двома таблицями в загальному випадку можуть встановлюватись такі чотири основні види зв’язку.
Характеристика видів зв ’язку таблиць
Зв ’язок виду 1:1Зв ’язок виду 1:1 утворюється у випадку, коли всі поля зв’язку основної та додаткової таблиці є ключовими. Оскільки значення в ключових полях обох таблиць не повторюються, забезпечується взаємнооднозначна відповідність записів з цих таблиць, тобто таблиці є рівноправними.Зіставлення записів двох таблиць по суті означає утворення нових “віртуальних записів” (псевдозаписів). На практиці зв ’язки виду 1:1 використовують досить рідко, так як інформацію з двох таблиць легко об’єднати в одну таблицю, яка займає значно менше місця в пам’яті ПК. Можливі випадки, коли зручніше мати не одну, а дві чи більше таблиці. Причинами цього може бути необхідність прискорити обробку, підвищити зручність роботи користувачів, забезпечити вищу ступінь захисту інформації.Зв ’язок виду 1:МЗв ’язок 1:М має місце, коли одному запису основної таблиці відповідає декілька записів допоміжної таблиці.Приклад: Нехай є 2 зв ’язані таблиці О2 та Д2. В таблиці О2 міститься інформація про види мультимедіа-пристроїв ПК, а в таблиці Д2 – відомості про фірми-виробники цих пристроїв, а також про наявність на складі, хоча б одного пристрою.Таблиця Д2 має 2 ключових поля, так як одна й та ж фірма може виробляти пристрої різних типів. Співсталення записів обох таблиць за полем “Код” породжує записи типу (а, CD-ROM, Acer, так).Якщо звести всы псевдозаписи в нову таблицю, то отримаємо про всі види мультімедіа-пристроїв, фірмах-виробниках, а також відомості про їх наявність на складі. Зв ’язок виду М:1
Зв ’язок М:1 має місце у випадку, коли одній чи декільком записам основної таблиці ставиться у відповідності один запис додаткової таблиці.
Приклад: Розглянемо зв ’язок таблиць ОЗ та ДЗ. У основній таблиці ОЗ міститься інформація о назвах деталей (Поле11), видах матеріалів, із котрого деталі можна виготовити (Поле12), і марках матеріалу (Поле13). У додатковій таблиці ДЗ містяться відомості о назвах деталей (Поле21), планованих строках виготовлення (Поле22) і вартості замовлень (Поле23).
Таблиця ОЗ +
Таблиця ДЗ * +
Зв'язування цих таблиць забезпечує таке встановлення відповідності між записами: (деталь1, чугун, марка1,4.03.98), (деталь1, чугун, марка2,4.03.98). Таблиця О3 не має ключів, в ній можливе повторення записів. Якщо таблицю Д3 зробити основною, а О3 – додатковою, то отримаємо зв ’язок виду 1:М. Якщо поміняти місцями таблиці О2 та Д2, можна отримати зв’язок виду М:1. Звідси випливає, що вигляд зв’язку (1:М або М:1) залежить від того, яка таблиця є головною, та яка додатковою.
Зв ’язок вигляду М:МЗагальний вигляд зв ’язку М:М виникає у випадках, коли декільком записам основної таблиці відповідає декілька записів додаткової таблиці.Приклад : Нехай в таблиці О4 міститься інформація про те, на яких верстатах можуть працювати робітники деякої бригади. Таблиця Д4 містить відомості про те, хто з бригади ремонтників які таблиці обслуговує. Першому та третьому запису таблиці О4 відповідає перший запис таблиці Д4 (у всіх цих записів значення другого поля –“верстат1”). Четвертому запису таблиці О4 відповідає другий та четвертий запис таблиці Д4 (у другому полі цих записів міститься “верстат3”). Виходячи з визначення полів зв ’язку цих таблиць можна скласти нову таблицю “О4+Д4”, записами якої будуть псевдозаписи. Записам отриманої таблиці можна надати зміст можливих змін, які складають при плануванні роботи. Для зручності, поля нової таблиці перейменовано (до речі таку операцію пропонують багато із сучасних СУБД).Наведену таблицю можна використовувати, наприклад, для отримання відповіді на питання: “Хто обслуговує верстати, на яких працює Петров Н.Г?”. Очевидно аналогічно зв ’язку 1:1, зв’язок М:М не встановлює пілеглості таблиць. Для перевірки цього можна основну та додаткову таблицю поміняти місцями та виконати об’єднання інформації шляхом зв’язування. Результуючі таблиці “О4+Д4” та “Д4+О4” будуть відрізнятися тільки порядком розташування першого та третього полів, а також порядком розташування записів.На практиці, зв ’язок звичайно встановлюється зразу між кількома таблицями. При цьому одна з таблиць може мати різноманітні зв’язки з іншими таблицями. У випадках, коли зв’язані таблиці, в свою чергу, мають зв’язки з іншими таблицями, утворюється ієрархія та дерево зв’язків.Контроль цілісності зв ’язківЗ перечислених видів зв ’язку найбільш широко використовується зв’язок виду 1:М. З’язок виду 1:1 можна вважати окремим випадком зв’язку 1:М, коли одному запису основної таблиці відповідає один запис допоміжної таблиці. Зв Зв’язок М:1 по сутності є “дзеркальним відображенням зв’язку 1:М. Виз зв’язку М:М характеризується як слабкий вид зв’язку або навіть як відсутність зв’язку, тому далі не розглядатиметься.Контроль цілісності зв ’язків звичайно означає аналіз вмісту таблиць на дотримання таких правил:
Опишемо дію контролю цілісності при маніпулюванні даними в таблицях. Розглянемо три основних операції над даними двох таблиць:
При введенні нових записів виникає питання визначення послідовності введення записів в таблицю, такої, щоб не допустити порушень цілісності. Виходячи з наведених правил, логічною є ситуація, при якій дані спочатку вводяться в основну таблицю, а потім – в допоміжну. Черговість введення може бути встановлено на рівні цілих таблиць, а потім – в додаткову. Черговість вводу може бути встановлено на рівні таблиць та окремих записів ( випадок одночасного введення у декілька відкритих таблиць). В процесі заповнення основної таблиці контроль значень полів зв ’язку ведеться як контроль звичайного ключа (на співпадання із значеннями тих же полів інших записів). Заповнення полів зв’язку допоміжної таблиці контролюється на предмет співпадання із значеннями полів зв’язку основної таблиці. Якщо введене значення в полі зв’язку допоміжної таблиці не співпадає ні з одним відповідним значенням в записах основної таблиці, то такий запис повинен блокуватися.Модифікація записів. Зміна змісту полів зв ’язанних записів, що не відносяться до полів зв’язку, очевидно, повинно відбуватись звичайним чином. При редактуванні полів зв’язку допоміжної таблиці очевидною вимогою є те, щоб нове значення поля зв’язку співпадало із відповідним значенням якого-небудь запису основної таблиці, тобто допоміжний запис може змінити батька, але не повинен залишитись без нього.Редактування полів зв ’язку основної таблиці треба проводити користуючись правилами:
В операціях видалення записів зв ’язаних таблиць безсумнівно більшу свободу, мають записи допоміжної таблиці. Видалення їх може провадитись практично безконтрольно.Видалення записів основної таблиці логічно підчинити одному з наступних правил:
Таблиця Основна1 * +
Таблиця Додаткова1 * +
Таблиця Основна 2* +
Таблиця Додаткова2 * +
Таблиця ОсновнаЗ *+
Таблиця ДодатковаЗ * +
Таблиця Основна 4*+
Таблиця Додаткова4 * +
Таблиця “Основна4+Додаткова 4”
|