При объявлении схемы базового отношения могут быть
заданы объявления нескольких ключей. С этим мы уже не раз сталкивались
прежде. Наконец настало время поговорить более подробно о том, что же
такой ключи отношения, а не ограничиваться общими фразами и
приближенными определениями.
Итак, дадим строгое определение ключа отношения.
Ключ схемы отношения – это подсхема исходной схемы, состоящая из одного или нескольких атрибутов, для которых декларируется условие уникальности значений в кортежах отношений. Для того чтобы понять, что такое условие уникальности или, как его еще называют, ограничение уникальности, вспомним для начала определения кортежа и унарной операции проекции кортежа на подсхему. Приведем их:
t = t(S) = {t(a) | a ∈ def( t) ⊆ S} — определение кортежа,
t(S) [S’ ] = {t(a) | a ∈ def (t) ∩ S’}, S’ ⊆ S — определение унарной операции проекции;
Понятно, что проекции кортежа на подсхему соответствует подстрока строки таблицы.
Итак, что же такое ограничение уникальности ключевых атрибутов?
Объявление ключа К для схемы отношения S приводит к формулированию следующего инвариантного условия, называемого, как мы уже говорили, ограничением уникальности и обозначаемого как:
Inv < K → S > r(S):
Inv < K → S > r(S) = ∀t1, t2 ∈ r (t 1[ K] = t2 [K ] → t 1(S) = t2(S)), K ⊆ S;
Итак, данное ограничение уникальности Inv < K → S > r(S) ключа К означает, что если любые два кортежа t1 и t2, принадлежащие отношению r(S), равны в проекции на ключ К,
то это непременно влечет за собой равенство этих двух кортежей и в
проекции на всю схему отношения S. Другими словами, все значения
кортежей, принадлежащих ключевым атрибутам, уникальны, единственны в
своем отношении.
И второе важное требование, предъявляемое к ключу отношения, – это требование неизбыточности.
Что это значит? Это требование означает, что ни для какого строгого
подмножества ключа требование уникальности не предъявляется.
На интуитивном уровне понятно, что ключевой атрибут –
это тот атрибут отношения, который однозначно и точно определяет каждый
кортеж отношения. Например, в следующем отношении, заданном таблицей: ключевым
атрибутом является атрибут «№ зачетной книжки», потому что у различных
студентов не может быть одинакового номера зачетной книжки, т. е. для
этого атрибута выполняется ограничение уникальности.
Интересно, что в схеме любого отношения могут встретиться самые разные ключи. Перечислим основные виды ключей:
1) простой ключ – это ключ, состоящий из одного и не более атрибута.
Например, в экзаменационной ведомости по конкретному
предмету простым ключом является номер зачетки, потому что по нему можно
однозначно идентифицировать любого студента;
2) составной ключ – это ключ, состоящий из двух и
более атрибутов. Например, составным ключом в списке учебных аудиторий
являются номер корпуса и номер аудитории. Ведь каким-то одним из этих
атрибутов однозначно определить каждую аудиторию не представляется
возможным, а их совокупностью, т. е. составным ключом, это сделать
довольно легко;
3) суперключ – это любое надмножество любого
ключа. Следовательно, сама схема отношения заведомо является
суперключом. Из этого можно сделать вывод, что любое отношение
теоретически имеет, как минимум, один ключ, а может иметь их и
несколько. Однако объявление суперключа вместо обычного ключа логически
недопустимо, так как связано с ослаблением автоматически контролируемого
ограничения уникальности. Ведь супер ключ хоть и обладает свойством
уникальности, но не обладает свойством неизбыточности;
4) первичный ключ – это просто ключ, который при
задании базового отношения был объявлен первым. Важно, что допустимо
объявление одного и только одного первичного ключа. Кроме того, атрибуты
первичного ключа ни в коем случае не могут принимать Null-значений.
При создании базового отношения в записи на псевдокоде первичный ключ обозначается primary key и в скобках указывается имя атрибута, который и является этим ключом;
5) кандидатные ключи – это все остальные ключи, объявленные после первичного ключа.
В чем заключаются основные отличия кандидатных ключей от
ключей первичных? Во-первых, кандидатных ключей может быть несколько,
тогда как первичный ключ, как было сказано выше, может быть только один.
И, во-вторых, если атрибуты первичного ключа не могут принимать
Null-значений, то на атрибуты кандидатных ключей это условие не
накладывается.
На псевдокоде при задании базового отношения кандидатные ключи объявляются при помощи слов candidate key
и в скобках рядом, как и в случае объявления первичного ключа,
указывается имя атрибута, который и является данным кандидатным ключом;
6) внешний ключ – это ключ, объявленный в базовом
отношении, который при этом ссылается на первичный или кандидатный ключ
того же самого или какого-то другого базового отношения.
При этом отношение, на которое ссылается внешний ключ, называется ссылочным (или родительским) отношением. А отношение, содержащее внешний ключ, называется дочерним.
В записи на псевдокоде внешний ключ обозначается как foreign key,
в скобках непосредственно после этих слов указывается имя атрибута
данного отношения, являющегося внешним ключом, а после этого
записывается ключевое слово references («ссылается») и указать имя базового отношения и имя атрибута, на который и ссылается данный конкретный внешний ключ.
Также при создании базового отношения для каждого внешнего ключа записывается условие, называемое ограничением ссылочной целостности, но подробно мы будем говорить об этом позднее.
|