Intro

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

Математичні основи реляційної моделі, відношення, кортежі, атрибути, ключі та реляційна алгебра

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

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

Вступ: Чому математика?

У попередньому уроці ми дізналися, що Едгар Кодд у 1970 році запропонував революційну ідею - використовувати прості таблиці замість складних ієрархічних та мережевих структур. Але що робить реляційну модель по-справжньому потужною?

Відповідь: Математична строгість!

Реляційна модель базується на теорії множин та математичній логіці. Завдяки цьому:
  • Поведінка системи передбачувана
  • Можна формально доводити правильність операцій
  • Оптимізація запитів має математичне обґрунтування
  • Є чіткі правила для роботи з даними

Від життя до математики

Розглянемо звичайну життєву ситуацію:

Приклад: У бібліотеці є картотека з книгами. Кожна картка містить:

  • Назву книги
  • Автора
  • Рік видання
  • ISBN

Питання: Як це описати математично?

Loading diagram...
graph LR
    A[Реальний світ] --> B[Картотека книг]
    B --> C[Математична модель]
    C --> D[Відношення Relation]
    D --> E[Таблиця Table]

    style A fill:#64748b,color:#fff
    style C fill:#3b82f6,color:#fff
    style E fill:#10b981,color:#fff

Еволюція понять:

  1. Реальний світ - картотека з картками
  2. Математика - відношення (relation)
  3. Практика - таблиця (table)

Математичні основи

Теорія множин: базові поняття

Множина (Set) - це сукупність різних об'єк тів, яких розглядають як єдине ціле.

Приклади множин:

КРАЇНИ = {Україна, Польща, Німеччина, Франція}

Важливі властивості множин:

Кожен елемент може бути в множині тільки один раз.

{1, 2, 3, 2, 1} = {1, 2, 3}

Дублікати автоматично видаляються!

Декартів добуток

Декартів добуток (Cartesian Product) двох множин A і B - це множина всіх можливих упорядкованих пар (a, b), де a ∈ A і b ∈ B.Позначення: A × B

Математична формула:

A × B = {(a, b) | a ∈ A ∧ b ∈ B}

Читається: "Множина всіх пар (a, b) таких, що a належить A та b належить B"

Приклад 1: Прості множини

A = {1, 2, 3}
B = {x, y}

A × B = {
    (1, x), (1, y),
    (2, x), (2, y),
    (3, x), (3, y)
}

Візуалізація:

Loading diagram...
graph TD
    A1[1] --> Bx[x]
    A1 --> By[y]
    A2[2] --> Bx
    A2 --> By
    A3[3] --> Bx
    A3 --> By

    style A1 fill:#3b82f6,color:#fff
    style A2 fill:#3b82f6,color:#fff
    style A3 fill:#3b82f6,color:#fff
    style Bx fill:#f59e0b,color:#333
    style By fill:#f59e0b,color:#333

Кількість елементів:

|A × B| = |A| × |B| = 3 × 2 = 6 pairs

Приклад 2: Бази даних

СТУДЕНТИ = {Іван, Марія, Петро}
ПРЕДМЕТИ = {Математика, Фізика}

СТУДЕНТИ × ПРЕДМЕТИ = {
    (Іван, Математика),
    (Іван, Фізика),
    (Марія, Математика),
    (Марія, Фізика),
    (Петро, Математика),
    (Петро, Фізика)
}

Це всі можливі комбінації студентів та предметів!

Приклад 3: Множинний декартів добуток

A = {a, b}
B = {1, 2}
C = {x, y}

A × B × C = {
    (a, 1, x), (a, 1, y),
    (a, 2, x), (a, 2, y),
    (b, 1, x), (b, 1, y),
    (b, 2, x), (b, 2, y)
}

Кількість: 2 × 2 × 2 = 8 елементів

Декартів добуток - це основа для операції JOIN у SQL! Коли ви з'єднуєте дві таблиці без умови, отримуєте Декартів добуток.
-- Це Декартів добуток!
SELECT * FROM Students, Subjects;

Відношення (Relation)

Що таке відношення?

Відношення (Relation) - це підмножина Декартового добутку одного або більше доменів.

Простими словами: Відношення - це вибрані пари з декартового добутку, які мають сенс у нашому контексті.

Математично:

R ⊆ D₁ × D₂ × ... × Dₙ

Де:

  • R - відношення
  • D₁, D₂, ..., Dₙ - домени (множини можливих значень)
  • ⊆ - знак "є підмножиною"

