|
Нормализация таблиц. Лекция 15. Вспомним прошлый урок! Нормализация бд. 1НФ, 2НФ, 3НФ
Вспомним прошлый урок! Нормализация БД. 1НФ, 2НФ, 3НФ - Что такое нормализация БД?
- Первая нормальная форма
- Отношение находится в 1НФ, если все его атрибуты являются простыми, все используемые домены должны содержать только скалярные значения. Не должно быть повторений строк в таблице.
Например, есть таблица «Автомобили»: Фирма
| Модели
| BMW
| M5, X5M, M1
| Nissan
| GT-R
| Нарушение нормализации 1НФ происходит в моделях BMW, т.к. в одной ячейке содержится список из 3 элементов: M5, X5M, M1, т.е. он не является атомарным. Преобразуем таблицу к 1НФ:
Фирма
| Модели
| BMW
| M5
| BMW
| X5M
| BMW
| M1
| Nissan
| GT-R
| - Вторая нормальная форма
- Отношение находится во 2НФ, если оно находится в 1НФ и каждый не ключевой атрибут неприводимо зависит от Первичного Ключа(ПК). Неприводимость означает, что в составе потенциального ключа отсутствует меньшее подмножество атрибутов, от которого можно также вывести данную функциональную зависимость.
Например, дана таблица: Модель
| Фирма
| Цена
| Скидка
| M5
| BMW
| 5500000
| 5%
| X5M
| BMW
| 6000000
| 5%
| M1
| BMW
| 2500000
| 5%
| GT-R
| Nissan
| 5000000
| 10%
| апример, дана таблица: - Таблица находится в первой нормальной форме, но не во второй. Цена машины зависит от модели и фирмы. Скидка зависят от фирмы, то есть зависимость от первичного ключа неполная. Исправляется это путем декомпозиции на два отношения, в которых не ключевые атрибуты зависят от ПК.
Модель
| Фирма
| Цена
| M5
| BMW
| 5500000
| X5M
| BMW
| 6000000
| M1
| BMW
| 2500000
| GT-R
| Nissan
| 5000000
| Фирма
| Скидка
| BMW
| 5%
| Nissan
| 10%
| Третья нормальная форма - Третья нормальная форма
- Отношение находится в 3НФ, когда находится во 2НФ и каждый не ключевой атрибут нетранзитивно зависит от первичного ключа. Проще говоря, второе правило требует выносить все не ключевые поля, содержимое которых может относиться к нескольким записям таблицы в отдельные таблицы.
Модель
| Магазин
| Телефон
| BMW
| Риал-авто
| 87-33-98
| Audi
| Риал-авто
| 87-33-98
| Nissan
| Некст-Авто
| 94-54-12
| Рассмотрим таблицу:
Таблица находится во 2НФ, но не в 3НФ. В отношении атрибут «Модель» является первичным ключом. Личных телефонов у автомобилей нет, и телефон зависит исключительно от магазина. Таким образом, в отношении существуют следующие функциональные зависимости: Модель → Магазин, Магазин → Телефон, Модель → Телефон. Зависимость Модель → Телефон является транзитивной, следовательно, отношение не находится в 3НФ.
В результате разделения исходного отношения получаются два отношения, находящиеся в 3НФ: Магазин
| Телефон
| Риал-авто
| 87-33-98
| Некст-Авто
| 94-54-12
| Модель
| Магазин
| BMW
| Риал-авто
| Audi
| Риал-авто
| Nissan
| Некст-Авто
| - Нормализация БД. Нормальная форма Бойса-Кодда 4НФ, 5НФ
- Нормальная форма Бойса-Кодда (НФБК) (частная форма третьей нормальной формы)
- Определение 3НФ не совсем подходит для следующих отношений: 1) более потенциальных ключа; 2) два и более потенциальных ключа являютотношение имеет два или ся составными; 3) они пересекаются, т.е. имеют хотя бы один общий атрибут. Для отношений, имеющих один потенциальный ключ (первичный), НФБК является 3НФ.
- Отношение находится в НФБК, когда каждая нетривиальная и неприводимая слева функциональная зависимость обладает потенциальным ключом в качестве детерминанта. Предположим, рассматривается отношение, представляющее данные о бронировании стоянки на день:
Номер стоянки
| Время начала
| Время окончания
| Тариф
| 1
| 09:30
| 10:30
| Бережливый
| 1
| 11:00
| 12:00
| Бережливый
| 1
| 14:00
| 15:30
| Стандарт
| 2
| 10:00
| 12:00
| Премиум-В
| 2
| 12:00
| 14:00
| Премиум-В
| 2
| 15:00
| 18:00
| Премиум-А
| - Тариф имеет уникальное название и зависит от выбранной стоянки и наличии льгот, в частности: «Бережливый»: стоянка 1 для льготников «Стандарт»: стоянка 1 для не льготников
- «Премиум-А»: стоянка 2 для льготников
- «Премиум-B»: стоянка 2 для не льготников.
Тарифы Тариф
| Номер стоянки
| Имеет льготы
| Бережливый
| 1
| Да
| Стандарт
| 1
| Нет
| Премиум-А
| 2
| Да
| Премиум-В
| 2
| Нет
| Тариф
| Время начала
| Время окончания
| Бережливый
| 09:30
| 10:30
| Бережливый
| 11:00
| 12:00
| Стандарт
| 14:00
| 15:30
| Премиум-В
| 10:00
| 12:00
| Премиум-В
| 12:00
| 14:00
| Премиум-А
| 15:00
| | Бронирование - Четвертая нормальная форма
Отношение находится в 4НФ, если оно находится в НФБК и все нетривиальные многозначные зависимости фактически являются функциональными зависимостями от ее потенциальных ключей. В отношении R (A, B, C) существует многозначная зависимость R.A -> -> R.B в том и только в том случае, если множество значений B, соответствующее паре значений A и C, зависит только от A и не зависит от С. - Предположим, что рестораны производят разные виды пиццы, а службы доставки ресторанов работают только в определенных районах города. Составной первичный ключ соответствующей переменной отношения включает три атрибута: {Ресторан, Вид пиццы, Район доставки}. Такая переменная отношения не соответствует 4НФ, так как существует следующая многозначная зависимость: {Ресторан} → {Вид пиццы} {Ресторан} → {Район доставки}
- Для предотвращения аномалии нужно декомпозировать отношение, разместив независимые факты в разных отношениях. В данном примере следует выполнить декомпозицию на {Ресторан, Вид пиццы} и {Ресторан, Район доставки}. Однако, если к исходной переменной отношения добавить атрибут, функционально зависящий от потенциального ключа, например цену с учётом стоимости доставки ({Ресторан, Вид пиццы, Район доставки} → Цена), то полученное отношение будет находиться в 4НФ и его уже нельзя подвергнуть декомпозиции без потерь.
- Пятая нормальная форма
- Отношения находятся в 5НФ, если оно находится в 4НФ и отсутствуют сложные зависимые соединения между атрибутами. Если «Атрибут_1» зависит от «Атрибута_2», а «Атрибут_2» в свою очередь зависит от «Атрибута_3», а «Атрибут_3» зависит от «Атрибута_1», то все три атрибута обязательно входят в один кортеж.
Например, некоторая таблица содержит три атрибута «Поставщик», «Товар» и «Покупатель». Покупатель_1 приобретает несколько Товаров у Поставщика_1. Покупатель_1 приобрел новый Товар у Поставщика_2. Тогда в силу изложенного выше требования Поставщик_1 обязан поставлять Покупателю_1 тот же самый новый Товар, а Поставщик_2 должен поставлять Покупателю_1, кроме нового Товара, всю номенклатуру Товаров Поставщика_1. Этого на практике не бывает. Покупатель свободен в своем выборе товаров. Поэтому для устранения отмеченного затруднения все три атрибута разносят по разным отношениям (таблицам). После выделения трех новых отношений (Поставщик, Товар и Покупатель) необходимо помнить, что при извлечении информации (например, о покупателях и товарах) необходимо в запросе соединить все три отношения. Любая комбинация соединения двух отношений из трех неминуемо приведет к извлечению неверной (некорректной) информации. Некоторые СУБД снабжены специальными механизмами, устраняющими извлечение недостоверной информации. Тем не менее, следует придерживаться общей рекомендации: структуру базы данных строить таким образом, чтобы избежать применения 4НФ и 5НФ. - Например, некоторая таблица содержит три атрибута «Поставщик», «Товар» и «Покупатель». Покупатель_1 приобретает несколько Товаров у Поставщика_1. Покупатель_1 приобрел новый Товар у Поставщика_2. Тогда в силу изложенного выше требования Поставщик_1 обязан поставлять Покупателю_1 тот же самый новый Товар, а Поставщик_2 должен поставлять Покупателю_1, кроме нового Товара, всю номенклатуру Товаров Поставщика_1. Этого на практике не бывает. Покупатель свободен в своем выборе товаров. Поэтому для устранения отмеченного затруднения все три атрибута разносят по разным отношениям (таблицам). После выделения трех новых отношений (Поставщик, Товар и Покупатель) необходимо помнить, что при извлечении информации (например, о покупателях и товарах) необходимо в запросе соединить все три отношения. Любая комбинация соединения двух отношений из трех неминуемо приведет к извлечению неверной (некорректной) информации. Некоторые СУБД снабжены специальными механизмами, устраняющими извлечение недостоверной информации. Тем не менее, следует придерживаться общей рекомендации: структуру базы данных строить таким образом, чтобы избежать применения 4НФ и 5НФ.
- Пятая нормальная форма ориентирована на работу с зависимыми соединениями. Указанные зависимые соединения между тремя атрибутами встречаются очень редко. Зависимые соединения между четырьмя, пятью и более атрибутами указать практически невозможно.
|
|
|