Нормалізація баз даних друга нормальна форма

Друга нормальна форма.

Для приведення таблиць до другої нормальної форми (2НФ), що наводяться таблиці повинні бути вже в 1НФ. Нормалізація повинна проходити по порядку.

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

Нормалізація баз даних друга нормальна форма

На малюнку вище і назви фільмів та імена акторів порушують правила 2НФ (самі не є ключами і не залежать від первинного ключа).

Після всіх перетворень, база даних з фільмами матиме мінімум 4 таблиці.

Нормалізація баз даних друга нормальна форма

Щоб привести бд до другої нормальної форми, треба було 4 таблиці. Режисери (directors), представлені у фільмах (movies) через зовнішній ключ director ID, фільми в таблиці фільми-актори (movies-actors) через movie ID, актори через actor ID

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

За фактом, нормалізація може бути перебільшено названа процесом створення все нових і нових таблиць до тих пір, поки надмірність і повторення не будуть повністю знищені.

Щоб привести базу до другої нормальної форми, треба:

Нормалізація баз даних друга нормальна форма

Щоб привести цю базу до 2НФ, потрібно 3 таблиці мінімум

  • Визначити всі стовпці, які не перебувають у прямій залежності від первинного ключа цієї таблиці. На малюнку вище у таблиць users і forums немає первинного ключа. У таблиці messages первинний ключ - message ID, від якого залежать всі інші поля цієї таблиці.
  • Створюємо необхідні поля в таблицях users і forums, виділяємо з існуючих полів або створюємо з нових первинні ключі.

Нормалізація баз даних друга нормальна форма

Для кожної таблиці потрібен свій первинний ключ

  • Створюємо зовнішні ключі і позначаємо їх відносини між таблицями. Кінцевим кроком нормалізації до 2НФ буде виділення зовнішніх ключів для зв'язку з асоційованими таблицями. Первинний ключ однієї таблиці повинен бути зовнішнім ключем в інший. На малюнку знизу показаний зв'язок між ключами трьох таблиць. Поле user ID таблиці messages є первинним ключем поля user ID таблиці users. Тип зв'язку між ними - один до багатьох. Один користувач може залишити багато повідомлень, але у повідомлення може бути тільки один користувач. Така ж зв'язок з'єднує таблиці forums і messages через forum ID. У форуму може бути багато повідомлень, але повідомлення може перебувати тільки в одному форумі.
  • Нормалізація баз даних друга нормальна форма

    Щоб співвіднести три таблиці, в messages додано два зовнішніх ключа, що ведуть на первинні ключі в своїх таблицях

    підказки:

    • Інший спосіб приведення схеми до 2НФ - подивитися на відносини між таблицями. Ідеальний варіант - створити всі відносини виду один-до-багатьох. Відносини виду багато-до-багатьох потребують реструктуризації.
    • Якщо поглянути ще раз на таблицю movies-actors, то можна помітити, що вона є проміжною таблицею. Вона перетворює ставлення багато-до-багатьох між movies і actors в один-до-багатьох. Можна вводити такі проміжні таблиці, у яких всі стовпці є ключами. У таких таблицях не потрібно свій власний первинний ключ, оскільки він може бути комбінацією двох зовнішніх ключів.
    • Нормалізована належним чином таблиця ніколи не буде мати повторюваних рядів (двох і більше рядів, значення яких не є ключами і містять збігаються дані).
    • Щоб спростити нормалізацію, пам'ятайте, що при приведенні до 1НФ ви шукаєте дублі горизонтально (дублі стовпців), а при приведенні до 2НФ - вертикально (дублі рядів).