ЛЕКЦІЯ 4

Реляційна модель: таблиці та ключі

Основи баз даних

VTFK • 2025

Що вже вивчили

Лекція 3: Векторні БД та AI

  • Типи/моделі БД
  • Особливості векторних індексів
  • Нормалізація ембеддингів

План лекції

  • Що таке реляційна модель
  • Первинні та зовнішні ключі
  • Обмеження цілісності
  • Практика CREATE TABLE

Фокус: як таблиці зв'язуються між собою

Навіщо реляційна модель

Базові терміни

Реляційна модель

Математична модель представлення даних у вигляді відношень (таблиць) з кортежами та атрибутами.

Аналогія: Як Excel-таблиця з чіткими правилами для унікальності та зв'язків

Схема двох таблиць

Зв'язок PK → FK

%%{init: {"theme": "neutral", "mermaid": {"version": "11.12.2"}}}%% erDiagram Users ||--o{ Orders : PK->FK Users { int id PK string name string email } Orders { int id PK int user_id FK string item }

CREATE TABLE (узагальнено)

CREATE TABLE table_name ( column data_type constraints, ... );
data_type — INT, VARCHAR, DATE тощо
constraints — PRIMARY KEY, NOT NULL, UNIQUE, CHECK
) — схема фіксує форму даних
data_type — INT, VARCHAR, DATE тощо
constraints — PRIMARY KEY, NOT NULL, UNIQUE, CHECK
) — схема фіксує форму даних
data_type — INT, VARCHAR, DATE тощо
constraints — PRIMARY KEY, NOT NULL, UNIQUE, CHECK
) — схема фіксує форму даних

Ключі в таблицях

Види ключів

Тип Призначення
PRIMARY KEY Єдиний ідентифікатор рядка
FOREIGN KEY Зв'язує таблиці, захищає посилання
COMPOSITE KEY PK з кількох колонок
CANDIDATE KEY Можливий PK, відповідає унікальності
SURROGATE KEY Штучний PK (наприклад, SERIAL)

Обмеження цілісності

Поводження FK

Що робити при видаленні/оновленні батьківського рядка

%%{init: {"theme": "neutral", "mermaid": {"version": "11.12.2"}}}%% flowchart LR; Parent[Батьківський рядок]-->Action{DELETE/UPDATE}; Action-->|CASCADE| Child[Дитячі рядки видаляються/оновлюються]; Action-->|RESTRICT| Stop[Блок операції]; Action-->|SET NULL| Nullify[FK стає NULL];

Приклад схеми (PostgreSQL)

PK, FK, UNIQUE, CHECK

CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  email TEXT NOT NULL UNIQUE,
  name TEXT NOT NULL,
  role TEXT CHECK (role IN ('student','teacher'))
);

CREATE TABLE orders (
  id SERIAL PRIMARY KEY,
  user_id INT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  item TEXT NOT NULL,
  created_at TIMESTAMP DEFAULT now()
);

Перевірка цілісності

Код для налагодження:

Команди GDB:

💡 Порада: Тестуйте обмеження одразу після створення таблиць

Помилка: таблиця без PK

⚠️ ЗАСТЕРЕЖЕННЯ

Немає унікального ідентифікатора — важко посилатися

❌ Неправильно

CREATE TABLE products (name TEXT, price NUMERIC);

Немає стабільного ключа для FK та оновлень

✓ Правильно

CREATE TABLE products (
  id SERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  price NUMERIC NOT NULL
);

PK забезпечує унікальність і дозволяє референси

Дизайн таблиць (кроки)

Від вимог до схеми

T0

Вимоги

Зібрати сутності та атрибути

T1

Ключі

Обрати PK та можливі candidate keys

T2

Зв'язки

Визначити FK та cardinality

T3

Норми

Перевірити 1NF/2NF/3NF

T4

Тести

Створити таблиці та прогнати обмеження

Нормальні форми (коротко)

Best practices

Міні-вікторина

Для чого зовнішній ключ?

  • Зберігати JSON у колонці
  • Зв'язати таблиці та гарантувати існування посилань
  • Зашифрувати чутливі дані
✅ Правильна відповідь: Зв'язати таблиці та гарантувати існування посилань
💡 Пояснення:

FK перевіряє, що посилання веде на наявний PK.

Міні ТЗ: блог

Скелет ERD блогу

Сутності та ключі

%%{init: {"theme": "neutral", "mermaid": {"version": "11.12.2"}}}%% erDiagram Users ||--o{ Posts : PK->FK Posts ||--o{ Comments : PK->FK Users { int id PK; string email; string name } Posts { int id PK; int user_id FK; string title; text body } Comments { int id PK; int post_id FK; int user_id FK; text body }

Live coding: створюємо схему

$

Що будемо робити:

Демо створення таблиць та перевірки обмежень

Action Items:

CREATE TABLE users/posts/comments
Додати FK з CASCADE/RESTRICT
Спробувати видалити батьківський рядок

Готові? Почали кодити!

Підсумки

  • Реляційна модель = таблиці + ключі
  • PK/FK забезпечують ідентифікацію та зв'язки
  • Обмеження тримають цілісність і спрощують логіку

Далі — типи даних у SQL

Домашнє завдання

Наступна лекція:

Лекція 5: Типи даних у SQL

📚 Корисні ресурси:

📚 Корисні ресурси:

Дякую за увагу! 💾

← Повернутися до списку лекцій