Приклад:

ДОМЕН_СТУДЕНТИ = {Іван, Марія, Петро, Оля}
ДОМЕН_ОЦІНКИ = {2, 3, 4, 5}

ДЕКАРТІВ_ДОБУТОК має 4 × 4 = 16 пар

ВІДНОШЕННЯ_ОЦІНКИ = {
    (Іван, 5),
    (Марія, 4),
    (Петро, 3),
    (Оля, 5)
}

ВІДНОШЕННЯ_ОЦІНКИ ⊆ ДОМЕН_СТУДЕНТИ × ДОМЕН_ОЦІНКИ

Важливо: Відношення містить тільки осмислені комбінації!

Властивості відношень

{(Іван, 5), (Марія, 4)} = {(Марія, 4), (Іван, 5)}

Рядки в таблиці можна переставляти!

Приклад відношення

Відношення СТУДЕНТИ:

Математичний запис:

СТУДЕНТИ = {
    (1, "Іван", "Іваненко", 20),
    (2, "Марія", "Коваленко", 19),
    (3, "Петро", "Сидоренко", 21)
}

Табличне представлення:

student_idfirst_namelast_nameage
1ІванІваненко20
2МаріяКоваленко19
3ПетроСидоренко21
Відношення - це математичний об'єкт (множина кортежів).
Таблиця - це візуальне представлення відношення.Відношення - теорія, таблиця - практика!

Домени (Domains)

Домен (Domain) - це множина допустимих значень для певного атрибута.

Приклади доменів

ВІКСТУДЕНТА = {16, 17, 18, ..., 99}
ОЦІНКИ = {2, 3, 4, 5}
ЦІНА = {0.00, 0.01, 0.02, ..., 999999.99}

Властивості доменів

  • Домен має ім'я
  • Домен має тип даних
  • Домен має можливі значення
  • Різні атрибути можуть використовувати один домен

Приклад:

ДОМЕН_ВІК = INTEGER, діапазон [0..150]

АТРИБУТИ:
- вік_студента використовує ДОМЕН_ВІК
- вік_викладача використовує ДОМЕН_ВІК
- вік_батька використовує ДОМЕН_ВІК

Всі три атрибути мають однаковий домен!

Чому домени важливі?

  1. Цілісність даних - неможливо вставити неправильне значення
  2. Повторне використання - один домен для багатьох атрибутів
  3. Зрозумілість - чітко видно, які значення допустимі
  4. Оптимізація - СУБД може оптимізувати зберігання

Приклад порушення цілісності:

ДОМЕН_ОЦІНКИ = {2, 3, 4, 5}

❌ INSERT INTO Grades VALUES (1, 'Іван', 10);  -- 10 не в домені!
✅ INSERT INTO Grades VALUES (1, 'Іван', 5);   -- 5 в домені

Кортежі (Tuples)

Кортеж (Tuple) - це впорядкований набір значень, де кожне значення належить відповідному домену.

Структура кортежу

Приклад кортежу:

t = (1, "Іван", "Іваненко", 20, "КНТ-21")

Розбір за позиціями:

ПозиціяЗначенняДоменАтрибут
11INTEGERstudent_id
2"Іван"VARCHAR(50)first_name
3"Іваненко"VARCHAR(50)last_name
420INTEGERage
5"КНТ-21"VARCHAR(10)group_code

Арність відношення

Арність (Arity, Degree) - це кількість атрибутів у відношенні (кількість елементів у кортежі).

Приклади:

КРАЇНИ = {
    (Україна),
    (Польща),
    (Німеччина)
}

Таблиця:

country_name
Україна
Польща
Німеччина

Потужність відношення

Потужність (Cardinality) - це кількість кортежів у відношенні (кількість рядків у таблиці).

Приклад:

СТУДЕНТИ = {
    (1, Іван, Іваненко, 20),
    (2, Марія, Коваленко, 19),
    (3, Петро, Сидоренко, 21),
    (4, Оля, Петренко, 20)
}

Арність = 4 (чотири атрибути)
Потужність = 4 (чотири кортежі/рядки)

Візуалізація:

Loading diagram...
graph LR
    A[Відношення СТУДЕНТИ] --> B[Арність = 4]
    A --> C[Потужність = 4]

    B --> D[4 атрибути:<br/>id, first_name,<br/>last_name, age]
    C --> E[4 кортежі:<br/>4 студенти]

    style A fill:#3b82f6,color:#fff
    style B fill:#64748b,color:#fff
    style C fill:#f59e0b,color:#333

