# Нормальные формы

{% hint style="info" %}
**Нормальная форма (НФ)** — требование, предъявляемое к структуре таблиц в теории реляционных баз данных для устранения из базы избыточных функциональных зависимостей между атрибутами (полями таблиц).
{% endhint %}

Всего существует 6 нормальных форм, однако зачастую на практике применяют только первые 3.

* 1НФ
* 2НФ
* 3НФ
* Нормальная форма Бойса-Кодда (частный случай 3НФ)
* 4НФ
* 5НФ
* 6НФ

{% hint style="success" %}
Важно отметить, что данные формы должны соблюдаться последовательно, то есть таблицы не могут находится в 2НФ не находясь при этом в 1НФ.
{% endhint %}

## 1 Нормальная форма

Отношение находится в 1НФ, если все его атрибуты являются простыми, все используемые домены должны содержать только скалярные значения. Не должно быть повторений строк в таблице.

* Одно поле = одно значнеие
* Нет повторов строк

## 2 Нормальная форма

Отношение находится во 2НФ, если оно находится в 1НФ и каждый не ключевой атрибут неприводимо зависит от Первичного Ключа(ПК).

* Если есть такая возможность вынести часть таблицы через ПК/ВК - это нужно сделать

## 3 Нормальная форма

Отношение находится в 3НФ, когда находится во 2НФ и каждый не ключевой атрибут нетранзитивно зависит от первичного ключа. Проще говоря, второе правило требует выносить все не ключевые поля, содержимое которых может относиться к нескольким записям таблицы в отдельные таблицы.

* То же самое, что и в 2 НФ, но сохраняя логику отношений таблиц&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.system-analyst-base.ru/hard-skills/bazy-dannykh/relyacionnye/normalnye-formy.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
