18.4.8. Определение первичных ключей

Барон:

...Стоять я не могу... мои колени

Слабеют... душно! .. душно! ..

Где ключи? Ключи, ключи мои! ..

А. С. Пушкин. Скупой рыцарь, сцена III

Каждая сущность должна иметь признаки, которые ее описывают, в противном случае она просто не может существовать. Признак сущности, представляющий интерес называется атрибутом. Некоторые атрибуты сущности не только описывают, но и уникальным образом идентифицируют ее. Их называют первичным ключом. Первичный ключ (primary key) – это атрибут или группа атрибутов, однозначно идентифицирующая экземпляр сущности.

Если в сущности своего первичного ключа нет – следует создать дополнительный атрибут. Примером такого атрибута являются код автора, номер зачетной книжки студента. Такие ключи называют суррогатными, т.е. вне базы данных они не имеют

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

Рассмотрим кандидатов на первичный ключ сущности Автор. Здесь мож­но выделить следующие потенциальные ключи: «Автор#», «Номер паспорта», «Фамилия Имя Отчество» (сос­тавной).

Ключи могут быть составными, то есть содержащими несколько атрибутов.

Для того чтобы быть первичным, потенциальный ключ должен удовлетворять ряду требований:

Два экземпляра не должны иметь одинаковых значений возможного ключа. Потенциальный ключ «Фамилия Имя Отчество» является плохим кандидатом, так как авторы могут быть полными тезками. Экземпляры же ключей «Автор#» и «Номер паспорта» являются уникальными.

Для обеспечения уникальности дополним ключ «Фамилия Имя Отчество» атрибутом «Адрес». Но при выборе первичного ключа предпочтение должно отдаваться более простым ключам, то есть ключам, содержащим меньшее количество атрибутов. Тогда ключи «Автор» и «Номер паспорта» предпочтительнее составного ключа «Фамилия Имя Отчество Адрес».

Если допускается, что автор может, например, не иметь паспорта (например, у Федора Михайловича Достоевского какой номер пас- порта?), то ключ «Номер паспорта» не подойдет на роль первичного ключа. Если для обеспечения уникальности необходимо дополнить потенциальный ключ дополнительными атрибутами, то они не должны содержать нулевых значений. Дополняя ключ «Фамилия Ими Отчество» атрибутом «Адрес», нужно убедиться в том, что адреса всех авторов известны.

Автор может выйти замуж и сменить фамилию, сменить паспорт. Поэтому «Номер паспорта» и «Фамилия Имя Отчество» не подходят по этому условию на роль первичного ключа.

Итак, наиболее подходящим первичным ключом сущности Автор является суррогатный атрибут «Автор#».

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

Внешний ключ (Foreign key) – это атрибут или группа атрибутов одной сущности, которые могут служить в качестве первичного ключа для другой сущности. Говорят также, что внешний ключ одной сущности является ссылкой на первичный ключ другой сущности.

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

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

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

28. Задайте первичный ключ: выберите сущность Автор, МП, выберите Properties, выберите вкладку Attributes, в области Attributes выберите Автор#, выберите флажком Primary UID, нажмите Ладно.

29. Задайте первичный ключ: выберите сущность Книга, МП, выберите Properties, выберите вкладку Attributes, в области Attributes выберите Книга#, выберите флажком Primary UID, нажмите Ладно.

30. Задайте первичный ключ: выберите сущность Издательство, МП, выберите Properties, выберите вкладку Attributes, в области Attributes выберите Издательство#, выберите флажком Primary UID, нажмите Ладно.

Обратите внимание, чтоатрибут первичного ключа Издательство# родительской сущности Издательство должен автоматически мигрировать в дочернюю сущность Книга.

31. Задайте первичный ключ: выберите сущность Заказ, МП, выберите Properties, выберите вкладку Attributes, в области Attributes выберите Заказ#, выберите флажком Primary UID, нажмите Ладно.

32. Задайте первичный ключ: выберите сущность Редактор, МП, выберите Properties, выберите вкладку Attributes, в области Attributes выберите Редактор#, выберите флажком Primary UID, нажмите Ладно.