Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основи роботи з SQL - посібник - нова редакція.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
2.63 Mб
Скачать

3.1 Первинні ключі

Первинний ключ – це стовпець або кілька стовпців, які ідентифікують кожен запис у таблиці. Наприклад, у таблиці громадян України як первинний ключ можна використати стовпець ідентифікаційних кодів. Оскільки не існує двох громадян України, у яких би ці номери збігалися, дані цього стовпця ідентифікують кожен запис єдиним чином. Однак знайти подібну унікальну інформацію вдається далеко не завжди. Приміром, прізвища не мають цю властивість, оскільки серед декількох тисяч українців напевно найдеться декілька Петренків. У цій ситуації можна створити додатковий стовпець, що містить деякий штучний унікальний ідентифікатор, який був би генерований під час створення кожного нового запису. Якщо процедура визначення цього ідентифікатора буде працювати надійно, ми можемо використати новий стовпець як первинний ключ. Для такого стовпця підійде ім’я на зразок КодСорту або КодКонтактКлієнт. Методи генерування унікальних значень ми розглянемо далі.

Ключі нічим не відрізняються від інших полів запису (на відміну від ключового гравця в команді), але вони слугують „ключами” для співставлення записів.

3.2 Зовнішні ключі

Зовнішній ключ – це стовпець, що містить дані, які служать покажчиками на дані первинного ключа в іншій таблиці. Таким чином, щоб зв’язати запису таблиці „Замовлення” із записами таблиці „Клієнти”, треба встановити в першій з них зовнішній ключ, що містить правильні значення „КодКлієнта”. Тоді СКБД зможе прочитати дані в стовпці „КодКлієнта” таблиці „Замовлення” й, скориставшись первинним ключем таблиці „КодКлієнта” таблиці „Клієнти”, знайти в цій таблиці єдиний запис, що відповідає прочитаним даним. Якщо скористатися терміном «один-багато», то зовнішній ключ виявляється представлений на множинній стороні відношення.

Зверніть увагу на розходження в правилах визначення первинного й зовнішнього ключів. Первинні ключі містять унікальні (неповторювані) значення; значення зовнішнього ключа можуть мати «двійників» у первинному ключі іншої таблиці. Значення вторинного ключа, як правило, повторюються від рядка до рядка, оскільки покажчик на унікальне значення первинного ключа (наприклад, у таблиці „Клієнти”) може вказувати на більш ніж один запис (в таблиці „Замовлення”).

3.3 Як діють ключі

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

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

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

  • Ключі використовуються для зіставлення записів двох зв’язаних таблиць.

  • Ключ представляється одним або декількома полями. Відношення не описуються ніякими метаданими.

  • Кожне значення первинного ключа унікально.

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

  • Як правило, у відношенні «один-багато» сторона «один» відповідає первинному ключу, сторона «багато» – зовнішньому.

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

Багато студентів мають досвід роботи з великими наборами даних і знають, як легко можна зштовхнутися в таких наборах із проблемами й невідповідностями. І вони задають питання. Яким чином можна забезпечити унікальність значень первинного ключа й наявність у зовнішньому ключі іншої таблиці тільки значень, що збігаються зі значеннями первинного ключа? Що трапиться, приміром, після видалення з таблиці одного із клієнтів? Тоді одному із записів у таблиці „КонтактКлієнт” не буде що зіставити. Ми розглянемо деякі способи дозволу подібних проблем далі. Більшість постачальників баз даних пропонують засоби виявлення й автоматичного виправлення невідповідності значень ключів.