justify"> Щоб уникнути всіх цих проблем, треба прагнути максимально зменшити кількість повторюваної інформації. Процес зменшення надмірності інформації в базі даних за допомогою розділення її на кілька пов'язаних один з одним таблиць і називається нормалізацією даних.
Взагалі кажучи, існує сувора теорія нормалізації даних, в рамках якої розроблені алгоритми зменшення надмірності інформації, визначені кілька рівнів нормалізації і встановлені критерії, що визначають відповідність даних певному рівню нормалізації. Знайомство з теорією нормалізації даних виходить за рамки цих уроків і тим читачам, яким цікаво більше дізнатися про це, можна порадити звернутися до спеціальної літератури.
Для того, щоб побудувати досить ефективну структуру даних, досить дотримуватися декількох простих правил:
. Визначте таблиці таким чином, щоб записи в кожній таблиці описували об'єкти одного і того ж типу. У нашому випадку бібліографічні дані можна розмістити в трьох таблицях:
· PUBLISHERS - містить інформацію про видавництва;
· AUTHORS - містить інформацію про авторів книг;
· TITLES - містить інформацію про видані книги.
2. Якщо у вашій таблиці з'являються поля, що містять аналогічні дані, розділіть таблицю.
. Чи не запам'ятовуйте в таблиці даних, які можуть бути обчислені за допомогою даних з інших таблиць.
. Використовуйте допоміжні таблиці. Наприклад, якщо у вашій таблиці є поле Країна, то може бути варто ввести допоміжну таблицю Country, яка міститиме відповідні записи (Росія, Україна, США тощо). Цей прийом також допоможе зменшити кількість помилок при введенні даних, що допускаються користувачами.
2.2 Ключі та індекси
сервер веб сайт муніципальний
Як було зазначено вище при описі відносин між таблицями, в реляційних базах даних таблиці зв'язуються один з одним за допомогою співпадаючих значень ключових полів. Ключовим полем може бути практично будь-яке поле в таблиці. Ключ може бути первинним (primary) або зовнішнім (foreign).
Первинний ключ однозначно визначає запис в таблиці. У прикладі з базою даних BIBLIO.MDB таблиці PUBLISHERS, AUTHORS і TITLES мають первинні ключі PubID, Au_ID і ISBN відповідно. Таблиця TITLES також має два зовнішніх ключа PubID і Au_ID для зв'язку з таблицями PUBLISHERS і AUTHORS. Таким чином, первинний ключ однозначно визначає запис в таблиці, в той час як зовнішній ключ використовується для зв'язку з первинним ключем іншої таблиці.
Ключовий поле може мати певний сенс, як наприклад ключ ISBN в таблиці TITLES. Однак, дуже часто ключове поле не несе ніякого смислового навантаження і є просто ідентифікатором об'єкта в таблиці. У багатьох випадках зручно використовувати як ключа поле лічильника (Counter field). При цьому вся відповідальність за підтримку унікальності ключового поля знімається з користувача і перекладається на процесор баз даних. Поле лічильника являє собою чотирьохбайтове ціле число (Long) і автоматично збільшується на одиницю при додаванні користувачем нового запису в таблицю.
Дані запам'ятовуються в таблиці в тому порядку, в якому вони вводяться користувачем. Це, так званий, фізичний порядок проходження записів. Однак, часто потрібно представити дані в іншому, відмінному від фізичного, порядку. Наприклад, може знадобитися переглянути дані про авторів книг, впорядковані за алфавітом. Крім того, часто необхідно знайти у великому обсязі інформації запис, що задовольняє певним критерієм. Простий перебір записів при пошуку у великій таблиці може зажадати досить багато часу і тому буде неефективним.
Одними з основних вимог, що пред'являються до систем управління базами даних, є можливість подання даних у певному, відмінному від фізичного, порядку і можливість швидкого пошуку певного запису. Ефективним засобом вирішення цих завдань є використання індексів.
Індекс являє собою таблицю, яка містить ключові значення для кожного запису в таблиці даних і записані в порядку, необхідному для користувача. Ключові значення визначаються на основі одного або декількох полів таблиці. Крім того, індекс містить унікальні посилання на відповідні записи в таблиці. На рис.1.12 показаний фрагмент таблиці CUSTOMERS, що містить інформацію про покупців, і індекс IDX_NAME, побудований на основі поля Name таблиці CUSTOMERS. Індекс IDX_NAME містить значення ключового поля Name, впорядковані в алфавітному порядку, і посилання на відповідні записи в таблиці CUSTOMERS.
рис.1.12. Зв'язок між таблицею і індексом.
Кожна таблиця може мати декілька різних індексів, кожен з яких ...