📊 Нормальные формы в реляционных базах данных: что это и зачем нужно?
При проектировании и пользовательской эксплуатации реляционной базы данных важно следовать нормальным формам (NF), чтобы избежать избыточности, аномалий обновления и повысить целостность данных. Давайте разберёмся, какие бывают нормальные формы и как они работают.
Нормальная форма в реляционной модели данных — это свойство отношения, характеризующее его с точки зрения избыточности, потенциально приводящей к логически ошибочным результатам выборки или изменения данных, чем меньше избыточность тем выше "нормальность данных"
Процесс преобразования отношений базы данных к виду, отвечающему нормальным формам, называется нормализацией. Нормализация предназначена для приведения структуры БД к виду, обеспечивающему минимальную логическую избыточность. Конечной целью нормализации является уменьшение потенциальной противоречивости хранимой в базе данных информации.
Разберем на примерах первые три вида нормальных форм являющихся фундаментом нормализации БД.
1️⃣ Первая нормальная форма (1NF)
Требование:
1. Все атрибуты содержат только атомарные значения (неделимые).
2. Нет повторяющихся групп (множественных значений в одной ячейке).
❌ Плохо (не 1NF):
id name phones
1 Иван +123, +456, +789
✔️ Хорошо (1NF):
id name phone
1 Иван +123
1 Иван +456
1 Иван +789
Разделили атрибут phones на отдельные строки — теперь каждая ячейка содержит одно значение.
2️⃣ Вторая нормальная форма (2NF)
Требование:
1. Таблица уже в 1NF.
2. Все неключевые атрибуты зависят только от полного первичного ключа (если ключ составной).
❌ Плохо (не 2NF):
student_id course_id course_name
1 SQL101 Основы SQL
2 SQL101 Основы SQL
course_name зависит только от course_id, а не от полного составного ключа (student_id, course_id).
✔️ Хорошо (2NF):
Разбиваем таблицу на две таблицы содержащие логически единую информацию.
Таблица студентов и курсов:
student_id course_id
1 SQL101
2 SQL101
Таблица курсов:
course_id course_name
SQL101 Основы SQL
Теперь course_name зависит только от course_id, а не от полного ключа.
3️⃣ Третья нормальная форма (3NF)
Требование:
1. Таблица уже в 2NF.
2. Нет транзитивных зависимостей (атрибуты зависят только от первичного ключа, а не друг от друга).
❌ Плохо (не 3NF):
employee_id dep_id dep_name
1 10 IT
2 20 HR
dep_name зависит от dep_id, а не от первичного ключа employee_id.
✔️ Хорошо (3NF):
Разделяем таблицы логически делящие информацию.
Таблица сотрудников:
employee_id dep_id
1 10
2 20
Таблица отделов:
dep_id dep_name
10 IT
20 HR
Теперь dep_name хранится отдельно и зависит только от dep_id.
💡Вывод
Нормализация помогает избежать дублирования данных, уменьшить избыточность и повысить целостность БД.
1NF — атомарные значения.
2NF — зависимость только от полного первичного ключа.
3NF — отсутствие транзитивных зависимостей.
#Реляционные_базы_данных #Оптимизация_SQL #Нормализация
📱 Подписаться на канал | Курс автора по SQL DDL
При проектировании и пользовательской эксплуатации реляционной базы данных важно следовать нормальным формам (NF), чтобы избежать избыточности, аномалий обновления и повысить целостность данных. Давайте разберёмся, какие бывают нормальные формы и как они работают.
Нормальная форма в реляционной модели данных — это свойство отношения, характеризующее его с точки зрения избыточности, потенциально приводящей к логически ошибочным результатам выборки или изменения данных, чем меньше избыточность тем выше "нормальность данных"
Процесс преобразования отношений базы данных к виду, отвечающему нормальным формам, называется нормализацией. Нормализация предназначена для приведения структуры БД к виду, обеспечивающему минимальную логическую избыточность. Конечной целью нормализации является уменьшение потенциальной противоречивости хранимой в базе данных информации.
Разберем на примерах первые три вида нормальных форм являющихся фундаментом нормализации БД.
1️⃣ Первая нормальная форма (1NF)
Требование:
1. Все атрибуты содержат только атомарные значения (неделимые).
2. Нет повторяющихся групп (множественных значений в одной ячейке).
❌ Плохо (не 1NF):
id name phones
1 Иван +123, +456, +789
✔️ Хорошо (1NF):
id name phone
1 Иван +123
1 Иван +456
1 Иван +789
Разделили атрибут phones на отдельные строки — теперь каждая ячейка содержит одно значение.
2️⃣ Вторая нормальная форма (2NF)
Требование:
1. Таблица уже в 1NF.
2. Все неключевые атрибуты зависят только от полного первичного ключа (если ключ составной).
❌ Плохо (не 2NF):
student_id course_id course_name
1 SQL101 Основы SQL
2 SQL101 Основы SQL
course_name зависит только от course_id, а не от полного составного ключа (student_id, course_id).
✔️ Хорошо (2NF):
Разбиваем таблицу на две таблицы содержащие логически единую информацию.
Таблица студентов и курсов:
student_id course_id
1 SQL101
2 SQL101
Таблица курсов:
course_id course_name
SQL101 Основы SQL
Теперь course_name зависит только от course_id, а не от полного ключа.
3️⃣ Третья нормальная форма (3NF)
Требование:
1. Таблица уже в 2NF.
2. Нет транзитивных зависимостей (атрибуты зависят только от первичного ключа, а не друг от друга).
❌ Плохо (не 3NF):
employee_id dep_id dep_name
1 10 IT
2 20 HR
dep_name зависит от dep_id, а не от первичного ключа employee_id.
✔️ Хорошо (3NF):
Разделяем таблицы логически делящие информацию.
Таблица сотрудников:
employee_id dep_id
1 10
2 20
Таблица отделов:
dep_id dep_name
10 IT
20 HR
Теперь dep_name хранится отдельно и зависит только от dep_id.
💡Вывод
Нормализация помогает избежать дублирования данных, уменьшить избыточность и повысить целостность БД.
1NF — атомарные значения.
2NF — зависимость только от полного первичного ключа.
3NF — отсутствие транзитивных зависимостей.
#Реляционные_базы_данных #Оптимизация_SQL #Нормализация
📱 Подписаться на канал | Курс автора по SQL DDL