Атрибути (Attributes)

Атрибут (Attribute) - це іменована колонка відношення, яка представляє певну характеристику сутності.

Типи атрибутів

Прості (Simple, Atomic) атрибути не можна розділити на частини.

Приклади:

  • age - вік (число)
  • email - адреса електронної пошти
  • rating - рейтинг
student_id: 1
age: 20
email: "ivan@example.com"

Правила атрибутів у реляційній моделі

В реляційній моделі всі атрибути мають бути атомарними!❌ Неправильно:
student_idphones
1+380501234567, +380672345678
Правильно:
student_idphone
1+380501234567
1+380672345678

Ключі (Keys)

Ключі - це фундаментальна концепція реляційноїмоделі. Вони забезпечують унікальність та зв'язки між відношеннями.

Надключ (Superkey)

Надключ (Superkey) - це набір атрибутів, значення яких унікально визначають кожен кортеж у відношенні.

Приклад:

Таблиця СТУДЕНТИ:

student_idemailfirst_namelast_name
1ivan@example.comІванІваненко
2maria@example.comМаріяКоваленко
3petro@example.comПетроСидоренко

Надключі:

{student_id}
{email}
{student_id, email}
{student_id, first_name}
{student_id, last_name}
{student_id, email, first_name, last_name}
...

Чому це надключі?

Кожна з цих комбінацій унікально ідентифікує рядок!

Якщо {A} - надключ, то {A, B}, {A, B, C}, ... - теж надключі!

Candidate Key (Потенційний ключ)

Потенційний ключ (Candidate Key) - це мінімальний надключ, тобто надключ, з якого не можна видалити жодного атрибута без втрати унікальності.

Приклад:

З попередньої таблиці:

Надключі:

{student_id}                               ← CANDIDATE KEY ✅
{email}                                    ← CANDIDATE KEY ✅
{student_id, email}                        ← НЕ candidate (можна видалити email)
{student_id, first_name, last_name}        ← НЕ candidate (можна видалити first_name і last_name)

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

{student_id}  - мінімальний
{email}       - мінімальний

Візуалізація:

Loading diagram...
graph TD
    A[Надключі] --> B{Мінімальні?}
    B -->|Так| C[Потенційні ключі]
    B -->|Ні| D[Просто надключі]

    C --> E[student_id]
    C --> F[email]

    D --> G[student_id + email]
    D --> H[student_id + first_name + ...]

    style C fill:#10b981,color:#fff
    style D fill:#64748b,color:#fff

Primary Key (Первинний ключ)

Первинний ключ (Primary Key) - це обраний потенційний ключ, який використовується для ідентифікації кортежів.

Правила первинного ключа:

  • Унікальність - кожне значення унікальне
  • Незмінність - не змінюється після створення
  • NOT NULL - не може бути NULL
  • Один на таблицю - тільки один первинний ключ

Приклад:

CREATE TABLE Students (
    student_id INT PRIMARY KEY,  -- ← Первинний ключ
    email VARCHAR(100) UNIQUE,   -- ← Потенційний ключ (альтернативний)
    first_name VARCHAR(50),
    last_name VARCHAR(50)
);

Потенційні ключі: {student_id}, {email}
Первинний ключ: student_id
Альтернативний ключ: email

Чому обрали student_id?

  • Коротший (INT vs VARCHAR(100))
  • Швидший для індексування
  • Стабільний (email може змінитися)
  • Зручний для посилань з інших таблиць

Composite Key (Складений ключ)

Складений ключ (Composite Key) - це ключ, що складається з двох або більше атрибутів.

Приклад - зв'язок багато-до-багатьох:

Таблиця ENROLLMENT (студенти та курси):

student_idcourse_idsemestergrade
11012024-15
11022024-14
21012024-15
21022024-13

Первинний ключ:

PRIMARY KEY (student_id, course_id, semester)

Чому потрібні всі три?

  • (student_id) - не унікально (студент бере багато курсів)
  • (course_id) - не унікально (курс беруть багато студентів)
  • (semester) - не унікально (багато записів за семестр)
  • (student_id, course_id, semester) - унікально! ✅

Foreign Key (Зовнішній ключ)

Зовнішній ключ (Foreign Key) - це атрибут (або набір атрибутів), який посилається на первинний ключ іншої таблиці.

Приклад:

