TGViewer
В мире больших данных В мире больших данных @big_data_systems_analysis · 301 subscribers
Post #133 206
1 и 2 НФ: первые шаги к упорядоченным данным

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

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

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

Пример таблицы, нарушающей 1НФ (таблицы могут некорректно отображаться на небольших телефонах 🥲 смотрите в горизонтальной ориентации):

| student_id | student_name | courses |
|------------|--------------|---------------------|
| 1 | Иван | Математика, Физика |
| 2 | Марья | Химия, Биология |


Чтобы привести таблицу к 1НФ, нужно:
— Убрать повторяющиеся группы значений из отдельных ячеек
— Создать отдельную запись для каждого значения в исходной или новой связанной таблице
— Определить уникальный первичный ключ для каждой таблицы

Пример таблиц, приведенных к 1НФ:

| student_id | student_name |
|------------|--------------|
| 1 | Иван |
| 2 | Марья |



| student_id | course |
|------------|--------------|
| 1 | Математика |
| 1 | Физика |
| 2 | Химия |
| 2 | Биология |


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

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

Здесь главное избавиться от частичных зависимостей. Например, если у вас есть таблица "student_courses" с составным ключом из student_id и course_id, а поле "student_name" зависит только от student_id — это нарушение 2НФ.

Пример таблицы, нарушающей 2НФ:

| student_id | course_id | student_name | grade |
|------------|-----------|--------------|-------|
| 1 | 101 | Иван | 5 |
| 1 | 102 | Иван | 4 |
| 2 | 101 | Мария | 3 |


Чтобы привести к 2НФ:
— Выделите зависимые атрибуты в отдельную таблицу
— Свяжите новую таблицу с исходной через первичный ключ

Пример таблиц, приведенных к 2НФ:

| student_id | student_name |
|------------|--------------|
| 1 | Иван |
| 2 | Мария |



| student_id | course_id | grade |
|------------|-----------|-------|
| 1 | 101 | 5 |
| 1 | 102 | 4 |
| 2 | 101 | 3 |


Теперь данные о студентах будут в отдельной таблице. Это уменьшит избыточность и упростит анализ информации.

Применение 1НФ и 2НФ помогает:
+ Улучшить целостность данных
+ Уменьшить избыточность
+ Упростить обновление информации

Помните, нормализация — это непрерывный процесс.

Также стоит отметить, что современные системы управления базами данных (СУБД) часто автоматизируют процесс нормализации. Например, PostgreSQL с версии 10 предлагает функции для автоматической нормализации таблиц. Но не все и не всегда ими пользуются, и не везде это работает корректно 😁 так что понимать основы нужно обязательно.

В следующий раз уделим немного внимания 3НФ.

А вы применяете нормализацию в своих проектах? Какие сложности встречали?

#dwh
  • ❤ 2
  • 👍 2
  • 🤝 1
More from @big_data_systems_analysis
  1. Jul 28, 2026Продолжая тему тех самых SQL-скриптов на 1200 строк, хочу напомнить одну важную вещь, кото…
  2. Jul 15, 2026Борьба с ветряными мельницами Думаю, многим из вас уже набили оскомину разговоры об ИИ. Мн…
  3. Mar 8, 2026В этот день желаю женской части аудитории верить в себя и позволять быть себе любой без ог…
  4. Mar 6, 2026Этот мем — точная копия одного рабочего дня, который я, кажется, прожила уже раз двести 😄…
  5. Mar 4, 2026Знаете, какая фраза чаще всего дорого обходится компании? "Работает — и ладно" 🥂 Результа…
  6. Feb 26, 2026Дисциплина, конечно, прошла мимо меня 😄 в черновиках 1000 и 1 пост, но ни один из них не…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →