Ключ или отмычка - Заключение

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

  • отсутствие интеллектуального ключа;
  • ограничение на размер первичного ключа.

Отсутствие интеллектуального ключа возможно в случае, когда предметная область не включает в себя атрибуты, которые позволяют идентифицировать кортеж. С другой стороны, атрибуты, которые позволяют идентифицировать каждый кортеж отношения, могут быть слишком велики и их совокупный размер может превысить ограничение на размер ключа у конкретной СУБД.

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

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

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

Применение суррогатных ключей вызвано определённым несовершенством современных СУБД, в частности, способом хранения информации по кортежам. В такой ситуации одна и та же информация многократно дублируется в различных структурах. Так атрибуты первичного ключа хранятся не только в самом отношении, но, как правило, входят и в уникальный индекс, который автоматически создаётся для каждого первичного ключа. Если какое-то отношение ссылается на другое отношения, то внешний ключ опять же сохраняется не только в ссылочном отношении, но и в индексе, построенном на внешнем ключе. При связи между отношениями один-ко-многим значения первичного ключа могут многократно повторяться во внешнем ключе. Таким образом, одни и те же значения из атрибутов первичного ключа многократно представляются в базе данных.

Давая определение термину отношения, Е. Кодд писал [ЕК РМ]: «Термин отношение используется здесь в его общепринятом математическом смысле. Для заданных множеств S1, S2, ..., Sn (не обязательно различных) R является отношением на этих n множествах, если представляет собой множество кортежей степени n, у каждого из которых первый элемент взят из множества S1, второй - из множества S2 и т.д. Мы будем называть Sj j-тым доменом R». Это определение позволяет представить отношение как совокупность атрибутов. В таком случае, ключевые атрибуты, на основании которых происходит связь между отношениями, могут разделяться несколькими отношениями, находящимися в связи. Внутреннее устройство этих атрибутов является их внутренним делом и неизвестно отношениям, которые разделяют атрибуты. Следовательно, их можно организовать наиболее удобным образом, например, в виде иерархической структуры, повышающей скорость поиска затребованных значений. В свою очередь, организация атрибутов в виде индекса позволяет иметь только одно представление информации в базе данных. (Более подробно эта схема хранения рассмотрена в письмах по проектированию, посвящённых проекту СУБД).

При данной схеме хранения информации потребности в суррогатных ключах не возникает, поскольку здесь не потребуются ни каскадные модификации, при изменении значения или удалении первичного ключа, ни сложных манипуляций с базой данных при изменении структуры атрибутов, составляющих первичный ключ. А поскольку такая схема хранения не противоречит реляционной модели, предложенной Е. Коддом, то можно сделать вывод о том, что суррогатные ключи являются привнесёнными в эту модель с целью попытки компенсации недостатков конкретных СУБД. Фактически к той же мысли можно придти, анализируя высказывание К. Дейта о существенности, о чём уже говорилось ранее.

Сайт Alexus Software Development