Таблиця Students:

student_id (PK)first_namelast_name
1ІванІваненко
2МаріяКоваленко

Таблиця Enrollments:

enrollment_id (PK)student_id (FK)course_name
1011Математика
1021Фізика
1032Математика
CREATE TABLE Enrollments (
    enrollment_id INT PRIMARY KEY,
    student_id INT,
    course_name VARCHAR(100),
    FOREIGN KEY (student_id) REFERENCES Students(student_id)
);

Візуалізація зв'язку:

Loading diagram...
graph LR
    A[Students] --> B[student_id PK]
    C[Enrollments] --> D[student_id FK]

    D -.->|посилається на| B

    style B fill:#10b981,color:#fff
    style D fill:#3b82f6,color:#fff

Правила зовнішніх ключів:

  • Значення FK має існувати в PK батьківської таблиці, або бути NULL
  • При видаленні батьківського запису: - CASCADE - видалити всі дочірні - SET NULL - встановити NULL у дочірніх - RESTRICT - заборонити видалення

Alternate Key (Альтернативний ключ)

Альтернативний ключ (Alternate Key, Unique Key) - це потенційний ключ, який не обраний як первинний.

Приклад:

CREATE TABLE Users (
    user_id INT PRIMARY KEY,          -- Первинний ключ
    email VARCHAR(100) UNIQUE,        -- Альтернативний ключ
    phone VARCHAR(20) UNIQUE,         -- Альтернативний ключ
    username VARCHAR(50) UNIQUE       -- Альтернативний ключ
);

Потенційні ключі: {user_id}, {email}, {phone}, {username}
Первинний: user_id
Альтернативні: email, phone, username

In практику:

-- Можна знайти користувача будь-яким способом:
SELECT * FROM Users WHERE user_id = 1;
SELECT * FROM Users WHERE email = 'ivan@example.com';
SELECT * FROM Users WHERE phone = '+380501234567';
SELECT * FROM Users WHERE username = 'ivan_ua';

Порівняльна таблиця ключів

Тип ключаУнікан льністьКількістьNULL дозволенийВикористання
Superkey✅ ТакБагато✅ МожливоТеоретичне поняття
Candidate✅ Так1+❌ НіПотенційні ідентифікатори
Primary✅ Так1❌ НіОсновний ідентифікатор
Alternate✅ Так0+❌ НіДодаткові унікальні ідентифікатори
Foreign❌ Ні0+⚠️ ЗалежитьЗв'язки між таблицями
Composite✅ ТакЗалежить❌ НіБагатостовпцеві ключі

Від відношень до таблиць

Еволюція термінології

Едгар Кодд використовував математичні терміни, але на практиці вони еволюціонували:

Математичний термінТермін у СУБДВізуальне представлення
Відношення (Relation)Таблиця (Table)Сітка з рядками та стовпцями
Кортеж (Tuple)Рядок (Row, Record)Горизонтальний рядок у таблиці
Атрибут (Attribute)Стовпець (Column, Field)Вертикальний стовпець у таблиці
Домен (Domain)Тип даних (Data Type)INT, VARCHAR, DATE, etc.
Арність (Degree)Кількість стовпцівЧисло колонок
Потужність (Cardinality)Кількість рядківЧисло записів

Приклад еволюції:

СТУДЕНТИ = {
    t₁ = (1, "Іван", "Іваненко", 20),
    t₂ = (2, "Марія", "Коваленко", 19),
    t₃ = (3, "Петро", "Сидоренко", 21)
}

Арність = 4
Потужність = 3

Чому зміна термінології?

1970-ті: Математики та теоретики використовували терміни "відношення", "кортеж"
1980-ті: Розробники СУБД почали використовувати "таблиця", "рядок"
Сьогодні: Обидві термінології співіснуютьПричини зміни:
  • "Таблиця" інтуїтивно зрозуміліша
  • Легше пояснювати клієнтам
  • Візуальна аналогія очевидна

Важливо розуміти обидві:

  • Математична - для розуміння теорії
  • Практична - для роботи з SQL

NULL значення

NULL - це спеціальне значення, яке означає "невідомо" або "не застосовується".

NULL ≠ Порожнє значення

age = NULL

Значення невідоме. Може бути 20, 30, 50 - ми не знаємо!

Три-значна логіка (Three-Valued Logic)

У реляційній моделі логічні вирази можуть мати три значення:

Вираз істинний.

