В этой статье есть несколько проблем. Помогите улучшить ее или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти сообщения )
|
Нормальная форма доменного ключа ( DK/NF или DKNF ) — это нормальная форма , используемая при нормализации базы данных , которая требует, чтобы база данных не содержала никаких ограничений, кроме ограничений домена и ограничений ключа.
Ограничение домена определяет допустимые значения для данного атрибута, тогда как ограничение ключа определяет атрибуты, которые уникально идентифицируют строку в данной таблице.
Нормальная форма домена/ключа достигается, когда каждое ограничение на отношение является логическим следствием определения ключей и доменов, а применение ограничений и условий ключа и домена приводит к выполнению всех ограничений. Таким образом, это позволяет избежать всех не- временных аномалий.
Причина использования нормальной формы домена/ключа заключается в том, чтобы избежать общих ограничений в базе данных, которые не являются явными ограничениями домена или ключа. Большинство баз данных могут легко тестировать ограничения домена и ключа на атрибутах. Однако общие ограничения обычно требуют специального программирования базы данных в форме хранимых процедур (часто триггерного типа ), которые дороги в обслуживании и выполнении для базы данных. Поэтому общие ограничения делятся на ограничения домена и ключа.
Гораздо проще создать новую базу данных в доменной/ключевой нормальной форме, чем преобразовывать базы данных в меньших нормальных формах, которые могут содержать многочисленные аномалии. Однако успешное создание базы данных в доменной/ключевой нормальной форме остается сложной задачей даже для опытных программистов баз данных. Таким образом, хотя доменная/ключевая нормальная форма устраняет проблемы, обнаруженные в большинстве баз данных, она, как правило, является самой дорогостоящей нормальной формой для достижения. Однако неспособность достичь доменной/ключевой нормальной формы может повлечь за собой долгосрочные скрытые издержки из-за аномалий, которые со временем появляются в базах данных, придерживающихся только меньших нормальных форм.
Третья нормальная форма , нормальная форма Бойса–Кодда , четвертая нормальная форма и пятая нормальная форма являются частными случаями нормальной формы домена/ключа. Все они имеют либо функциональные , либо многозначные , либо зависимости соединения , которые могут быть преобразованы в суперключи . Домены в этих нормальных формах были неограниченными, поэтому все ограничения домена удовлетворены. Однако преобразование более высокой нормальной формы в нормальную форму домена/ключа не всегда является преобразованием, сохраняющим зависимость, и поэтому не всегда возможно.
Нарушение 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 можно устранить, удалив столбец Wealthy Person Type. Статус богатого человека как миллионера или миллиардера определяется его чистым капиталом в долларах, как определено в таблице Wealthiness Status, поэтому никакая полезная информация не теряется.
Богатый человек | Чистая стоимость в долларах |
---|---|
Стив | 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. Например, атрибут "Parent ID", который указывает на одну из нескольких ссылочных таблиц, в зависимости от второго атрибута "Parent Type", нарушает DKNF.