Третья нормальная форма (3НФ) основывается на 2НФ и требует, чтобы все неключевые атрибуты в таблице напрямую зависели только от первичного ключа, а не от других неключевых атрибутов. Это исключает транзитивные функциональные зависимости и устраняет дублирование данных, связанные с этими зависимостями.
Для достижения 3НФ, необходимо:
Пример транзитивной зависимости:
Таблица Заказы:
| ID Заказа | Дата Заказа | ID Клиента | Имя Клиента | Адрес Клиента |
|---|---|---|---|---|
| 1 | 2023-10-26 | 101 | Иванов Иван | ул. Пушкина, дом 1 |
| 2 | 2023-10-27 | 102 | Петров Петр | ул. Лермонтова, дом 5 |
| 3 | 2023-10-28 | 101 | Иванов Иван | ул. Пушкина, дом 1 |
В этой таблице, Имя Клиента и Адрес Клиента зависят от ID Клиента, а ID Клиента зависит от ID Заказа. Это транзитивная зависимость. Для перехода к 3НФ, необходимо разделить эту таблицу на две:
Таблица Заказы:
| ID Заказа | Дата Заказа | ID Клиента |
|---|---|---|
| 1 | 2023-10-26 | 101 |
| 2 | 2023-10-27 | 102 |
| 3 | 2023-10-28 | 101 |
Таблица Клиенты:
| ID Клиента | Имя Клиента | Адрес Клиента |
|---|---|---|
| 101 | Иванов Иван | ул. Пушкина, дом 1 |
| 102 | Петров Петр | ул. Лермонтова, дом 5 |
Теперь в таблице Заказы все неключевые атрибуты (Дата Заказа, ID Клиента) зависят только от первичного ключа (ID Заказа). В таблице Клиенты все неключевые атрибуты (Имя Клиента, Адрес Клиента) зависят только от первичного ключа (ID Клиента). Транзитивная зависимость устранена.
Применение 3НФ уменьшает избыточность данных, упрощает обновление и удаление данных, а также повышает целостность базы данных. Однако, иногда полная нормализация до 3НФ может привести к увеличению количества JOIN-операций при выборке данных, что может повлиять на производительность. В таких случаях может быть рассмотрена денормализация.