SELECT * FROM Students WHERE age > 18;
-- Повертає студентів старше 18

Правила обчислення:

Виразage = 20age = 15age = NULL
age > 18TRUEFALSEUNKNOWN
age < 25TRUETRUEUNKNOWN
age = NULLFALSEFALSEUNKNOWN
age IS NULLFALSEFALSETRUE
age IS NOT NULLTRUETRUEFALSE
Ніколи не використовуйте= NULL або != NULL!❌ Неправильно:
SELECT * FROM Students WHERE age = NULL;  -- завжди порожній результат!
Правильно:
SELECT * FROM Students WHERE age IS NULL;

Логічні операції з NULL

AND (І):

ABA AND B
TRUETRUETRUE
TRUEFALSEFALSE
TRUEUNKNOWNUNKNOWN
FALSEUNKNOWNFALSE
UNKNOWNUNKNOWNUNKNOWN

OR (АБО):

ABA OR B
TRUETRUETRUE
TRUEFALSETRUE
TRUEUNKNOWNTRUE
FALSEUNKNOWNUNKNOWN
UNKNOWNUNKNOWNUNKNOWN

NOT (НЕ):

ANOT A
TRUEFALSE
FALSETRUE
UNKNOWNUNKNOWN

Приклад:

-- age = NULL, grade = 5

SELECT * FROM Students
WHERE age > 18 AND grade > 4;
-- age > 18 = UNKNOWN
-- grade > 4 = TRUE
-- UNKNOWN AND TRUE = UNKNOWN
-- Рядок НЕ буде включено!

Реляційна алгебра

Реляційна алгебра (Relational Algebra) - це формальна мова для виконання операцій над відношеннями.

Реляційна алгебра - це математична основа SQL!

Основні операції

Вибір стовпців

Позначення: π (грецька літера "пі")

Синтаксис:

π_{A₁, A₂, ..., Aₙ}(R)

Приклад:

СТУДЕНТИ:
| student_id | first_name | last_name | age |
|------------|------------|-----------|-----|
| 1          | Іван       | Іваненко  | 20  |
| 2          | Марія      | Коваленко | 19  |

π_{first_name, age}(СТУДЕНТИ) =

| first_name | age |
|------------|-----|
| Іван       | 20  |
| Марія      | 19  |

SQL еквівалент:

SELECT first_name, age FROM Students;

Композиція операцій

Операції можна комбінувати!

Приклад: Знайти імена студентів старше 19 років

Реляційна алгебра:

π_{first_name}(σ_{age > 19}(СТУДЕНТИ))

Крок 1: σ*{age > 19}(СТУДЕНТИ) - вибрати студентів старше 19
Крок 2: π*(...) - взяти тільки імена

SQL:

SELECT first_name
FROM Students
WHERE age > 19;

Складніший приклад:

Завдання: Знайти імена студентів, які отримали оцінку 5 з математики

Реляційна алгебра:

π_{name}(
    σ_{grade = 5 AND subject = 'Математика'}(
        СТУДЕНТИ ⋈_{student_id} ОЦІНКИ
    )
)

SQL:

SELECT s.name
FROM Students s
JOIN Grades g ON s.student_id = g.student_id
WHERE g.grade = 5 AND g.subject = 'Математика';

Практичні приклади

Приклад 1: Бібліотека

Відношення BOOKS:

BOOKS = {
    (1, "Кобзар", "Тарас Шевченко", 1840),
    (2, "Лісова пісня", "Леся Українка", 1911),
    (3, "Захар Беркут", "Іван Франко", 1883)
}

Домени:

  • book_id ∈ INTEGER
  • title ∈ VARCHAR(200)
  • author ∈ VARCHAR(100)
  • year ∈ INTEGER 1000..2100

Таблиця:

book_id (PK)titleauthoryear
1КобзарТарас Шевченко1840
2Лісова пісняЛеся Українка1911
3Захар БеркутІван Франко1883

Операції:

π_{title}(BOOKS) =

| title         |
|---------------|
| Кобзар        |
| Лісова пісня  |
| Захар Беркут  |

Приклад 2: Університет

Три відношення:

STUDENTS:

student_id (PK)namegroup_id (FK)
1Іван101
2Марія101
3Петро102

GROUPS:

group_id (PK)group_namefaculty
101КНТ-21КН
102КНТ-22КН

ENROLLMENTS:

student_id (FK)coursegrade
1Math5
1Physics4
2Math5
3Physics3

