4. Виртуальные атрибуты

Все атрибуты в системах управления базами данных делятся (по абсолютной аналогии с отношениями) на базовые и виртуальные. Так называемые базовые атрибуты – это хранимые атрибуты, которые необходимо использовать не один раз, а следовательно, целесообразно сохранить. А, в свою очередь, виртуальные атрибуты – это не хранимые, а вычисляемые атрибуты. Что это значит? Это значит, что значения так называемых виртуальных атрибутов реально не хранятся, а вычисляются через базовые атрибуты на ходу посредством задаваемых формул. При этом домены вычисляемых виртуальных атрибутов определяются автоматически.

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

Базы данных: конспект лекций - i_057.png

Итак, мы видим, что атрибуты «Вес Кг» и «Цена Руб за Кг» – базовые атрибуты, потому что они имеют обыкновенные значения и хранятся в нашей базе данных. А вот атрибут «Стоимость» – виртуальный атрибут, потому что он задан формулой своего вычисления и реально в базе данных храниться не будет.

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

И еще необходимо знать, что, несмотря на то что домены виртуальных атрибутов определяются автоматически, тип вычисляемых значений иногда нужно заменить с имеющегося на какой-нибудь другой. Для этого в языке систем управления базами данных имеется специальный предикат Convert, с помощью которого и может быть переопределен тип вычисляемого выражения. Convert – это так называемая функция явного преобразования типов. Записывается она следующим образом:

Convert (тип данных, выражение);

Выражение, стоящее вторым аргументом функции Convert, посчитается и выведется в виде таких данных, тип которых указан первым аргументом функции.

Рассмотрим пример. Пусть нам необходимо посчитать значение выражения «2*2», но вывести это нужно не в виде целого числа «4», а строкой символов. Для выполнения этого задания запишем следующую функцию Convert:

Convert (Char (1), 2 * 2).

Таким образом, можно увидеть, что данная запись функции Convert в точности даст необходимый нам результат.

5. Понятие ключей

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

Итак, дадим строгое определение ключа отношения.

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

t = t(S) = {t(a) | adef( t) ⊆ S} определение кортежа,

t(S) [S’ ] = {t(a) | adef (t) ∩ S’}, S’S — определение унарной операции проекции;

Понятно, что проекции кортежа на подсхему соответствует подстрока строки таблицы.

Итак, что же такое ограничение уникальности ключевых атрибутов?

Объявление ключа К для схемы отношения S приводит к формулированию следующего инвариантного условия, называемого, как мы уже говорили, ограничением уникальности и обозначаемого как:

Inv < KS > r(S):

Inv < KS > r(S) = ∀t1, t2r (t 1[ K] = t2 [K ] → t 1(S) = t2(S)), KS;

Итак, данное ограничение уникальности Inv < KS > r(S) ключа К означает, что если любые два кортежа t1 и t2, принадлежащие отношению r(S), равны в проекции на ключ К, то это непременно влечет за собой равенство этих двух кортежей и в проекции на всю схему отношения S. Другими словами, все значения кортежей, принадлежащих ключевым атрибутам, уникальны, единственны в своем отношении.

И второе важное требование, предъявляемое к ключу отношения, – это требование неизбыточности. Что это значит? Это требование означает, что ни для какого строгого подмножества ключа требование уникальности не предъявляется.

На интуитивном уровне понятно, что ключевой атрибут – это тот атрибут отношения, который однозначно и точно определяет каждый кортеж отношения. Например, в следующем отношении, заданном таблицей:

Базы данных: конспект лекций - i_058.png

ключевым атрибутом является атрибут «№ зачетной книжки», потому что у различных студентов не может быть одинакового номера зачетной книжки, т. е. для этого атрибута выполняется ограничение уникальности.

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

1) простой ключ – это ключ, состоящий из одного и не более атрибута.

Например, в экзаменационной ведомости по конкретному предмету простым ключом является номер зачетки, потому что по нему можно однозначно идентифицировать любого студента;

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

3) суперключ – это любое надмножество любого ключа. Следовательно, сама схема отношения заведомо является суперключом. Из этого можно сделать вывод, что любое отношение теоретически имеет, как минимум, один ключ, а может иметь их и несколько. Однако объявление суперключа вместо обычного ключа логически недопустимо, так как связано с ослаблением автоматически контролируемого ограничения уникальности. Ведь супер ключ хоть и обладает свойством уникальности, но не обладает свойством неизбыточности;

4) первичный ключ – это просто ключ, который при задании базового отношения был объявлен первым. Важно, что допустимо объявление одного и только одного первичного ключа. Кроме того, атрибуты первичного ключа ни в коем случае не могут принимать Null-значений.

При создании базового отношения в записи на псевдокоде первичный ключ обозначается primary key и в скобках указывается имя атрибута, который и является этим ключом;

5) кандидатные ключи – это все остальные ключи, объявленные после первичного ключа.

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

На псевдокоде при задании базового отношения кандидатные ключи объявляются при помощи слов candidate key и в скобках рядом, как и в случае объявления первичного ключа, указывается имя атрибута, который и является данным кандидатным ключом;