Моделювання даних: концептуальна/логічна/фізична моделі; ER-модель і нотації

Розділ: Бази та сховища даних

📌 Про що ця тема

Тут перевіряють, чи вмієш ти описати структуру майбутньої бази даних ДО її створення. Ключове поняття — модель даних: формалізований опис того, які дані зберігаються, як вони повʼязані й за якими правилами. Головний інструмент — ER-модель (модель «сутність–звʼязок»).


📖 Головне

• Рівні моделювання йдуть від абстрактного до технічного: концептуальна → логічна → фізична. Це послідовність деталізації одного й того самого.

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

• Логічна модель — деталізація: усі сутності, їхні атрибути, ключі (первинні й зовнішні), типи звʼязків. Ще НЕ залежить від конкретної СКБД.

• Фізична модель — реалізація під конкретну СКБД: таблиці, стовпці з типами даних (INT, VARCHAR), індекси, обмеження, імена об'єктів.

• Сутність (entity) — об'єкт, про який зберігають дані (Студент, Книга). У таблиці стає таблицею.

• Атрибут — властивість сутності (прізвище, рік). Стає стовпцем.

• Екземпляр сутності — один конкретний об'єкт (один студент). Стає рядком.

• Первинний ключ (PK) — атрибут(и), що однозначно ідентифікують екземпляр. Унікальний, не порожній.

• Зовнішній ключ (FK) — атрибут, що посилається на PK іншої сутності; саме він реалізує звʼязок.

• Типи звʼязків за кратністю: 1:1 (один-до-одного), 1:N (один-до-багатьох), M:N (багато-до-багатьох).

• Звʼязок M:N у реляційній БД прямо не реалізується — його розбивають через проміжну (звʼязкову) таблицю з двома FK.

• Нотації ER: Чена (сутність — прямокутник, атрибут — овал, звʼязок — ромб) та «вороняча лапка» / Crow's Foot (кратність показують символами на кінці лінії: одинарна риска = один, «лапка» = багато, кружечок = нуль/необов'язково).


🔢 Як це працює на прикладі

Завдання: студенти і курси; студент може слухати багато курсів, курс — мати багато студентів.

Крок 1 (концептуальна): дві сутності Студент і Курс, між ними звʼязок «слухає».

Крок 2 (логічна): визначаємо кратність — M:N. Це означає, що потрібна третя сутність Запис. Студент(ID_студента PK, ПІБ), Курс(ID_курсу PK, Назва), Запис(ID_студента FK, ID_курсу FK, оцінка).

Крок 3 (фізична): таблиця Student (id INT PK, name VARCHAR(100)); Course (id INT PK, title VARCHAR(100)); Enrollment (student_id INT FK, course_id INT FK, grade INT).

Результат: M:N перетворено на два звʼязки 1:N через проміжну таблицю.


⚠️ Типові помилки

• Плутають рівні моделей: приписують концептуальній типи даних (це вже фізична) або «забувають» ключі в логічній.

• Намагаються реалізувати M:N одним зовнішнім ключем — це неможливо, потрібна звʼязкова таблиця.

• Плутають сутність і екземпляр: «Студент Іваненко» — це екземпляр, а не окрема сутність.

• Вважають, що фізична модель не залежить від СКБД — залежить саме вона (типи, індекси різні).

• У нотації Crow's Foot неправильно читають кінці лінії: кратність показує той символ, що БІЛЯ сутності, а не посередині.


🎯 Що завчити напамʼять

• Порядок рівнів: концептуальна → логічна → фізична (загальне → деталі → під СКБД).

• Що додається на кожному рівні: атрибути/ключі — у логічній; типи даних/індекси — у фізичній.

• Три кратності: 1:1, 1:N, M:N.

• M:N = обов'язково проміжна таблиця з двома FK.

• PK — унікальний і не порожній; FK — посилання на PK іншої таблиці.


🧠 Перевір себе

1. На якому рівні з'являються типи даних стовпців?

2. Як реалізувати звʼязок M:N у реляційній БД?

3. Чим сутність відрізняється від екземпляра?

4. Що в нотації Crow's Foot показує «вороняча лапка»?


Відповіді: 1 — на фізичному; 2 — через проміжну (звʼязкову) таблицю з двома зовнішніми ключами, що розбиває M:N на два 1:N; 3 — сутність це тип об'єкта (таблиця), екземпляр це один конкретний об'єкт (рядок); 4 — кратність «багато» на цьому кінці звʼязку.

Перевірити себе на практиці

Прочитати — половина справи. Далі потрібні завдання цієї ж теми з розбором кожної відповіді: саме на них видно, чи справді тема закрита.