Запит: Знайти назви груп студентів, які отрим али 5 з математики

Реляційна алгебра:

π_{group_name}(
    GROUPS ⋈_{group_id} (
        STUDENTS ⋈_{student_id} (
            σ_{course='Math' AND grade=5}(ENROLLMENTS)
        )
    )
)

Крок 1: Вибрати оцінки 5 з Math

σ_{course='Math' AND grade=5}(ENROLLMENTS)
| student_id | course | grade |
|------------|--------|-------|
| 1          | Math   | 5     |
| 2          | Math   | 5     |

Крок 2: Приєднати студентів

| student_id | name  | group_id |
|------------|-------|----------|
| 1          | Іван  | 101      |
| 2          | Марія | 101      |

Крок 3: Приєднати групи

| student_id | name  | group_id | group_name |
|------------|-------|----------|------------|
| 1          | Іван  | 101      | КНТ-21     |
| 2          | Марія | 101      | КНТ-21     |

Крок 4: Проекція (тільки назви груп)

| group_name |
|------------|
| КНТ-21     |

SQL:

SELECT DISTINCT g.group_name
FROM Groups g
JOIN Students s ON g.group_id = s.group_id
JOIN Enrollments e ON s.student_id = e.student_id
WHERE e.course = 'Math' AND e.grade = 5;

Висновки

У цьому уроці ми розглянули:✅ Математичні основи: теорія множин, Декартів добуток
Відношення: структура, властивості, домени
Кортежі та атрибути: арність, потужність, типи атрибутів
Ключі: надключ, потенційний, первинний, зовнішній, складений
NULL значення: три-значна логіка
Реляційна алгебра: проекція, вибірка, об'єднання, з'єднання
Еволюція: від відношень до таблиць

Ключові концепції:

  1. Математична строгість - основа надійності реляційної моделі
  2. Ключі - забезпечують унікальність та зв'язки
  3. NULL - потребує особливої уваги (три-значна логіка)
  4. Реляційна алгебра - теоретична основа SQL

Навіщо це все?

Розуміння математичних основ допомагає:
  • Проектувати правильні структури БД
  • Оптимізувати запити
  • Розуміти роботу СУБД "під капотом"
  • Уникати помилок з NULL
  • Обирати правильні ключі

У наступному уроці:

Ми вивчимо ER-моделювання - як від вимог до проєкту перейти до структури бази даних!


Практичні завдання

Виконайте ці завдання для закріплення матеріалу:

Завдання 1: Домени та відношення

Створіть відношення EMPLOYEES зі структурою:

Домени:

  • employee_id: INTEGER 1..9999
  • full_name: VARCHAR(100)
  • position: {Менеджер, Розробник, Дизайнер, Тестувальник}
  • salary: DECIMAL 0..999999.99
  • hire_date: DATE 2000-01-01..2100-12-31

Оберіть:

  1. Які атрибути є потенційними ключами?
  2. Який атрибут обрати як первинний ключ?
  3. Чи можуть атрибути мати NULL?

Завдання 2: Ключі

Дано таблиця ORDERS:

order_idcustomer_emailorder_datetotal
1ivan@example.com2024-01-15500
2maria@example.com2024-01-16750
3ivan@example.com2024-01-17300

Питання:

  1. Які надключі існують?
  2. Які потенційні ключі?
  3. Який первинний ключ обрати?
  4. Чи є складені ключі?

Завдання 3: Реляційна алгебра

Дані дві таблиці:

STUDENTS:

student_idnameage
1Іван20
2Марія19
3Петро21

GRADES:

student_idsubjectgrade
1Math5
2Math4
1Physics4
3Math5

Напишіть в реляційній алгебрі:

  1. Імена студентів старше 19
  2. Предмети, з яких хтось отримав 5
  3. Імена студентів, які отримали 5 з Math

Завдання 4: NULL логіка

Обчисліть результат:

age = NULL
grade = 5

1. age > 18 AND grade > 4 = ?
2. age <20 OR grade = 5 = ?
3. NOT (age IS NULL) = ?
4. age = NULL AND grade = 5 = ?
Правильні відповіді:
  1. UNKNOWN (UNKNOWN AND TRUE = UNKNOWN)
  2. TRUE (UNKNOWN OR TRUE = TRUE)
  3. FALSE (NOT TRUE = FALSE, бо age IS NULL = TRUE)
  4. UNKNOWN (UNKNOWN AND TRUE = UNKNOWN)
Copyright © 2026