Нормальная форма: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
 
(не показано 9 промежуточных версий 8 участников)
Строка 2: Строка 2:


'''Нормальная форма''' — свойство [[отношение (реляционная модель)|отношения]] в [[реляционная модель данных|реляционной модели данных]], характеризующее его с точки зрения избыточности, потенциально приводящей к логически ошибочным результатам выборки или изменения данных. Нормальная форма определяется как совокупность требований, которым должно удовлетворять отношение.
'''Нормальная форма''' — свойство [[отношение (реляционная модель)|отношения]] в [[реляционная модель данных|реляционной модели данных]], характеризующее его с точки зрения избыточности, потенциально приводящей к логически ошибочным результатам выборки или изменения данных. Нормальная форма определяется как совокупность требований, которым должно удовлетворять отношение.

Процесс преобразования отношений [[база данных|базы данных]] к виду, отвечающему нормальным формам, называется '''нормализацией'''. Нормализация предназначена для приведения структуры БД к виду, обеспечивающему минимальную логическую избыточность, и не имеет целью уменьшение или увеличение производительности работы или же уменьшение или увеличение физического объёма базы данных<ref>В одних случаяx нормализация увеличивает производительность, в других — уменьшает; объём же базы данных при нормализации как правило уменьшается.</ref>. Конечной целью нормализации является уменьшение потенциальной противоречивости хранимой в базе данных информации. Как отмечает [[Дейт, Кристофер|К. Дейт]]<ref name=Date />, общее назначение процесса нормализации заключается в следующем:
* исключение некоторых типов избыточности;
* устранение некоторых аномалий обновления;
* разработка проекта базы данных, который является достаточно «качественным» представлением реального мира, интуитивно понятен и может служить хорошей основой для последующего расширения;
* упрощение процедуры применения необходимых ограничений целостности.

