- •4 База даних Борей 56
- •1 Введення в sql
- •1 Що таке sql і що вона уміє
- •2 Чого sql не вміє
- •3 Коротка історія sql
- •3.1 Рання історія
- •3.2 Стандарти
- •3.3 Сучасний стан справ
- •4 Версії sql
- •5 Термінологія
- •6 Процедурні й декларативні мови
- •6.1 Мови й поїздка в таксі
- •6.2 Порівняння процедурних і декларативних мов
- •7 Місце sql у центрі даних
- •7.1 Де взяти sql?
- •8 Зовнішній інтерфейс на прикладі Access
- •9 Прикладні частини
- •9.2 Скбд для настільних систем
- •10 Установка з’єднання
- •11 Типова конфігурація використання sql
- •12 Роль людини в скбд
- •13 Коли застосовувати sql
- •13.1 Нарощення
- •13.2 Швидкість
- •13.4 Універсальність
- •13.5 Аналітичні можливості
- •14 У яких випадках скбд із підтримкою sql не потрібна
- •Висновки
- •2 Підготовка до роботи з sql
- •1 База даних Борей
- •2 Прикладні частини
- •2.3 Установка Microsoft sql Server
- •2.4 Імпортування Борей в sql Server
- •2.5 Запити й вивчення sql в Access
- •3 Аналізатор запитів
- •Висновки
- •3 Введення в реляційні бази даних
- •1 Складові додатки, призначені для роботи з даними
- •2 Що таке база даних
- •2.1 Демонстраційний проект – тюльпанний бізнес
- •2.2 Таблиці
- •2.3 Записи
- •2.4 Стовпці (поля)
- •2.5 Демонстраційний проект та його проблеми
- •2.6 Реляційні бази даних
- •2.7 Чи позбулися ми проблем?
- •3 Зіставлення записів – роль ключів
- •3.1 Первинні ключі
- •3.2 Зовнішні ключі
- •3.3 Як діють ключі
- •4 Альтернативний спосіб опису відношень
- •4.1 Один-багато
- •4.2 Один-один
- •4.3 Нормалізація
- •4.4 Що таке null
- •4.5 Де ж у цій теорії місце sql-операторам?
- •5 Порівняння термінології sql й інших систем
- •5.1 Паперові документи
- •5.2 Електронні таблиці
- •5.3 Настільні системи скбд (на прикладі Access)
- •Висновки
- •4 База даних Борей
- •1 Відкриття бази даних Борей
- •2 Схема бази даних
- •2.1 Що таке схема
- •2.2 У чому важливість схеми
- •3 Схема бази даних Борей
- •3.1 Таблиці й відношення бази даних Борей
- •3.2 Вікно відношень в Access
- •3.3 Процес розміщення замовлення
- •3.4 Запити Access в Борей
- •Висновки
- •5 Синтаксис sql й оператор select
- •1 Загальний синтаксис sql
- •1.1 Пробіли
- •1.2 Лапки й спеціальні символи
- •2 Оператор select
- •2.1 Основний синтаксис
- •2.2 Визначення полів
- •3 Фільтрація даних
- •3 Бабкина Ольга
- •4 Воронова Дарья
- •9 Ясенева Инна
- •3.1 Значення null
- •3.2 Обчислення в умові where
- •3.3 Інтервали
- •3.4 Додавання логічних операцій в умову where
- •3.5 Операція like
- •4 Сортування записів
- •Висновки
- •Література
3.1 Первинні ключі
Первинний ключ – це стовпець або кілька стовпців, які ідентифікують кожен запис у таблиці. Наприклад, у таблиці громадян України як первинний ключ можна використати стовпець ідентифікаційних кодів. Оскільки не існує двох громадян України, у яких би ці номери збігалися, дані цього стовпця ідентифікують кожен запис єдиним чином. Однак знайти подібну унікальну інформацію вдається далеко не завжди. Приміром, прізвища не мають цю властивість, оскільки серед декількох тисяч українців напевно найдеться декілька Петренків. У цій ситуації можна створити додатковий стовпець, що містить деякий штучний унікальний ідентифікатор, який був би генерований під час створення кожного нового запису. Якщо процедура визначення цього ідентифікатора буде працювати надійно, ми можемо використати новий стовпець як первинний ключ. Для такого стовпця підійде ім’я на зразок КодСорту або КодКонтактКлієнт. Методи генерування унікальних значень ми розглянемо далі.
Ключі нічим не відрізняються від інших полів запису (на відміну від ключового гравця в команді), але вони слугують „ключами” для співставлення записів.
3.2 Зовнішні ключі
Зовнішній ключ – це стовпець, що містить дані, які служать покажчиками на дані первинного ключа в іншій таблиці. Таким чином, щоб зв’язати запису таблиці „Замовлення” із записами таблиці „Клієнти”, треба встановити в першій з них зовнішній ключ, що містить правильні значення „КодКлієнта”. Тоді СКБД зможе прочитати дані в стовпці „КодКлієнта” таблиці „Замовлення” й, скориставшись первинним ключем таблиці „КодКлієнта” таблиці „Клієнти”, знайти в цій таблиці єдиний запис, що відповідає прочитаним даним. Якщо скористатися терміном «один-багато», то зовнішній ключ виявляється представлений на множинній стороні відношення.
Зверніть увагу на розходження в правилах визначення первинного й зовнішнього ключів. Первинні ключі містять унікальні (неповторювані) значення; значення зовнішнього ключа можуть мати «двійників» у первинному ключі іншої таблиці. Значення вторинного ключа, як правило, повторюються від рядка до рядка, оскільки покажчик на унікальне значення первинного ключа (наприклад, у таблиці „Клієнти”) може вказувати на більш ніж один запис (в таблиці „Замовлення”).
3.3 Як діють ключі
Застосуємо викладені вище ідеї до нашого приклада з тюльпановим бізнесом. У таблицях Клієнти й КонтактКлієнт нам знадобляться ключі, по яких СКБД буде зіставляти записи двох таблиць. У таблиці Клієнти первинним ключем буде стовпець КодКлієнта, у якому зберігаються значення, унікальні для кожного клієнта; зовнішній ключ у таблиці КонтактКлієнт – стовпець КодКлієнт, кожному значенню яких зіставляється один й тільки один запис таблиці Клієнти.
Отже, ми розглянули принцип дії ключів, і тепер самий час зробити два важливих зауваження. Перше: щоб відношення діяло бездоганно, дані в первинному й зовнішньому ключах повинні бути максимально подібні один одному; типи даних, їхній розмір, що накладають обмеження повинні бути, по можливості, однакові в обох стовпцях, інакше СКБД буде виконувати перетворення, які не завжди можуть завершуватися успішно. Друге: у деяких розвинених проектах для оптимізації характеристик намагаються уникати застосування, в якості первинних ключів, стовпців послідовної нумерації, а утворюють ключ сполученням значень декількох стовпців. У цьому випадку первинний ключ уже не є стовпцем, але деяким загальним поданням декількох стовпців, сполучення значень у які ідентифікують єдиним чином кожен запис.
Підсумуємо сказане, перелічивши найбільш важливі моменти.
Ключі використовуються для зіставлення записів двох зв’язаних таблиць.
Ключ представляється одним або декількома полями. Відношення не описуються ніякими метаданими.
Кожне значення первинного ключа унікально.
Зовнішній ключ містить значення, кожне з яких збігається зі значенням первинного ключа в іншій таблиці.
Як правило, у відношенні «один-багато» сторона «один» відповідає первинному ключу, сторона «багато» – зовнішньому.
Коли потрібно виконати зіставлення, СКБД зчитує значення зовнішнього ключа й по ньому знаходить в іншій таблиці запис, що містить таке ж значення первинного ключа.
Багато студентів мають досвід роботи з великими наборами даних і знають, як легко можна зштовхнутися в таких наборах із проблемами й невідповідностями. І вони задають питання. Яким чином можна забезпечити унікальність значень первинного ключа й наявність у зовнішньому ключі іншої таблиці тільки значень, що збігаються зі значеннями первинного ключа? Що трапиться, приміром, після видалення з таблиці одного із клієнтів? Тоді одному із записів у таблиці „КонтактКлієнт” не буде що зіставити. Ми розглянемо деякі способи дозволу подібних проблем далі. Більшість постачальників баз даних пропонують засоби виявлення й автоматичного виправлення невідповідності значень ключів.
