Нормальная форма доменного ключа
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Нормальная форма ключа домена ( DK/NF или DKNF ) — это нормальная форма, используемая при нормализации базы данных , которая требует, чтобы база данных не содержала никаких ограничений, кроме ограничений домена и ограничений ключа.
Ограничение домена определяет допустимые значения для данного атрибута, а ограничение ключа определяет атрибуты, которые однозначно идентифицируют строку в данной таблице.
Нормальная форма домен/ключ достигается, когда каждое ограничение отношения является логическим следствием определения ключей и доменов, а соблюдение ограничений и условий ключа и домена приводит к соблюдению всех ограничений. Таким образом, он позволяет избежать всех вневременных аномалий .
Причина использования нормальной формы домен/ключ заключается в том, чтобы избежать наличия в базе данных общих ограничений, которые не являются четкими ограничениями домена или ключа. Большинство баз данных могут легко проверять доменные и ключевые ограничения атрибутов. Однако общие ограничения обычно требуют специального программирования базы данных в виде хранимых процедур (часто разновидности триггеров ), которые дороги в обслуживании и дороги в исполнении базы данных. Таким образом, общие ограничения делятся на доменные и ключевые ограничения.
Гораздо проще создать новую базу данных в нормальной форме домена/ключа, чем преобразовать базы данных в меньшие нормальные формы, которые могут содержать многочисленные аномалии. Однако успешное создание базы данных нормальной формы домена/ключа остается сложной задачей даже для опытных программистов баз данных. Таким образом, хотя нормальная форма домен/ключ устраняет проблемы, обнаруженные в большинстве баз данных, ее достижение, как правило, является наиболее дорогостоящей нормальной формой. Однако неспособность достичь нормальной формы домена/ключа может повлечь за собой долгосрочные скрытые издержки из-за аномалий, которые появляются в базах данных, со временем придерживающихся только более низких нормальных форм.
Третья нормальная форма , нормальная форма Бойса-Кодда , четвертая нормальная форма и пятая нормальная форма являются частными случаями нормальной формы домена/ключа. Все они имеют либо функциональные , многозначные зависимости , либо зависимости соединения , которые можно преобразовать в суперключи . Области в этих нормальных формах не были ограничены, поэтому все ограничения области соблюдены. Однако преобразование более высокой нормальной формы в нормальную форму домена/ключа не всегда является преобразованием, сохраняющим зависимости, и поэтому не всегда возможно.
Пример
[ редактировать ]Нарушение ДКНФ встречается в следующей таблице:
Богатый человек | Тип богатого человека | Чистая стоимость в долларах |
---|---|---|
Стив | Миллионер | 124,543,621 |
Родерик | Миллиардер | 6,553,228,893 |
Катрина | Миллиардер | 8,829,462,998 |
Гэри | Миллионер | 495,565,211 |
(Предположим, что домен для «Богатый человек» состоит из имен всех богатых людей из заранее определенной выборки богатых людей; домен для «Тип богатого человека» состоит из значений «Миллионер» и «Миллиардер»; и домен для «Чистый капитал» в долларах состоит из всех целых чисел, больших или равных 1 000 000.)
Существует ограничение, связывающее тип богатого человека с собственным капиталом в долларах, хотя мы не можем вывести одно из другого. Ограничение гласит, что собственный капитал миллионера будет составлять от 1 000 000 до 999 999 999 включительно, тогда как собственный капитал миллиардера будет составлять 1 000 000 000 или выше. Это ограничение не является ни ограничением домена, ни ограничением ключа; поэтому мы не можем полагаться на ограничения домена и ключевые ограничения, чтобы гарантировать, что противоречивая комбинация «Тип богатого человека/Чистый капитал в долларах» не попадет в базу данных.
Нарушение DKNF можно устранить, удалив столбец «Тип богатого человека». Статус богатого человека как миллионера или миллиардера определяется его собственным капиталом в долларах, как это определено в таблице статуса благосостояния, поэтому никакая полезная информация не теряется.
Богатый человек | Чистая стоимость в долларах |
---|---|
Стив | 124,543,621 |
Родерик | 6,553,228,893 |
Катрина | 8,829,462,998 |
Гэри | 495,565,211 |
Статус | Минимум | Максимум |
---|---|---|
Миллионер | 1,000,000 | 999,999,999 |
Миллиардер | 1,000,000,000 | 999,999,999,999 |
Внешние ключи
[ редактировать ]Отношения, которые невозможно выразить как внешние ключи, являются очевидным нарушением DKNF. Например, атрибут «Родительский идентификатор», указывающий на одну из нескольких ссылочных таблиц, в зависимости от второго атрибута «Родительский тип», нарушает DKNF.
См. также
[ редактировать ]Ссылки
[ редактировать ]- Феджин, Рональд (1981). «Нормальная форма реляционных баз данных, основанная на доменах и ключах» (PDF) . Транзакции ACM в системах баз данных . 6 (3): 387–415. CiteSeerX 10.1.1.73.373 . дои : 10.1145/319587.319592 . S2CID 14664427 .
Внешние ссылки
[ редактировать ]- Основы нормализации базы данных. Архивировано 5 февраля 2007 г. на Wayback Machine Майком Чапплом (About.com).
- Введение в нормализацию базы данных Майка Хиллера.
- Нормализация ITS, Техасский университет.
- Учебное пособие по первым трем нормальным формам Фреда Коулсона.
- Описание основ нормализации базы данных от Microsoft