Устранение избыточности производится, как правило, за счёт [[Пятая нормальная форма#Декомпозиция без потерь|декомпозиции]] отношений таким образом, чтобы в каждом отношении хранились только первичные факты (то есть факты, не выводимые из других хранимых фактов).

== Роль нормализации в проектировании реляционных баз данных ==
При том, что идеи нормализации весьма полезны для проектирования баз данных, они отнюдь не являются универсальным или исчерпывающим средством повышения качества проекта БД. Это связано с тем, что существует слишком большое разнообразие возможных ошибок и недостатков в структуре БД, которые нормализацией не устраняются. Несмотря на эти рассуждения, теория нормализации является очень ценным достижением реляционной теории и практики, поскольку она даёт ''научно строгие'' и ''обоснованные'' критерии качества проекта БД и ''формальные методы'' для усовершенствования этого качества. Этим теория нормализации резко выделяется на фоне чисто [[эмпиризм|эмпирических]] подходов к проектированию<ref>В виде различных советов, наблюдений и рекомендаций.</ref>, которые предлагаются в других [[модель данных|моделях данных]]. Более того, можно утверждать, что во всей сфере [[информационные технологии|информационных технологий]] практически отсутствуют методы оценки и улучшения проектных решений, сопоставимые с теорией нормализации реляционных баз данных по уровню формальной строгости.

Нормализацию иногда упрекают на том основании, что «это просто здравый смысл», а любой компетентный профессионал и сам «естественным образом» спроектирует полностью нормализованную БД без необходимости применять теорию зависимостей<ref name=Date_Writings />. Однако, как указывает [[Дейт, Кристофер|Кристофер Дейт]], нормализация в точности и является теми принципами здравого смысла, которыми руководствуется в своём сознании зрелый проектировщик, то есть принципы нормализации — это ''формализованный здравый смысл''. Между тем, идентифицировать и формализовать принципы здравого смысла — весьма трудная задача, и успех в её решении является существенным достижением<ref name=Date_Writings />.

== Нормальные формы ==
В создании и развитии теории нормализации принимали участие многие учёные. Однако первые три нормальные формы и концепцию функциональной зависимости предложил [[Кодд, Эдгар|Э. Кодд]]<ref name="Date_Writings" />.

=== Первая нормальная форма (1NF) ===
{{main|Первая нормальная форма}}

Переменная отношения находится в первой нормальной форме (1НФ) [[тогда и только тогда]], когда в любом допустимом значении отношения каждый его [[Кортеж (информатика)|кортеж]] содержит только одно значение для каждого из атрибутов.

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

=== Вторая нормальная форма (2NF) ===
{{main|Вторая нормальная форма}}

Переменная отношения находится во второй нормальной форме тогда и только тогда, когда она находится в [[Первая нормальная форма|первой нормальной форме]] и каждый неключевой атрибут неприводимо (функционально полно) зависит от её потенциального ключа. Функционально полная зависимость означает, что если потенциальный ключ является составным, то атрибут зависит от всего ключа и не зависит от его частей.

=== Третья нормальная форма (3NF) ===
{{main|Третья нормальная форма}}

Переменная отношения находится в третьей нормальной форме тогда и только тогда, когда она находится во [[Вторая нормальная форма|второй нормальной форме]], и отсутствуют транзитивные функциональные зависимости неключевых атрибутов от ключевых.

=== Нормальная форма Бойса — Кодда (BCNF) ===
{{main|Нормальная форма Бойса — Кодда}}

Переменная отношения находится в нормальной форме Бойса — Кодда (иначе — в усиленной третьей нормальной форме) тогда и только тогда, когда каждая её нетривиальная и неприводимая слева функциональная зависимость имеет в качестве своего детерминанта некоторый [[потенциальный ключ]].

=== Четвёртая нормальная форма (4NF) ===
{{main|Четвёртая нормальная форма}}

Переменная отношения находится в четвёртой нормальной форме, если она находится в нормальной форме Бойса — Кодда и не содержит нетривиальных [[Многозначная зависимость|многозначных зависимостей]].

=== Пятая нормальная форма (5NF) ===
{{main|Пятая нормальная форма}}
Переменная отношения находится в пятой нормальной форме (иначе — в проекционно-соединительной нормальной форме) тогда и только тогда, когда каждая нетривиальная ''зависимость соединения'' в ней определяется потенциальным ключом (ключами) этого отношения.

=== Доменно-ключевая нормальная форма (DKNF) ===
{{main|Доменно-ключевая нормальная форма}}
Переменная отношения находится в ДКНФ тогда и только тогда, когда каждое наложенное на неё ограничение является логическим следствием ограничений доменов и ограничений ключей, наложенных на данную переменную отношения.

=== Шестая нормальная форма (6NF) ===
{{main|Шестая нормальная форма}}

Переменная отношения находится в шестой нормальной форме тогда и только тогда, когда она удовлетворяет всем нетривиальным зависимостям соединения. Из определения следует, что переменная находится в 6НФ тогда и только тогда, когда она неприводима, то есть не может быть подвергнута дальнейшей декомпозиции без потерь. Каждая переменная отношения, которая находится в 6НФ, также находится и в 5НФ.

Введена [[Дейт, Кристофер|К. Дейтом]] в его книге<ref name=Date />, как обобщение пятой нормальной формы для [[Хронологическая база данных|хронологической базы данных]].

== См. также ==
* [[Денормализация]]

== Примечания ==
{{Примечания|2|refs=
<ref name=Date>{{книга
|автор = [[Дейт, Кристофер|Дейт К. Дж.]]
|заглавие = [[Введение в системы баз данных]]
|оригинал = Introduction to Database Systems
|ссылка =
|издание = 8-е изд
|место = М.
|издательство = [[Вильямс (издательство)|Вильямс]]
|год = 2005
|страниц = 1328
|isbn = 5-8459-0788-8 (рус.) 0-321-19784-4 (англ.)
}}
</ref>
<ref name=Date_Writings>{{книга
|автор = [[Дейт, Кристофер|C. J. Date]]
|заглавие =
|оригинал = Date on Database: Writings 2000–2006
|ссылка =
|издание =
|место =
|издательство = [[Apress]]
|год = 2006
|страниц = 566
|isbn = 978-1-59059-746-0 (англ.), 1-59059-746-X (англ.)
}}
</ref>
}}

== Ссылки ==
* [http://citforum.ru/database/osbd/glava_23.shtml Описание нормальных форм баз данных на citforum.ru]
* [https://web.archive.org/web/20061026202146/http://www.dbdebunk.com/page/page/621935.htm Описание 6NF (DK/NF)]
* [http://club.shelek.ru/viewart.php?id=177 Доходчивое описание 1, 2 и 3 форм нормализации.]
* [http://club.shelek.ru/viewart.php?id=311 Проектирование нормализованных баз данных.]


{{Нормальные формы}}
{{Нормальные формы}}
Строка 8: Строка 105:
[[Категория:Реляционная модель данных]]
[[Категория:Реляционная модель данных]]
[[Категория:Теоретические основы баз данных]]
[[Категория:Теоретические основы баз данных]]
[[Категория:Реляционная алгебра]]

Текущая версия от 04:38, 29 апреля 2023

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

Процесс преобразования отношений базы данных к виду, отвечающему нормальным формам, называется нормализацией. Нормализация предназначена для приведения структуры БД к виду, обеспечивающему минимальную логическую избыточность, и не имеет целью уменьшение или увеличение производительности работы или же уменьшение или увеличение физического объёма базы данных[1]. Конечной целью нормализации является уменьшение потенциальной противоречивости хранимой в базе данных информации. Как отмечает К. Дейт[2], общее назначение процесса нормализации заключается в следующем:

  • исключение некоторых типов избыточности;
  • устранение некоторых аномалий обновления;
  • разработка проекта базы данных, который является достаточно «качественным» представлением реального мира, интуитивно понятен и может служить хорошей основой для последующего расширения;
  • упрощение процедуры применения необходимых ограничений целостности.

Устранение избыточности производится, как правило, за счёт декомпозиции отношений таким образом, чтобы в каждом отношении хранились только первичные факты (то есть факты, не выводимые из других хранимых фактов).

Роль нормализации в проектировании реляционных баз данных

[править | править код]

При том, что идеи нормализации весьма полезны для проектирования баз данных, они отнюдь не являются универсальным или исчерпывающим средством повышения качества проекта БД. Это связано с тем, что существует слишком большое разнообразие возможных ошибок и недостатков в структуре БД, которые нормализацией не устраняются. Несмотря на эти рассуждения, теория нормализации является очень ценным достижением реляционной теории и практики, поскольку она даёт научно строгие и обоснованные критерии качества проекта БД и формальные методы для усовершенствования этого качества. Этим теория нормализации резко выделяется на фоне чисто эмпирических подходов к проектированию[3], которые предлагаются в других моделях данных. Более того, можно утверждать, что во всей сфере информационных технологий практически отсутствуют методы оценки и улучшения проектных решений, сопоставимые с теорией нормализации реляционных баз данных по уровню формальной строгости.

Нормализацию иногда упрекают на том основании, что «это просто здравый смысл», а любой компетентный профессионал и сам «естественным образом» спроектирует полностью нормализованную БД без необходимости применять теорию зависимостей[4]. Однако, как указывает Кристофер Дейт, нормализация в точности и является теми принципами здравого смысла, которыми руководствуется в своём сознании зрелый проектировщик, то есть принципы нормализации — это формализованный здравый смысл. Между тем, идентифицировать и формализовать принципы здравого смысла — весьма трудная задача, и успех в её решении является существенным достижением[4].

Нормальные формы

[править | править код]

В создании и развитии теории нормализации принимали участие многие учёные. Однако первые три нормальные формы и концепцию функциональной зависимости предложил Э. Кодд[4].

Первая нормальная форма (1NF)

[править | править код]

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

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

Вторая нормальная форма (2NF)

[править | править код]

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

Третья нормальная форма (3NF)

[править | править код]

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

Нормальная форма Бойса — Кодда (BCNF)

[править | править код]

Переменная отношения находится в нормальной форме Бойса — Кодда (иначе — в усиленной третьей нормальной форме) тогда и только тогда, когда каждая её нетривиальная и неприводимая слева функциональная зависимость имеет в качестве своего детерминанта некоторый потенциальный ключ.

Четвёртая нормальная форма (4NF)

[править | править код]

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

Пятая нормальная форма (5NF)

[править | править код]

Переменная отношения находится в пятой нормальной форме (иначе — в проекционно-соединительной нормальной форме) тогда и только тогда, когда каждая нетривиальная зависимость соединения в ней определяется потенциальным ключом (ключами) этого отношения.

Доменно-ключевая нормальная форма (DKNF)

[править | править код]

Переменная отношения находится в ДКНФ тогда и только тогда, когда каждое наложенное на неё ограничение является логическим следствием ограничений доменов и ограничений ключей, наложенных на данную переменную отношения.

Шестая нормальная форма (6NF)

[править | править код]

Переменная отношения находится в шестой нормальной форме тогда и только тогда, когда она удовлетворяет всем нетривиальным зависимостям соединения. Из определения следует, что переменная находится в 6НФ тогда и только тогда, когда она неприводима, то есть не может быть подвергнута дальнейшей декомпозиции без потерь. Каждая переменная отношения, которая находится в 6НФ, также находится и в 5НФ.

Введена К. Дейтом в его книге[2], как обобщение пятой нормальной формы для хронологической базы данных.

Примечания

[править | править код]
  1. В одних случаяx нормализация увеличивает производительность, в других — уменьшает; объём же базы данных при нормализации как правило уменьшается.
  2. 1 2 Дейт К. Дж. Введение в системы баз данных = Introduction to Database Systems. — 8-е изд. — М.: Вильямс, 2005. — 1328 с. — ISBN 5-8459-0788-8 (рус.) 0-321-19784-4 (англ.).
  3. В виде различных советов, наблюдений и рекомендаций.
  4. 1 2 3 C. J. Date. = Date on Database: Writings 2000–2006. — Apress, 2006. — 566 с. — ISBN 978-1-59059-746-0 (англ.), 1-59059-746-X (англ.).