Реляційні бази даних

Тризначна логіка (3VL)

Так як null-значення позначає насправді той факт, що значення невідоме, то будь-які алгебраїчні операції (додавання, множення, конкатенація рядків і т.д.) повинні давати також невідоме значення, тобто null. Дійсно, якщо, наприклад, вага деталі невідома, то невідомо також, скільки важать 10 таких деталей.
При порівнянні виразів, що містять null-значення, результат також може бути невідомий, наприклад, значення істинності для виразу a=b є null, якщо один або обидва аргументи є null. Таким чином, визначення істинності логічних виразів базується на тризначній логіці (three-valued logic, 3VL), у якій крім значень True - ІСТИНА і False - ХИБНО, введене значення Unknown - НЕВІДОМО. Логічне значення Unknown - це те ж саме, що і null-значення. Тризначна логіка базується на наступних таблицях істинності:

Потенційні ключі

По визначенню, тіло відношення є множина кортежів, тому відношення не можуть містити однакові кортежі. Це значить, що кожен кортеж повинний мати властивість унікальності. Насправді, властивістю унікальності в межах відношення можуть володіти окремі атрибути кортежів або групи атрибутів. Такі унікальні атрибути зручно використовувати для ідентифікації кортежів.
Визначення 1. Нехай дане відношення R. Підмножину атрибутів K відношення R будемо називати потенційним ключем, якщо K має наступні властивості:
1) Властивість унікальності - у відношенні не може бути двох різних кортежів, з однаковим значенням K.
2) Властивість ненадмірності - ніяка підмножина в K не має властивість унікальності.

Null-значення

Основне призначення баз даних полягає в тому, щоб зберігати і надавати інформацію про реальний світ. Для представлення цієї інформації в базі даних використовуються звичні для програмістів типи даних - стрічкові, чисельні, логічні і т.п. Однак у реальному світі часто зустрічається ситуація, коли дані невідомі. Наприклад, місце проживання або дата народження людини можуть бути невідомі (база даних розшукуваних злочинців). Якщо замість невідомої адреси доречно було б вводити порожній рядок, то що вводити замість невідомої дати? Відповідь - порожню дату - не цілком задовільна, тому що найпростіший запит "видати список людей у порядку зростання дат народження" дасть зазделегідь неправильну відповідь.

Вставка, поновлення та вилучення даних за допомогою SQL

Після створення схеми бази даних за допомогою команди SQL CREATE TABLE нові таблиці є порожніми, тобто не містять записів. Це перевіряється за допомогою наступного запиту.
SELECT COUNT(*) FROM таблиця;
Для новоствореної таблиці цей запит поверне один рядок та один стовпчик із значенням 0 (кількість записів таблиці дорівнює 0).
Дані в таблицях з’являється в наслідок виконання відповідних запитів на вставку. Після цього ці дані можна редагувати та вилучати. SQL надає три стандартні команди щодо вставки, поновлення та вилучення даних.

  • INSERT – вставка.
  • UPDATE – поновлення.
  • DELETE – вилучення.

Запит на вставку даних в таблицю має наступну структуру.

Складна та агрегована вибірка даних за допомогою SQL

Аналіз інформації, що зберігається в реляційній базі даних, здійснюється за допомогою SELECT-запитів. В загальному випадку SELECT-запит має наступну структуру:
SELECT [DISTINCT]
вираз [AS псевдонім_колонки],…
FROM {таблиця|з’єднання_таблиць|підзапит} [[AS] псевдонім_таблиці]
[WHERE предикат]
[GROUP BY вираз,…
[HAVING предикат]]
[{UNION|INTERSECT|EXCEPT} [ALL]
{SELECT …}]
[ORDER BY вираз [ASC|DESC],…]

Цей запит складається з кількох частин, кожна з яких починається відповідним ключовим словом:

  • SELECT;
  • FROM;
  • WHERE;
  • GROUP BY;
  • HAVING;
  • ORDER BY.

В частині SELECT визначається структура майбутнього результату, тобто ця частина визначає набір стовпчиків результуючої таблиці. Частина FROM вказує на назви усіх таблиць чи підзапитів, які використовуються в SELECT-запиті. Частина WHERE містить предикат, який може включати кілька логічних виразів та приймати одне з трьох значень: TRUE, FALSE чи UNKNOWN (NULL). В результат SELECT-запиту включаються усі рядки, для яких предикат з частини WHERE приймає значення TRUE. Частина ORDER BY використовується для впорядкування вихідних даних. Рядки впорядковуються відповідно до виразів, вказаних в списку.

Вибірка даних за допомогою SQL

Будь-яка система керування базами даних реляційного типу дозволяє вирішити два основні питання, пов’язані з маніпуляцією інформацією:

  • Збереження інформації в базі даних.
  • Отримання інформації з бази даних та її опрацювання.

Для вирішення першого питання в базі даних відповідними засобами SQL слід створити таблиці наперед визначеної структури та забезпечити необхідні обмеження цілісності.
Для вирішення другого питання слід навчитися будувати запити на вибірку (SELECT-запити). В простішому варіанті SELECT-запити має наступний вигляд:
SELECT [DISTINCT]
вираз [AS псевдонім_колонки],…
FROM {таблиця|з’єднання_таблиць|підзапит} [[AS] псевдонім_таблиці]

Зміна схеми бази даних за допомогою SQL

Інформація в реляційних базах даних зберігається у вигляді зв’язаних таблиць. Кожна таблиця має власну схему (структуру), яка включає назву таблиці та набір полів (атрибутів, колонок). Сукупність усіх схем таблиць становлять схему реляційної бази даних.
Для зміни існуючої схеми бази даних в мові SQL передбачені запити ALTER TABLE та DROP TABLE.
Запит на зміну структури таблиці має наступний вигляд:
ALTER TABLE таблиця
{ ADD [COLUMN] визначення_поля
| ALTER [COLUMN] назва_поля зміна_поля
| DROP [COLUMN] назва_поля [{RESTRICT|CASCADE}]
| ADD CONSTRAINT обмеження_таблиці
| DROP CONSTRAINT назва_обмеження [{RESTRICT|CASCADE}]
};

При зміні структури таблиці виконується одна з п’яти дій :

  • ADD [COLUMN] – додати нове поле (якщо в таблиці є записи, то нове поле не може бути обов’язковим – з обмеженням NOT NULL).

Створення схеми бази даних за допомогою SQL

Інформація в реляційних базах даних зберігається у вигляді зв’язаних таблиць. Кожна таблиця має власну схему (структуру), яка включає назву таблиці та набір полів (атрибутів, колонок). Сукупність усіх схем таблиць становлять схему реляційної бази даних.
Для створення схеми бази даних в мові SQL передбачений запит CREATE TABLE. За допомогою цього запиту створюється таблиця як об’єкт бази даних, яка не містить записів (даних).
Запит для створення таблиці має наступний вигляд:
CREATE TABLE назва_таблиці
({визначення_поля | обмеження_таблиці},…);

При створенні нової таблиці обов’язково потрібно вказати назву_таблиці, яка повинна бути унікальною в межах бази даних та список визначень_полів, записаних через кому. Поряд з визначеннями_полів допускаються обмеження_таблиці .

Проектування схеми реляційної бази даних

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

  • принцип “поділяй і пануй” – принцип розв’язання складних проблем шляхом їх розбиття на множину менших незалежних задач, легких для розуміння і розв’язання;