Ключи-кандидаты и первичные ключи


Дата добавления: 2014-11-24 | Просмотров: 1575


<== предыдущая страница | Следующая страница ==>

Содержимое отношения это неупорядоченное множество, состоящее из 0 или более кортежей, по определению каждый элемент множества кортежей должен быть уникален. В таком случае для любого отношения должна существовать комбинация атрибутов, однозначно определяющая каждый кортеж. Такой набор из одного или более атрибутов называют ключом-кандидатом.

Для любого отношения может существовать более одного ключа-кандидата, но в любом случае каждый ключ-кандидат должен однозначно определять каждый кортеж, и не только для любого специфического множества кортежей, а для всех возможных кортежей в любой момент времени. Кстати, обратный принцип тоже верен: если взять два кортежа с одинаковыми значениями ключа-кандидата, то оба этих кортежа должны представлять одну и ту же сущность. Подтекст в том, что вы не можете определить ключ-кандидат эмпирически. Нельзя гарантировать, что некое поле или набор полей будет уникальным для всех кортежей лишь на том основании, что такой набор уникально идентифицирует некое ограниченное множество кортежей. Между тем однозначная идентификация любого кортежа является непременным требованием к ключу-кандидату.

Если буквально следовать определению, то каждое отношение должно иметь, по меньшей мере, один ключ-кандидат — набор всех атрибутов, составляющих кортеж. Ключ-кандидат может состоять из единственного атрибута (простой ключ} или множества атрибутов (составной ключ}. Тем не менее, дополнительное требование к ключу-кандидату такое: он должен состоять из минимального набора атрибутов, однозначно идентифицирующих кортеж, поэтому полный набор атрибутов отношения не обязательно является ключом-кандидатом.

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

Когда единственно возможный ключ-кандидат чересчур громоздок (например, состоит из слишком многих атрибутов или слишком велик), вы можете использовать специальный тип данных, который механизм баз данных Microsoft Jet и Microsoft SQL Server поддерживают для создания искусственных ключей. В таких искусственных ключах хранятся значения, генерируемыесамой системой. Называемые Auto-Number в Microsoft Jet и Identity в SQL Server, поля этого типа очень удобны для создания идентификаторов строк. При этом подразумевается, что вы не будете пытаться связать поле этого типа с какой-нибудь конкретной сущностью предметной области. Такие поля не более чем ярлыки. Ничто не гарантирует, что значения содержащихся в них величин будут строго последовательными, вы практически не можете контролировать процесс их генерации системой. Так что не пытайтесь использовать их для чего-либо еще, кроме нумерации, иначе столкнетесь с массой проблем.

Хотя выбор ключа-кандидата является семантической проблемой, не надейтесь, что атрибуты, с помощью которых вы моделируете сущности реального мира, всегда позволят вам построить подходящий ключ-кандидат. Люди обычно отзываются на свои имена; но, внимательно просмотрев страницы телефонной книги, вы убедитесь, что имена вряд ли можно рассматривать в качестве уникального идентификатора личности.

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |

При использовании материала ссылка на сайт Конспекта.Нет обязательна! (0.026 сек.)