Нормализация

пятница, окт. 3, 2025 | 6 минут чтения

Нормализация
  • Нормализация - процесс организации данных в базе данных для достижения двух основных целей: устранение избыточности данных, обеспечение целостности данных
  • Три нормальных формы:

Избыточность

  • Аномалия добавления
    • Невозможно добавить данные об одном объекте, не добавив данные о другом
      • К примеру, если нужно добавить студента, который ходит на математику, а сведений о математике ранее не было, значит придётся добавлять и её
  • Аномалия удаления
    • При удалении одних данных мы невольно теряем другие.
      • Если только один студент посещал математику, то удаляя студента с математикоймы потеряем и всю инфу о математике
  • Аномалия обновления
    • Чтобы изменить какое-то значение, нам приходится обновлять его в нескольких местах
      • Если мы хоти обновить имя студента, а он несколько раз добавлен в бд, то нужно фиксить каждое имя

Функциональная зависимость

  • Функциональная зависимость $A → B$ означает, что каждому значению атрибута $A$ соответствует ровно одно значение атрибута $B$. Говоря проще, зная $A$, мы однозначно определяем $B$
  • $НомерПаспорта → ФИО$ (Зная номер паспорта, мы найдем только одного человека)
  • $Номер заказа → ДатаЗаказа, ; Сумма$ (зная номер заказа, мы узнаем его дату и сумму)

Первая нормальная форма

  • Переменная отношения находится в первой нормальной форме тогда и только тогда, когда в любом допустимом значении отношения каждый его кортёж содержит только одно значение каждого из атрибутов
    • Пусть у человека есть более чем 1 номер телефона. Тогда можно создать 2 отдельных атрибута под каждый из номеров. Однако встречаются такие проблемы, как: у кого-то только 1 номер, значит непонятно, в какой из атрибутов писать. Если кто-то хочет ввести 10, 20 номеров… тогда нужно создавать 10-20 атрибутов?….. Нельзя найти одинаковые значения с помощью юник, потому что в разных атрибутах
    • Ну тогда можно брать и в 1 атрибут класть кортеж из всех номеров… всё также проблемы с поиском конкретного номера, впринципе поиск дольше… Решение:
  • Просто несколько раз запишем одного и того же человека, но в каждом кортеже другой номер телефона

(Определение из википедии)
Отношение находится в первой нормальной форме (1НФ) тогда и только тогда, когда

  • в отношении нет повторяющихся групп (атрибутов с одинаковым смыслом)
  • все атрибуты атомарны
  • у отношения есть ключ

Вторая нормальная форма

  • Переменная отношения находится во второй нормальной форме тогда и только тогда, когда она находится в первой нормлаьной форме и каждый неключевой атрибут неприводимо зависит от каждого её потенциального ключа (уникальность, минимальность ключа)
    • Например, есть есть 2 потенциальных ключа - ису и предмет. Здесь неключевой атрибут имя зависит от ису. Но что-то зависит не полностью Решение:
  • Делаем де композицию и теперь у нас все неключевые атрибуты полностью зависят от ключа

(не получится сделать вторую форму, если не сделана первая)

Третья нормальная форма

  • Переменная отношения находится в третьей нормальной форме тогда, и только тогда, когда она находится во второй нормальной норме, и отсутствуют транзитивно функциональные зависимости неключевых атрибутов от ключевых
    • В примере номер не зависит от человека, а только от кафедры. Кафедра зависит от человека, а номер от кафедры. Решение:
    • Снова делаем декомпозицию, чтобы не было повтора телефона для человека

Четвёртая нормальная форма

  • Переменная отношения находится в НФБК, когда она находится в третьей нормальной форме и ключевые атрибуты составного ключа не зависят от неключевых атрибутов
  • Таблиц с простым первичным ключом, находящиеся в 3 НФ, автоматически соответсвтуют НФБК

Высшие нормальные формы

  • Четвертая нормальная форма (4НФ): Борется с многозначными зависимостями. Это когда один атрибут определяет множество независимых значений других атрибутов
  • Пятая нормальная форфма (5НФ): Борется с зависимостями соединения без потерь, когда отношение можно без искажений восстановить только из трех и более проекций.

Многозначные зависимости

  • X многозначно определяет Y тогда и только тогда, когда для каждого значения X существует набор значений Y, и этот набор не зависит от значений других атрибутов Z
  • Если мы зафиксируем значение X, то получим независимые от друг друга множества соответсвующих значений Y и Z
  • Многозначная зависимость возникает, когда у одной сущности есть две или более независимых характеристики “многие-ко-многим”

Четвертая нормальная форма

  • Переменная отношения находится в четвертой нормальной форме, если она находится в третьей нормальной форме и не содрежит нетривиальных многозначных зависимостей

Пример 4НФ

  • Преподаватель Иванов ведет два предмета (Математика и Физика) и у него два студента (Петров и Сидоров). Чтобы отразить все возможные парные комбинации, нам пришлось создать 4 строки
  • Аномалия Вставки: Чтобы дбавить преподавтелю Иванову третьего студента, нам нужно будет вставить две новых строки: одну для Математики, другую для Физика
  • Удаление: Если студент Сидоров перестал изучать Физику у Иванова, мы должны
  • удалить только одну строку? Но какую? Удаление одной строки нарушит целостность данных о том, что Иванов ведет и Физику, и что сидоров у него учится.

Решение: декомпозиция на два отношения

Пятая нормальная форма

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

Пример 5НФ

  • Бизнес-правило: “Если поставщик S поставляет деталь P, и деталь P используется в проекте J, и поставщик S работает над проектом J, т поставщик S поставляет дталь P для проекта J”
  • Это правило является циклическим ограничением. Оно означает, что наша таблица должна быть закрыта относительно этого правила. если существует три пары (S,P), (P,J) и (S,J), то должна существовать и тройка (S,P,J)
  • Аномалия: Если мы попробуем декомпозировать эту таблицу на любые две проекции (например, (Поставщик, Деталь) и (Деталь, Проект)), а потом обратно их соединить, мы получим фиктивные (ложные) строки, которых не было в исходном отношении.

Решение: перепроектирование отношений

Пример staff_property_inspection

  • Отчёт о осмотрах объектов недвижимости сотрудниками.
  • Проблема: Повторяющиеся группы данных, адрес объекта и имя сотрудника дублируются для каждого осмотра
property_noproperty_addressinspection_dateinspection_timecommentsstaff_nostaff_namecar_registration
PG46 Lawrence St…18-Oct-0010.00Need to replaceSG37Ann BeechM231JGR
PG46 Lawrence St…22-Apr-109.00In good orderSG14David FordM533HDR
PG46 Lawrence St…1-Ocr-0112.00Damp rot in bathroomSG14David FordN721HFR

1 НФ

  • Устранены повторяющиеся группы. Первичный ключ: property_no, inspection_date)
  • Атрибут property_address частично зависит только от property_no, что нарушает “2НФ”
property_noinspection_dateinspection_timeproperty_addresscommentsstaff_nostaff_namecar_registration
PG418-Oct-0010.006 Lawrence St…Need to replaceSG37Ann BeechM231JGR
PG422-Apr-109.006 Lawrence St…In good orderSG14David FordM533HDR
PG41-Ocr-0112.006 Lawrence St…Damp rot in bathroomSG14David FordN721HFR

2 НФ

  • Устранена частичная зависимость. Неключевые атрибуты зависят от всего первичного ключа.
  • Атрибут staff_name транзитивно зависит от первичного ключа через staff_no, что нарушает 3НФ
property_noinspection_dateinspection_timecommentsstaff_nostaff_namecar_registration
PG418-Oct-0010.00Need to replaceSG37Ann BeechM231JGR
PG422-Apr-109.00In good orderSG14David FordM533HDR
PG41-Ocr-0112.00Damp rot in bathroomSG14David FordN721HFR
property_noproperty_address
PG46 Lawrence St…
PG165 Novar Dr…

3 НФ

  • Устранены транзитивные зависимости. Схема находится в 3НФ
  • Зависимость (staff_no, inspection_date) → car_registration нарушает НФБК, так как детирминант не является потенциальным ключом
property_noinspection_dateinspection_timecommentsstaff_nocar_registration
PG418-Oct-0010.00Need to replaceSG37M231JGR
PG422-Apr-109.00In good orderSG14M533HDR
PG41-Ocr-0112.00Damp rot in bathroomSG14N721HFR
staff_nostaff_name
SG37Ann Beech
SG14David Ford
SG14David Ford

НФБК

property_noinspection_dateinspection_timecommentsstaff_no
PG418-Oct-0010.00Need to replaceSG37
PG422-Apr-109.00In good orderSG14
PG41-Ocr-0112.00Damp rot in bathroomSG14
staff_nostaff_namecar_registration
SG37Ann BeechM231JGR
SG14David FordM533HDR
SG14David FordN721HFR

Delete

[ WITH [ RECURSIVE ] _`with_query`_ [, ...] ]
DELETE FROM [ ONLY ] _`table_name`_ [ * ] [ [ AS ] _`alias`_ ]
    [ USING _`from_item`_ [, ...] ]
    [ WHERE _`condition`_ | WHERE CURRENT OF _`cursor_name`_ ]
    [ RETURNING [ WITH ( { OLD | NEW } AS _`output_alias`_ [, ...] ) ]
                { * | _`output_expression`_ [ [ AS ] _`output_name`_ ] } [, ...] ]

ON DELETE

  • RESTRICT
  • NO ACTION
  • SET NULL
  • SET DEFAULT

🌱 Авторы:
salt-caramel
notakeith