Третья нормальная форма
Третья нормальная форма ( 3NF ) — это подход к проектированию схемы базы данных для реляционных баз данных , который использует принципы нормализации для уменьшения дублирования данных, предотвращения аномалий данных , обеспечения ссылочной целостности и упрощения управления данными . Он был определен в 1971 году Эдгаром Ф. Коддом , английским ученым-компьютерщиком, который изобрел реляционную модель управления базами данных .
( Говорят, что отношение базы данных например, таблица базы данных ) соответствует стандартам третьей нормальной формы, если все атрибуты (например, столбцы базы данных ) функционально зависят исключительно от ключа , за исключением случая функциональной зависимости, правая часть которого является простым атрибутом (т.е. атрибут, который строго включен в некоторый ключ). Кодд определил это как отношение во второй нормальной форме , где все непростые атрибуты зависят только от ключей-кандидатов и не имеют транзитивной зависимости от другого ключа. [1]
Гипотетическим примером несоответствия третьей нормальной форме может служить больничная база данных, содержащая таблицу пациентов, включающую столбец с номером телефона их врача. (Номер телефона зависит от врача, а не от пациента, поэтому его лучше хранить в таблице врачей.) Отрицательным результатом такой конструкции является то, что номер врача будет дублироваться в базе данных, если у него несколько пациентов. , тем самым увеличивая как вероятность ошибки ввода, так и стоимость и риск обновления этого числа в случае его изменения (по сравнению с третьей моделью данных, соответствующей нормальной форме, которая сохраняет номер врача в таблице врачей только один раз).
Позже Кодд понял, что 3NF не устранил все нежелательные аномалии данных, и в 1974 году разработал более надежную версию для решения этой проблемы, известную как нормальная форма Бойса-Кодда .
Определение третьей нормальной формы
[ редактировать ]Третья нормальная форма (3NF) — это нормальная форма, используемая при нормализации базы данных . Первоначально 3NF был определен Э. Ф. Коддом в 1971 году. [2]
Определение Кодда гласит, что таблица находится в 3НФ тогда и только тогда, когда выполняются оба следующих условия:
- Отношение R (таблица) находится во второй нормальной форме (2НФ).
- Ни один неосновной атрибут R не является транзитивно зависимым от первичного ключа.
Непростой атрибут R — это атрибут, который не принадлежит ни одному потенциальному ключу R. [3] Транзитивная зависимость — это функциональная зависимость , в которой X → Z ( X определяет Z ) косвенно, в силу X → Y и Y → Z не так (где Y → X ). [4]
Определение 3НФ, эквивалентное определению Кодда, но выраженное по-другому, было дано Карло Заниоло в 1982 году. Это определение гласит, что таблица находится в 3НФ тогда и только тогда, когда для каждой из ее функциональных зависимостей X → Y имеется хотя бы одно из следующих значений: условия выполняются: [5] [6] [ нужна цитата для проверки ]
- X содержит Y (то есть Y — подмножество X , что означает, что X → Y — тривиальная функциональная зависимость),
- X — суперключ ,
- каждый элемент Y \ X , установленная разница между Y и X, является простым атрибутом (т. е. каждый атрибут в Y \ X содержится в некотором потенциальном ключе ).
Если перефразировать определение Заниоло более просто, отношение находится в 3НФ тогда и только тогда, когда для каждой нетривиальной функциональной зависимости X → Y X является суперключом или Y \ X состоит из простых атрибутов. Определение Заниоло дает четкое представление о разнице между 3NF и более строгой нормальной формой Бойса-Кодда (BCNF). BCNF просто исключает третью альтернативу («Каждый элемент Y \ X , установленная разница между Y и X , является простым атрибутом»).
«Ничего, кроме ключа»
[ редактировать ]Примерное определение 3NF Кодда, аналогичное традиционной клятве давать правдивые показания в суде, было дано Биллом Кентом: «[каждый] неключевой [атрибут] должен предоставлять факт о ключе, целом ключе, и ничего, кроме ключа». [7] Распространенный вариант дополняет это определение клятвой «так помоги мне, Кодд ». [8]
Требование наличия «ключа» гарантирует, что таблица находится в 1NF ; требование, чтобы неключевые атрибуты зависели от «всего ключа», обеспечивает 2NF ; дальнейшее требование, чтобы неключевые атрибуты зависели «ни от чего, кроме ключа», обеспечивает 3NF. Хотя эта фраза является полезной мнемоникой, тот факт, что в ней упоминается только один ключ, означает, что она определяет некоторые необходимые, но недостаточные условия для удовлетворения 2-й и 3-й нормальных форм. И 2NF, и 3NF в равной степени относятся ко всем потенциальным ключам таблицы, а не только к какому-то одному ключу.
Крис Дэйт называет резюме Кента «интуитивно привлекательной характеристикой» 3NF и отмечает, что при небольшой адаптации оно может служить определением несколько более сильной нормальной формы Бойса-Кодда : «Каждый атрибут должен представлять факт о ключе, целом ключ и ничего, кроме ключа». [9] Версия определения 3NF слабее, чем вариант BCNF Дейта, поскольку первая касается только обеспечения того, чтобы неключевые атрибуты зависели от ключей. Основные атрибуты (которые являются ключами или частями ключей) вообще не должны быть функционально зависимыми; Каждый из них представляет факт о ключе в смысле предоставления части или всего самого ключа. (Это правило применяется только к функционально зависимым атрибутам, поскольку его применение ко всем атрибутам неявно запретило бы составные ключи-кандидаты, поскольку каждая часть любого такого ключа нарушала бы пункт «весь ключ».)
Пример таблицы, которая не соответствует требованиям 3NF:
Турнир | Год | Победитель | Дата рождения победителя |
---|---|---|---|
Индиана Приглашение | 1998 | Эл Фредриксон | 21 июля 1975 г. |
Кливленд Опен | 1999 | Боб Альбертсон | 28 сентября 1968 г. |
Де-Мойн Мастерс | 1999 | Эл Фредриксон | 21 июля 1975 г. |
Индиана Приглашение | 1999 | Чип Мастерсон | 14 марта 1977 г. |
Поскольку каждая строка в таблице должна сообщать нам, кто выиграл конкретный турнир в определенном году, составной ключ {Tournament, Year} представляет собой минимальный набор атрибутов, гарантирующих уникальную идентификацию строки. То есть {Tournament, Year} — это потенциальный ключ для таблицы.
Нарушение 3NF происходит потому, что неосновной атрибут (дата рождения Победителя) транзитивно зависит от ключа-кандидата {Турнир, Год} через неосновной атрибут Победитель. Тот факт, что дата рождения Winner функционально зависит от Winner, делает таблицу уязвимой для логических несоответствий, поскольку ничто не мешает одному и тому же человеку отображаться с разными датами рождения в разных записях.
Чтобы выразить одни и те же факты, не нарушая 3НФ, необходимо разбить таблицу на две:
|
|
В этих таблицах не могут возникнуть аномалии обновления, поскольку, в отличие от предыдущего, Winner теперь является потенциальным ключом во второй таблице, что позволяет использовать только одно значение для даты рождения для каждого Winner.
Вычисление
[ редактировать ]Отношение всегда можно разложить в третью нормальную форму, то есть отношение R переписывается в проекции R 1 , ..., R n, которых соединение равно исходному отношению. Кроме того, это разложение не теряет никакой функциональной зависимости в том смысле, что каждая функциональная зависимость от R может быть выведена из функциональных зависимостей, которые имеют место на проекциях R 1 , ..., R n . Более того, такое разложение можно вычислить за полиномиальное время . [10]
Чтобы разложить отношение на 3НФ из 2НФ, разбейте таблицу на функциональные зависимости канонического покрытия, затем создайте отношение для каждого потенциального ключа исходного отношения, который еще не был подмножеством отношения при декомпозиции. [11]
Эквивалентность определений 3NF Кодда и Заниоло
[ редактировать ]Можно показать, что определение 3NF, предложенное Карло Заниоло в 1982 году и данное выше, эквивалентно определению Кодда следующим образом: пусть X → A — нетривиальная FD (т. е. такая, где X не содержит A) и пусть A быть непростым атрибутом. Также пусть Y будет потенциальным ключом R. Тогда Y → X. Следовательно, A не является транзитивно зависимым от Y, если существует функциональная зависимость X → Y тогда и только тогда, когда X является суперключом R.
Нормализация за пределами 3NF
[ редактировать ]Большинство таблиц 3NF не содержат аномалий обновления, вставки и удаления. Некоторые типы таблиц 3NF, редко встречающиеся на практике, подвержены таким аномалиям; это таблицы, которые либо не соответствуют нормальной форме Бойса-Кодда (BCNF), либо, если они соответствуют BCNF, не соответствуют более высоким нормальным формам 4NF или 5NF .
Рекомендации по использованию в средах отчетности
[ редактировать ]Хотя 3NF идеально подходит для машинной обработки, пользователю-человеку может быть сложно интуитивно понять сегментированный характер модели данных. Аналитика с помощью запросов, отчетов и информационных панелей часто облегчалась использованием другого типа модели данных, которая обеспечивала предварительно рассчитанный анализ, такой как линии тренда, расчеты за период (за месяц, за квартал, за год). текущий момент), совокупные расчеты, базовая статистика (среднее значение, стандартное отклонение, скользящие средние) и сравнения предыдущих периодов (год назад, месяц назад, неделя назад), например, многомерное моделирование и за его пределами, сглаживание звезд с помощью Hadoop и наука о данных . [12] [13] Структура «аккуратных данных» Хэдли Уикхема - это 3NF, с «ограничениями, сформулированными на статистическом языке». [14]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Кодд, Э.Ф. «Дальнейшая нормализация реляционной модели базы данных», стр. 34.
- ^ Кодд, Э.Ф. «Дальнейшая нормализация реляционной модели базы данных». (Представлено на 6-м симпозиуме по компьютерным наукам Courant, «Системы баз данных», Нью-Йорк, 24–25 мая 1971 г.) Отчет об исследовании IBM RJ909 (31 августа 1971 г.). Переиздано в Рэндалле Дж. Растине (ред.), Системы баз данных: Courant Computer Science Symposium Series 6 . Прентис-Холл, 1972 год.
- ^ Кодд, с. 43.
- ^ Кодд, с. 45–46.
- ^ Заниоло, Карло. «Новая нормальная форма для проектирования схем реляционных баз данных». Транзакции ACM в системах баз данных 7 (3), сентябрь 1982 г.
- ^ Авраам Зильбершац , Генри Ф. Корт , С. Сударшан, Концепции системы баз данных (5-е издание), стр. 276–277.
- ^ Кент, Уильям. «Простое руководство по пяти нормальным формам в теории реляционных баз данных» , Сообщения ACM 26 (2), февраль 1983 г., стр. 120–125.
- ↑ Автор книги по управлению базами данных 1989 года благодарит одного из своих учеников за то, что он придумал приложение «Так помоги мне, Кодд». Дир, Джордж. Управление базами данных (Скотт, Форесман, 1989), с. 331.
- ^ Дейт, CJ. Введение в системы баз данных (7-е изд.) (Аддисон Уэсли, 2000), стр. 10. 379.
- ^ Серж Абитебул , Ричард Б. Халл, Виктор Виану : Основы баз данных. Аддисон-Уэсли, 1995. http://webdam.inria.fr/Alice/ ISBN 0201537710 . Теорема 11.2.14.
- ^ Хаммо, Басам. «Разложение, 3NF, BCNF» (PDF) . Архивировано (PDF) из оригинала 15 марта 2023 г.
- ^ «Сравнение методов моделирования хранилищ данных - Роелант Вос» . Роэлант Вос . 12 февраля 2013 года . Проверено 5 марта 2018 г.
- ^ «Уроки моделирования данных Hadoop | EMC» . Блог InFocus | Услуги Dell EMC . 23 сентября 2014 года . Проверено 5 марта 2018 г.
- ^ Уикхэм, Хэдли (12 сентября 2014 г.). «Точные данные» . Журнал статистического программного обеспечения . 59 : 1–23. дои : 10.18637/jss.v059.i10 . ISSN 1548-7660 .
Дальнейшее чтение
[ редактировать ]- Дэйт, CJ (1999), Введение в системы баз данных (8-е изд.). Эддисон-Уэсли Лонгман. ISBN 0-321-19784-4 .
- Кент, В. (1983) Простое руководство по пяти нормальным формам в теории реляционных баз данных , Communications of the ACM, vol. 26, стр. 120–126.
Внешние ссылки
[ редактировать ]- Советы Литта: нормализация
- Основы нормализации базы данных Майка Чаппла (About.com)
- Введение в нормализацию базы данных Майка Хиллера.
- Учебное пособие по первым трем нормальным формам Фреда Коулсона.
- Описание основ нормализации базы данных от Microsoft
- Третья нормальная форма с простыми примерами от exploreDatabase