Нормальная форма
Нормальная форма — свойство отношения в реляционной модели данных, характеризующее его с точки зрения избыточности, потенциально приводящей к логически ошибочным результатам выборки или изменения данных. Нормальная форма определяется как совокупность требований, которым должно удовлетворять отношение.
Процесс преобразования отношений базы данных к виду, отвечающему нормальным формам, называется нормализацией. Нормализация предназначена для приведения структуры БД к виду, обеспечивающему минимальную логическую избыточность, и не имеет целью уменьшение или увеличение производительности работы или же уменьшение или увеличение физического объёма базы данных.Шаблон:-1 Конечной целью нормализации является уменьшение потенциальной противоречивости хранимой в базе данных информации. Как отмечает К. Дейт,Шаблон:-1 общее назначение процесса нормализации заключается в следующем:
- исключение некоторых типов избыточности;
- устранение некоторых аномалий обновления;
- разработка проекта базы данных, который является достаточно «качественным» представлением реального мира, интуитивно понятен и может служить хорошей основой для последующего расширения;
- упрощение процедуры применения необходимых ограничений целостности.
Устранение избыточности производится, как правило, за счёт декомпозиции отношений таким образом, чтобы в каждом отношении хранились только первичные факты (то есть факты, не выводимые из других хранимых фактов).
Роль нормализации в проектировании реляционных баз данных
При том, что идеи нормализации весьма полезны для проектирования баз данных, они отнюдь не являются универсальным или исчерпывающим средством повышения качества проекта БД. Это связано с тем, что существует слишком большое разнообразие возможных ошибок и недостатков в структуре БД, которые нормализацией не устраняются. Несмотря на эти рассуждения, теория нормализации является очень ценным достижением реляционной теории и практики, поскольку она даёт научно строгие и обоснованные критерии качества проекта БД и формальные методы для усовершенствования этого качества. Этим теория нормализации резко выделяется на фоне чисто эмпирических подходов к проектированию,Шаблон:-1 которые предлагаются в других моделях данных. Более того, можно утверждать, что во всей сфере информационных технологий практически отсутствуют методы оценки и улучшения проектных решений, сопоставимые с теорией нормализации реляционных баз данных по уровню формальной строгости.
Нормализацию иногда упрекают на том основании, что «это просто здравый смысл», а любой компетентный профессионал и сам «естественным образом» спроектирует полностью нормализованную БД без необходимости применять теорию зависимостей.Шаблон:-1 Однако, как указывает К. Дейт, нормализация в точности и является теми принципами здравого смысла, которыми руководствуется в своём сознании зрелый проектировщик, то есть принципы нормализации — это формализованный здравый смысл. Между тем, идентифицировать и формализовать принципы здравого смысла — весьма трудная задача, и успех в её решении является существенным достижением.Шаблон:-1
Нормальные формы
В создании и развитии теории нормализации принимали участие многие учёные. Однако первые три нормальные формы и концепцию функциональной зависимости предложил Э. Кодд.Шаблон:-1
Рассмотрим нормализацию на примере следующей таблицы:
CustID | CustName | TrID | Date | ArtID | ArtGroup | Amount |
---|---|---|---|---|---|---|
1 | Джонс | 12 | 14-Jan-2016 | ScaSC02 | Пылесос | −87 |
1 | Джонс | 14 | 15-Jan-2016 | AEG35 | Холодильник | −50 |
2 | Уилкинс | 3 | 14-Jan-2016 | ScaSC02, Lg08 | Пылесос, Холодильник | −21 |
3 | Стевенс | 21 | 20-Feb-2016 | AEG35 | Холодильник | −18 |
3 | Стевенс | 21 | 20-Feb-2016 | ScaSC02 | Пылесос | −70 |
3 | Стевенс | 21 | 20-Feb-2016 | Lg08 | Холодильник | −60 |
Первая нормальная форма (1NF)
Переменная отношения находится в первой нормальной форме (1НФ) тогда и только тогда, когда в любом допустимом значении отношения каждый его кортеж содержит только одно значение для каждого из атрибутов. В нашем примере неправильно записана сделка с Уилкинсом. Исправим ее запись:
CustID | CustName | TrID | Date | ArtID | ArtGroup | Amount |
---|---|---|---|---|---|---|
1 | Джонс | 12 | 14-Jan-2016 | ScaSC02 | Пылесос | −87 |
1 | Джонс | 14 | 20-Feb-2016 | AEG35 | Холодильник | −50 |
2 | Уилкинс | 3 | 14-Jan-2016 | ScaSC02 | Пылесос | −11 |
2 | Уилкинс | 3 | 14-Jan-2016 | Lg08 | Холодильник | −10 |
3 | Стевенс | 21 | 20-Feb-2016 | AEG35 | Холодильник | −18 |
3 | Стевенс | 21 | 20-Feb-2016 | ScaSC02 | Пылесос | −70 |
3 | Стевенс | 21 | 20-Feb-2016 | Lg08 | Холодильник | −60 |
В реляционной модели отношение всегда находится в первой нормальной форме по определению понятия отношение. Что же касается различных таблиц, то они могут не быть правильными представлениями отношений и, соответственно, могут не находиться в 1НФ.
Вторая нормальная форма (2NF)
Переменная отношения находится во второй нормальной форме тогда и только тогда, когда она находится в первой нормальной форме и каждый неключевой атрибут неприводимо (функционально полно) зависит от её потенциального ключа. В нашем случае ключем может быть сочетание CustID (код покупателя) и TrID (код сделки). Имя покупателя зависит не от всего ключа, а только от его части, поэтому для приведения нашей реляционной модели во вторую нормальную форму мы должны разделить ее на две таблицы:
CustID | CustName |
---|---|
1 | Джонс |
2 | Уилкинс |
3 | Стевенс |
CustID | TrID | Date | ArtID | ArtGroup | Amount |
---|---|---|---|---|---|
1 | 12 | 14-Jan-2016 | ScaSC02 | Пылесос | −87 |
1 | 14 | 20-Feb-2016 | AEG35 | Холодильник | −50 |
2 | 3 | 14-Jan-2016 | ScaSC02 | Пылесос | −21 |
2 | 3 | 14-Jan-2016 | Lg08 | Холодильник | −21 |
3 | 21 | 20-Feb-2016 | AEG35 | Холодильник | −18 |
3 | 21 | 20-Feb-2016 | ScaSC02 | Пылесос | −70 |
3 | 21 | 20-Feb-2016 | Lg08 | Холодильник | −60 |
Третья нормальная форма (3NF)
Переменная отношения находится в третьей нормальной форме тогда и только тогда, когда она находится во второй нормальной форме, и отсутствуют транзитивные функциональные зависимости неключевых атрибутов от ключевых:
ArtID | ArtGroup |
---|---|
ScaSC02 | Пылесос |
AEG35 | Холодильник |
Lg08 | Холодильник |
CustID | TrID | Date |
---|---|---|
1 | 12 | 14-Jan-2016 |
1 | 14 | 20-Feb-2016 |
2 | 3 | 14-Jan-2016 |
3 | 21 | 20-Feb-2016 |
CustID | TrID | ArtID | Amount |
---|---|---|---|
1 | 12 | ScaSC02 | −87 |
1 | 14 | AEG35 | −50 |
2 | 3 | ScaSC02 | −21 |
2 | 3 | Lg08 | −21 |
3 | 21 | AEG35 | −18 |
3 | 21 | ScaSC02 | −70 |
3 | 21 | Lg08 | −60 |
Нормальная форма Бойса — Кодда (BCNF)
Переменная отношения находится в нормальной форме Бойса — Кодда (иначе — в усиленной третьей нормальной форме) тогда и только тогда, когда каждая её нетривиальная и неприводимая слева функциональная зависимость имеет в качестве своего детерминанта некоторый потенциальный ключ.
Четвёртая нормальная форма (4NF)
Переменная отношения находится в четвёртой нормальной форме, если она находится в нормальной форме Бойса — Кодда и не содержит нетривиальных многозначных зависимостей.
Пятая нормальная форма (5NF)
Переменная отношения находится в пятой нормальной форме (иначе — в проекционно-соединительной нормальной форме) тогда и только тогда, когда каждая нетривиальная зависимость соединения в ней определяется потенциальным ключом (ключами) этого отношения.
Доменно-ключевая нормальная форма (DKNF)
Переменная отношения находится в ДКНФ тогда и только тогда, когда каждое наложенное на неё ограничение является логическим следствием ограничений доменов и ограничений ключей, наложенных на данную переменную отношения.
Шестая нормальная форма (6NF)
Переменная отношения находится в шестой нормальной форме тогда и только тогда, когда она удовлетворяет всем нетривиальным зависимостям соединения. Из определения следует, что переменная находится в 6НФ тогда и только тогда, когда она неприводима, то есть не может быть подвергнута дальнейшей декомпозиции без потерь. Каждая переменная отношения, которая находится в 6НФ, также находится и в 5НФ.
Введена К. Дейтом в его книге,Шаблон:-1 как обобщение пятой нормальной формы для хронологической базы данных.
Примечания
Ошибка в сносках?: Тег <ref>
с именем «Date», определённый в <references>
, не используется в предшествующем тексте.
<ref>
с именем «Date_Writings», определённый в <references>
, не используется в предшествующем тексте.