
- Нормализация - процесс организации данных в базе данных для достижения двух основных целей: устранение избыточности данных, обеспечение целостности данных
- Три нормальных формы:
Избыточность
- Аномалия добавления
- Невозможно добавить данные об одном объекте, не добавив данные о другом
- К примеру, если нужно добавить студента, который ходит на математику, а сведений о математике ранее не было, значит придётся добавлять и её
- Аномалия удаления
- При удалении одних данных мы невольно теряем другие.
- Если только один студент посещал математику, то удаляя студента с математикоймы потеряем и всю инфу о математике
- Аномалия обновления
- Чтобы изменить какое-то значение, нам приходится обновлять его в нескольких местах
- Если мы хоти обновить имя студента, а он несколько раз добавлен в бд, то нужно фиксить каждое имя
Функциональная зависимость
- Функциональная зависимость $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_no | property_address | inspection_date | inspection_time | comments | staff_no | staff_name | car_registration |
|---|
| PG4 | 6 Lawrence St… | 18-Oct-00 | 10.00 | Need to replace | SG37 | Ann Beech | M231JGR |
| PG4 | 6 Lawrence St… | 22-Apr-1 | 09.00 | In good order | SG14 | David Ford | M533HDR |
| PG4 | 6 Lawrence St… | 1-Ocr-01 | 12.00 | Damp rot in bathroom | SG14 | David Ford | N721HFR |
1 НФ
- Устранены повторяющиеся группы. Первичный ключ: property_no, inspection_date)
- Атрибут property_address частично зависит только от property_no, что нарушает “2НФ”
| property_no | inspection_date | inspection_time | property_address | comments | staff_no | staff_name | car_registration |
|---|
| PG4 | 18-Oct-00 | 10.00 | 6 Lawrence St… | Need to replace | SG37 | Ann Beech | M231JGR |
| PG4 | 22-Apr-1 | 09.00 | 6 Lawrence St… | In good order | SG14 | David Ford | M533HDR |
| PG4 | 1-Ocr-01 | 12.00 | 6 Lawrence St… | Damp rot in bathroom | SG14 | David Ford | N721HFR |
2 НФ
- Устранена частичная зависимость. Неключевые атрибуты зависят от всего первичного ключа.
- Атрибут staff_name транзитивно зависит от первичного ключа через staff_no, что нарушает 3НФ
| property_no | inspection_date | inspection_time | comments | staff_no | staff_name | car_registration |
|---|
| PG4 | 18-Oct-00 | 10.00 | Need to replace | SG37 | Ann Beech | M231JGR |
| PG4 | 22-Apr-1 | 09.00 | In good order | SG14 | David Ford | M533HDR |
| PG4 | 1-Ocr-01 | 12.00 | Damp rot in bathroom | SG14 | David Ford | N721HFR |
| property_no | property_address |
|---|
| PG4 | 6 Lawrence St… |
| PG16 | 5 Novar Dr… |
3 НФ
- Устранены транзитивные зависимости. Схема находится в 3НФ
- Зависимость (staff_no, inspection_date) → car_registration нарушает НФБК, так как детирминант не является потенциальным ключом
| property_no | inspection_date | inspection_time | comments | staff_no | car_registration |
|---|
| PG4 | 18-Oct-00 | 10.00 | Need to replace | SG37 | M231JGR |
| PG4 | 22-Apr-1 | 09.00 | In good order | SG14 | M533HDR |
| PG4 | 1-Ocr-01 | 12.00 | Damp rot in bathroom | SG14 | N721HFR |
| staff_no | staff_name |
|---|
| SG37 | Ann Beech |
| SG14 | David Ford |
| SG14 | David Ford |
НФБК
| property_no | inspection_date | inspection_time | comments | staff_no |
|---|
| PG4 | 18-Oct-00 | 10.00 | Need to replace | SG37 |
| PG4 | 22-Apr-1 | 09.00 | In good order | SG14 |
| PG4 | 1-Ocr-01 | 12.00 | Damp rot in bathroom | SG14 |
| staff_no | staff_name | car_registration |
|---|
| SG37 | Ann Beech | M231JGR |
| SG14 | David Ford | M533HDR |
| SG14 | David Ford | N721HFR |
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