Нормалізація таблиць – це формальний апарат обмежень на формування таблиць, який дозволяє усунути дублювання даних, забезпечує несуперечність збережених у базі даних, зменшує трудовитрати на ведення бази даних (введення та коригування даних).
Для нормалізації таблиць та БД використовують обмеження:
1) Першої нормальної форми.
2) Друга нормальна форма.
3) Третьої нормальної форми.
Перша нормальна форма (1NF) – відсутність повторюваних даних, будь-яке поле
будь-якого запису зберігає лише одне значення.
Друга нормальна форма (2NF) – вимагає попереднього приведення вихідної таблиці до першої НФ, а так само кожен не ключовий стовпець таблиці, що знаходиться в 1НФ, повинен залежати від усього ключа.
Третя нормальна форма (3NF) – вимагає попереднього приведення вихідної таблиці до другої НФ, а також до жодного ключового стовпця не може бути залежності від іншого не ключового стовпця. Також не допускається наявність таблиці похідних даних.
Денормалізація – процес зниження нормальної форми. Здійснюється, якщо наведена вища форма призводить до погіршення практичного використання.
Наприклад, для зручності роботи та швидкості обчислень бажано повернути обчислюваний стовпець TotalPrice.
Для цього потрібно пониження 3 нормальної форми і ввести стовпець TotalPrice.
Q&A
Дякую всім за заняття!🙌🏻
❗️🎓Тема уроку: 3. Проектування БД
Нагадую, що дедлайн здачі домашніх робіт – до наступного уроку.
Якщо виникають складнощі, пишіть, допоможу із задоволенням 😌
Запис лекції тренер опублікує трохи пізніше 🖥
Не забудьте повторити матеріал та підготуватися до наступного уроку📚
База даних бібліотеки
Опис: Створити базу даних для невеликої бібліотеки. Потрібно зберігати інформацію про книги, авторів та читачів. Також необхідно відстежувати, які книги зараз знаходяться у читачів.
Сутності: Книга, Автор, Читач, Видача книги.
Атрибути:
Книга: ISBN (первинний ключ), Назва, Рік видання, Жанр.
Автор: ID автора (первинний ключ), Ім'я, Прізвище.
Читач: ID читача (первинний ключ), Ім'я, Прізвище, Адреса, Телефон.
Видача книги: ID видачі (первинний ключ), ISBN (зовнішній ключ), ID читача (зовнішній ключ), Дата видачі, Дата повернення (може бути NULL).
Зв'язки:
Один автор може написати багато книг (один-до-багатьох).
Одна книга може мати одного або кількох авторів (багато-до-багатьох - реалізувати через проміжну таблицю, наприклад, "Автор_Книга").
Один читач може взяти багато книг, і одна книга може бути взята багатьма читачами (багато-до-багатьох - реалізувати через таблицю "Видача книги").
Завдання:
Визначити первинні та зовнішні ключі.
Накреслити ER-діаграму.
Створити SQL-запити для:
Додавання нової книги, автора, читача.
Видачі книги читачеві.
Повернення книги.
Виведення списку всіх книг певного автора.
Виведення списку всіх книг, які зараз знаходяться у читачів.
Середнє завдання: База даних інтернет-магазину
Опис: Розробити базу даних для невеликого інтернет-магазину. Потрібно зберігати інформацію про товари, категорії товарів, користувачів, замовлення та деталі замовлень.
Сутності: Товар, Категорія, Користувач, Замовлення, Деталі замовлення.
Атрибути:
Товар: ID товару (первинний ключ), Назва, Опис, Ціна, Кількість на складі, ID категорії (зовнішній ключ).
Категорія: ID категорії (первинний ключ), Назва категорії.
Користувач: ID користувача (первинний ключ), Ім'я, Прізвище, Email, Пароль, Адреса доставки.
Замовлення: ID замовлення (первинний ключ), ID користувача (зовнішній ключ), Дата замовлення, Статус замовлення (наприклад, "Нове", "В обробці", "Відправлено", "Доставлено").
Деталі замовлення: ID деталі замовлення (первинний ключ), ID замовлення (зовнішній ключ), ID товару (зовнішній ключ), Кількість, Ціна за одиницю (на момент замовлення).
Зв'язки:
Одна категорія може містити багато товарів (один-до-багатьох).
Один користувач може зробити багато замовлень (один-до-багатьох).
Одне замовлення може містити багато товарів (один-до-багатьох через сутність "Деталі замовлення").
Завдання:
Визначити первинні та зовнішні ключі.
Накреслити ER-діаграму.
Створити SQL-запити для:
Додавання нового товару, категорії, користувача.
Оформлення нового замовлення.
Перегляду всіх замовлень певного користувача.
Виведення списку товарів у певній категорії.
Зменшення кількості товару на складі після оформлення замовлення.
Виведення загальної суми замовлення.
Складне завдання: База даних системи управління проектами
Опис: Створити базу даних для системи управління проектами. Потрібно зберігати інформацію про проекти, завдання, виконавців, статуси завдань, пріоритети, терміни виконання та відстежувати прогрес.
Сутності: Проект, Завдання, Виконавець, Статус, Пріоритет.
Атрибути:
Проект: ID проекту (первинний ключ), Назва проекту, Опис, Дата початку, Дата завершення (планова).
Завдання: ID завдання (первинний ключ), ID проекту (зовнішній ключ), Назва завдання, Опис, ID статусу (зовнішній ключ), ID пріоритету (зовнішній ключ), Дата початку, Дата завершення (планова), Дата завершення (фактична), Відсоток виконання.
Виконавець: ID виконавця (первинний ключ), Ім'я, Прізвище, Email.
Статус: ID статусу (первинний ключ), Назва статусу (наприклад, "Нове", "В процесі", "Завершено", "Відкладено").
Пріоритет: ID пріоритету (первинний ключ), Назва пріоритету (наприклад, "Низький", "Середній", "Високий").
Зв'язки:
Один проект може мати багато завдань (один-до-багатьох).
Одне завдання може бути призначене одному або кільком виконавцям (багато-до-багатьох - через проміжну таблицю, наприклад, "Призначення").
Кожне завдання має один статус (багато-до-одного).
Кожне завдання має один пріоритет (багато-до-одного).
Завдання:
Визначити первинні та зовнішні ключі.
Накреслити ER-діаграму.
Створити SQL-запити для:
Додавання нового проекту, завдання, виконавця.
Призначення виконавця на завдання.
Зміни статусу завдання.
Виведення списку всіх завдань у певному проекті.
Виведення списку всіх завдань, призначених певному виконавцю.
Виведення списку всіх завдань зі статусом "В процесі" у всіх проектах.
Виведення списку проектів, відсортованих за датою початку.
Реалізувати складний запит для аналізу прогресу проекту (наприклад, середній відсоток виконання завдань у проекті).