Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект_АКОБМИ.pdf
Скачиваний:
176
Добавлен:
17.05.2015
Размер:
1.95 Mб
Скачать

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

Имеется важный частный случай соединения - естественное соединение.

Операция соединения называется операцией естественного соединения, если условие соединения имеет вид (а = b), где а и b - атрибуты разных операндов соединения Этот случай важен потому, что он особо часто встречается на практике и для него существуют эффективные алгоритмы реализации в СУБД. Операция естественного соединения применяется к паре отношений А и В, обладающих общим атрибутом R, то есть атрибутом с одним и тем же именем и определенным на одном и том же домене. Пусть ab обозначает объединение заголовков отношений А и В. Тогда естественное соединение А и В - это спроектированный на ab результат соединения А и В. Операция естественного соединения не включается прямо в состав набора операций реляционной алгебры, но она имеет очень важное практическое значение.

Операция деления отношений нуждается в более подробном объяснении, поскольку наиболее трудная для понимания. Пусть заданы два отношения - А с заголовком {а,, а2,..., аn, bь b2,..., bm} и В с заголовком {bь b2, ..., bm}. Будем полагать, что атрибут b, отношения А и атрибут b, отношения В обладают одним и тем же именем и определены на одном и том же домене. Назовем множество атрибутов {aj} составным атрибутом а, множество атрибутов {bj,} - составным атрибутом b. После этого будем говорить о реляционном делении бинарного отношения А(а,b) на унарное отношение В(b).

Результатом деления А на В является унарное отношение С(а), состоящее из таких кортежей v, что в отношении А имеются кортежи <v, w> которые во множестве значений {w} включают множество значений атрибута b в отношении В.

Поскольку деление наиболее трудная операция, поясним ее примером. Пусть в БД студентов имеются два отношения: СТУДЕНТЫ (ФИО, НОМЕР) и ИМЕНА (ФИО), причем унарное отношение ИМЕНА содержит все фамилии, которыми обладают студенты университета. Тогда после выполнения операции реляционного деления отношения СТУДЕНТЫ на отношение ИМЕНА будет получено унарное отношение, содержащее номера студенческих билетов, принадлежащих студентам со всеми возможными в этом университете фамилиями.

2.3.3 Реляционное исчисление

Допустим, что имеется БД. обладающая следующей структурой: отношение СТУДЕНТЫ (СТУД_НОМ., СТУД_ЙМЯ, СТУД_СТИП, ГР_НОМ) и отношение ГРУППЫ (ГР_НОМ., ГР_КОЛ., ГР_СТАР). Предположим, что необходимо узнать имена и номера студенческих билетов у студентов, являющихся старостами групп с количеством студентов больше 25.

113

Если бы для формулировки такого запроса использовалась реляционная алгебра, то мы получили бы алгебраическое выражение, которое читалось бы, например, следующим образом:

выполнить соединение отношений СТУДЕНТЫ и ГРУППЫ по условию СТУД_НОМ = ГР_СТАР:

ограничить полученное отношение по условию ГР_КОЛ>25;

спроецировать результат предыдущей операции на атрибут СТУД_ИМЯ. СТУД_НОМ.

Здесь пошагово сформулирована последовательность выполнения запроса к БД, каждый из которых соответствует одной реляционной операции. Если же сформулировать тот же запрос с использованием реляционного исчисления, то мы получили бы формулу', которую можно было бы прочитать, например, следующим образом: Выдать СТУД_ИМЯ и СТУД_НОМ для таких студентов, чтобы существовала группа с таким же значением ГР_СТАР и значением ГР_КОЛ, большим 25.

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

Базисными понятиями реляционного исчисления являются понятие пере-

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

В зависимости от того, что является областью определения переменной,

различаются исчисление кортежей и исчисление доменов. В исчислении кор-

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

Для определения кортежной переменной используется оператор RANGE. Например, для того, чтобы определить переменную СТУДЕНТ, областью определения которой является отношение СТУДЕНТЫ, нужно употребить конструкцию

RANGE СТУДЕНТ IS СТУДЕНТЫ

Из этого определения следует, что в любой момент времени переменная СТУДЕНТ представляет некоторый кортеж отношения СТУДЕНТЫ. При использовании кортежных переменных в формулах можно ссылаться на значение атрибута переменной. Например, для того, чтобы сослаться на значение атрибута СТУД_ИМЯ переменной СТУДЕНТ, нужно употребить конструкцию СТУДЕНТ.СТУД. ИМЯ.

114

Правильно построенные формулы служат для выражения условий, накладываемых на кортежные переменные. В основе таких формул лежат простые сравнения, представляющие собой операции сравнения значений атрибутов переменных или литерально заданных констант. Например, конструкция "СТУДЕНТ СТУД_НОМ= 123456" является простым сравнением. Более сложные варианты правильно построенных формул реализуются с помощью логических связок NOT, AND. OR и IF ... THEN. Наконец, допускается построение правильно построенных формул с помощью кванторов. Если F - это правильно построенная формула, в которой участвует переменная var, то конструкции EXISTS var (F) и FORALL var (F) являются правильными. Здесь квантор EXISTS обозначает "существование", a FORALL - "для всех кортежей".

Переменные, входящие в правильно построенные формулы, могут быть сво-

бодными или связанными. Все переменные, входящие в состав формулы, при построении которой не использовались кванторы, являются свободными. Фактически, это означает, что если для какого-то набора значений свободных кортежных переменных при вычислении формул получено значение "истина", то эти значения кортежных переменных могут входить в результирующее отношение. Если же имя переменной использовано сразу после квантора при построении формул вида EXISTS var (F) или FORALL var (F) то здесь, и во всех формулах, где она использована, var - связанная переменная. При вычислении значения такой правильно построенной формулы используется не одно значение связанной переменной, а вся ее область определения.

Пусть СТУД1 и СТУД2 - две кортежные переменные, определенные на отношении СТУДЕНТЫ. Тогда, формула

EXISTS СТУД2(СТУД1.СТУД_СТИП>СТУД2.СТУД_СТИП)

для текущего кортежа переменной СТУД1 принимает значение "истина" только в том случае, если во всем отношении СТУДЕНТЫ найдется такой кортеж, связанный с переменной СТУД2, что значение его атрибута СТУД_СТИП удовлетворяет внутреннему условию сравнения.

Правильно построенная формула

FORALL СТУД2(СТУД1.СТУД_СТИП > СТУД2.СТУД_СТИП)

для текущего кортежа переменной СТУД1 принимает значение "истина" только в том случае, если для всех кортежей отношения СТУДЕНТЫ, связанных с переменной СТУД2. значения атрибута СТУД_СТИП удовлетворяют условию сравнения.

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

Целевой список строится из целевых элементов, каждый из которых может иметь следующий вид:

115