16.8. Целостность: потенциальные ключи

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

Определение: Пусть R – некоторое отношение. Тогда потенциальный ключ К для R – это подмножество множества атрибутов R, обладающее свойствами: (1) Свойством уникальности – нет двух различных кортежей в R с одинаковым значением K. (2) Свойством неизбыточности – никакое из подмножеств К не обладает свойством уникальности (т.е. настоящий потенциальный ключ не должен включать лишних атрибутов для идентификации уникальности.).

Любое отношение имеет по крайней мере один потенциальный ключ.

Потенциальный ключ, состоящий из одного атрибута называется простым. Например, в отношении S потенциальный ключ – это уникальный номер поставщика {S#}.

Потенциальный ключ состоящий из более чем одного атрибута называется составным. Например, в SPJ первичный ключ – комбинация атрибутов {S#, P#,J#}.Это значит не только, что в данный момент в SPJ нет двух кортежей с одинаковым значением этой комбинации, но и то, что для всех возможный значений SPJ нет двух различных кортежей с одинаковым значением этой комбинации.

Отношение может иметь несколько первичных ключей. Традиционно, один из первичных ключей объявляется первичным, а остальные – альтернативными.

PS:

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

  2. Для чего нужны потенциальные ключи? Потенциальные ключи обеспечивают основной механизм адресации на уровне кортежей в реляционной системе. Следовательно единственный гарантируемый системой способ точно указать на какой-нибудь кортеж – это указать значение некоторого первичного ключа. Например, S# – первичный ключ, тогда с помощью выражения S WHERE S# = ‘S3’ мы получим не больше одного кортежа. CITY – не первичный ключ и с помощью выражения S WHERE CITY = ‘КАНСК’ мы получим в общем случае количество кортежей, которое нельзя предсказать. Таким образом, первичные ключи имеют такое же фундаментальное значение для успешной работы реляционной системы, как адресация основной памяти для успешной работы компьютера.