Нормальная форма: различия между версиями
[непроверенная версия] | [отпатрулированная версия] |
Пушёк (обсуждение | вклад) Нет описания правки |
|||
(не показано 48 промежуточных версий 30 участников) | |||
Строка 3: | Строка 3: | ||
'''Нормальная форма''' — свойство [[отношение (реляционная модель)|отношения]] в [[реляционная модель данных|реляционной модели данных]], характеризующее его с точки зрения избыточности, потенциально приводящей к логически ошибочным результатам выборки или изменения данных. Нормальная форма определяется как совокупность требований, которым должно удовлетворять отношение. |
'''Нормальная форма''' — свойство [[отношение (реляционная модель)|отношения]] в [[реляционная модель данных|реляционной модели данных]], характеризующее его с точки зрения избыточности, потенциально приводящей к логически ошибочным результатам выборки или изменения данных. Нормальная форма определяется как совокупность требований, которым должно удовлетворять отношение. |
||
Процесс преобразования отношений [[база данных|базы данных]] к виду, отвечающему нормальным формам, называется '''нормализацией'''. Нормализация предназначена для приведения структуры БД к виду, обеспечивающему минимальную логическую избыточность, и не имеет целью уменьшение или увеличение производительности работы или же уменьшение или увеличение физического объёма базы данных |
Процесс преобразования отношений [[база данных|базы данных]] к виду, отвечающему нормальным формам, называется '''нормализацией'''. Нормализация предназначена для приведения структуры БД к виду, обеспечивающему минимальную логическую избыточность, и не имеет целью уменьшение или увеличение производительности работы или же уменьшение или увеличение физического объёма базы данных<ref>В одних случаяx нормализация увеличивает производительность, в других — уменьшает; объём же базы данных при нормализации как правило уменьшается.</ref>. Конечной целью нормализации является уменьшение потенциальной противоречивости хранимой в базе данных информации. Как отмечает [[Дейт, Кристофер|К. Дейт]]<ref name=Date />, общее назначение процесса нормализации заключается в следующем: |
||
* исключение некоторых типов избыточности; |
* исключение некоторых типов избыточности; |
||
* устранение некоторых аномалий обновления; |
* устранение некоторых аномалий обновления; |
||
Строка 12: | Строка 12: | ||
== Роль нормализации в проектировании реляционных баз данных == |
== Роль нормализации в проектировании реляционных баз данных == |
||
⚫ | При том, что идеи нормализации весьма полезны для проектирования баз данных, они отнюдь не являются универсальным или исчерпывающим средством повышения качества проекта БД. Это связано с тем, что существует слишком большое разнообразие возможных ошибок и недостатков в структуре БД, которые нормализацией не устраняются. Несмотря на эти рассуждения, теория нормализации является очень ценным достижением реляционной теории и практики, поскольку она даёт ''научно строгие'' и ''обоснованные'' критерии качества проекта БД и ''формальные методы'' для усовершенствования этого качества. Этим теория нормализации резко выделяется на фоне чисто [[эмпиризм|эмпирических]] подходов к проектированию<ref>В виде различных советов, наблюдений и рекомендаций.</ref>, которые предлагаются в других [[модель данных|моделях данных]]. Более того, можно утверждать, что во всей сфере [[информационные технологии|информационных технологий]] практически отсутствуют методы оценки и улучшения проектных решений, сопоставимые с теорией нормализации реляционных баз данных по уровню формальной строгости. |
||
⚫ | Нормализацию иногда упрекают на том основании, что «это просто здравый смысл», а любой компетентный профессионал и сам «естественным образом» спроектирует полностью нормализованную БД без необходимости применять теорию зависимостей<ref name=Date_Writings />. Однако, как указывает [[Дейт, Кристофер|Кристофер Дейт]], нормализация в точности и является теми принципами здравого смысла, которыми руководствуется в своём сознании зрелый проектировщик, то есть принципы нормализации — это ''формализованный здравый смысл''. Между тем, идентифицировать и формализовать принципы здравого смысла — весьма трудная задача, и успех в её решении является существенным достижением<ref name=Date_Writings />. |
||
⚫ | При том, что идеи нормализации весьма полезны для проектирования баз данных, они отнюдь не являются универсальным или исчерпывающим средством повышения качества проекта БД. Это связано с тем, что существует слишком большое разнообразие возможных ошибок и недостатков в структуре БД, которые нормализацией не устраняются. Несмотря на эти рассуждения, теория нормализации является очень ценным достижением реляционной теории и практики, поскольку она даёт ''научно строгие'' и ''обоснованные'' критерии качества проекта БД и ''формальные методы'' для усовершенствования этого качества. Этим теория нормализации резко выделяется на фоне чисто [[эмпиризм|эмпирических]] подходов к проектированию |
||
⚫ | Нормализацию иногда упрекают на том основании, что «это просто здравый смысл», а любой компетентный профессионал и сам «естественным образом» спроектирует полностью нормализованную БД без необходимости применять теорию зависимостей |
||
== Нормальные формы == |
== Нормальные формы == |
||
В создании и развитии теории нормализации принимали участие многие учёные. Однако первые три нормальные формы и концепцию функциональной зависимости предложил [[Кодд, Эдгар|Э. Кодд]] |
В создании и развитии теории нормализации принимали участие многие учёные. Однако первые три нормальные формы и концепцию функциональной зависимости предложил [[Кодд, Эдгар|Э. Кодд]]<ref name="Date_Writings" />. |
||
=== Первая нормальная форма (1NF) === |
=== Первая нормальная форма (1NF) === |
||
{{main|Первая нормальная форма}} |
{{main|Первая нормальная форма}} |
||
Строка 29: | Строка 27: | ||
=== Вторая нормальная форма (2NF) === |
=== Вторая нормальная форма (2NF) === |
||
{{main|Вторая нормальная форма}} |
{{main|Вторая нормальная форма}} |
||
Переменная отношения находится во второй нормальной форме тогда и только тогда, когда она находится в [[Первая нормальная форма|первой нормальной форме]] и каждый неключевой атрибут неприводимо (функционально полно) зависит от |
Переменная отношения находится во второй нормальной форме тогда и только тогда, когда она находится в [[Первая нормальная форма|первой нормальной форме]] и каждый неключевой атрибут неприводимо (функционально полно) зависит от её потенциального ключа. Функционально полная зависимость означает, что если потенциальный ключ является составным, то атрибут зависит от всего ключа и не зависит от его частей. |
||
=== Третья нормальная форма (3NF) === |
=== Третья нормальная форма (3NF) === |
||
{{main|Третья нормальная форма}} |
{{main|Третья нормальная форма}} |
||
Строка 41: | Строка 37: | ||
=== Нормальная форма Бойса — Кодда (BCNF) === |
=== Нормальная форма Бойса — Кодда (BCNF) === |
||
{{main|Нормальная форма Бойса — Кодда}} |
{{main|Нормальная форма Бойса — Кодда}} |
||
Переменная отношения находится в нормальной форме Бойса |
Переменная отношения находится в нормальной форме Бойса — Кодда (иначе — в усиленной третьей нормальной форме) тогда и только тогда, когда каждая её нетривиальная и неприводимая слева функциональная зависимость имеет в качестве своего детерминанта некоторый [[потенциальный ключ]]. |
||
=== Четвёртая нормальная форма (4NF) === |
=== Четвёртая нормальная форма (4NF) === |
||
{{main|Четвёртая нормальная форма}} |
{{main|Четвёртая нормальная форма}} |
||
Переменная отношения находится в четвёртой нормальной форме, если она находится в нормальной форме Бойса |
Переменная отношения находится в четвёртой нормальной форме, если она находится в нормальной форме Бойса — Кодда и не содержит нетривиальных [[Многозначная зависимость|многозначных зависимостей]]. |
||
=== Пятая нормальная форма (5NF) === |
=== Пятая нормальная форма (5NF) === |
||
Строка 57: | Строка 51: | ||
=== Доменно-ключевая нормальная форма (DKNF) === |
=== Доменно-ключевая нормальная форма (DKNF) === |
||
{{main|Доменно-ключевая нормальная форма}} |
{{main|Доменно-ключевая нормальная форма}} |
||
Переменная отношения находится в ДКНФ тогда и только тогда, когда каждое наложенное на неё ограничение является логическим следствием ограничений доменов и ограничений ключей, наложенных на данную переменную отношения. |
Переменная отношения находится в ДКНФ тогда и только тогда, когда каждое наложенное на неё ограничение является логическим следствием ограничений доменов и ограничений ключей, наложенных на данную переменную отношения. |
||
=== Шестая нормальная форма (6NF) === |
=== Шестая нормальная форма (6NF) === |
||
{{main|Шестая нормальная форма}} |
{{main|Шестая нормальная форма}} |
||
⚫ | |||
Переменная отношения находится в шестой нормальной форме тогда и только тогда, когда она удовлетворяет всем нетривиальным зависимостям соединения. Из определения следует, что переменная находится в 6НФ тогда и только тогда, когда она неприводима, то есть не может быть подвергнута дальнейшей декомпозиции без потерь. Каждая переменная отношения, которая находится в 6НФ, также находится и в 5НФ. |
Переменная отношения находится в шестой нормальной форме тогда и только тогда, когда она удовлетворяет всем нетривиальным зависимостям соединения. Из определения следует, что переменная находится в 6НФ тогда и только тогда, когда она неприводима, то есть не может быть подвергнута дальнейшей декомпозиции без потерь. Каждая переменная отношения, которая находится в 6НФ, также находится и в 5НФ. |
||
⚫ | |||
⚫ | |||
⚫ | |||
== Примечания == |
== Примечания == |
||
Строка 98: | Строка 93: | ||
</ref> |
</ref> |
||
}} |
}} |
||
⚫ | |||
* [[База данных]] |
|||
* [[Модель данных]] |
|||
* [[Проектирование баз данных]] |
|||
* [[Функциональная зависимость (программирование)|Функциональная зависимость]] |
|||
⚫ | |||
== Ссылки == |
== Ссылки == |
||
* [http://citforum.ru/database/osbd/glava_23.shtml Описание нормальных форм баз данных на citforum.ru] |
* [http://citforum.ru/database/osbd/glava_23.shtml Описание нормальных форм баз данных на citforum.ru] |
||
* [http://dbdebunk.com/page/page/621935.htm Описание 6NF (DK/NF)] |
* [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=177 Доходчивое описание 1, 2 и 3 форм нормализации.] |
||
* [http://club.shelek.ru/viewart.php?id=311 Проектирование нормализованных баз данных.] |
* [http://club.shelek.ru/viewart.php?id=311 Проектирование нормализованных баз данных.] |
||
Строка 117: | Строка 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], как обобщение пятой нормальной формы для хронологической базы данных.
См. также
[править | править код]Примечания
[править | править код]- ↑ В одних случаяx нормализация увеличивает производительность, в других — уменьшает; объём же базы данных при нормализации как правило уменьшается.
- ↑ 1 2 Дейт К. Дж. Введение в системы баз данных = Introduction to Database Systems. — 8-е изд. — М.: Вильямс, 2005. — 1328 с. — ISBN 5-8459-0788-8 (рус.) 0-321-19784-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 (англ.).