Copy to XI field Магазин, Продукция, Факт && проекция

Следующий пример проекции - это получение справочника ХЗ цен на продукцию:

useW2

сopy to ХЗ field Продукция, Цена

Х3  
Продукция   Цена  
Гидрокостюм Лыжи Лыжи Коньки  

Значительным неудобством в ХЗ является наличие одинаковых строк. В реляционной алгебре требуется, чтобы результат проекции не содержал одинаковых строк, однако практически такие СУБД, как dBASE, не обеспечивают этого. Правильным результатом проекции Х4 = W2[Продукция, Цена] является отношение

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

Пусть нам необходим список отделов учреждения. В базе данных имеются отношения Служащий (Фамилия, Отдел,...) и Технолог (Фамилия,0тдел,...). Проекция Служащий[0тдел] формирует полный список отделов, а Технолог[0тдел] может содержать меньше значений, если в некоторых отделах не работают технологи.

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

1. Условие вида Имя_атрибута <знак сравнения> Значение,

где допускаются знаки сравнения =,#,>,=>,<,<=. Например, Цена > 100.

2. Условие вида Имя_атрибута_1 <знак сравнения> Имя_ атрибута_2. Например, Факт > План.

Имена атрибутов должны содержаться в структуре исходного отношения. Алгебраическая запись выборки имеет вид

T=R[p],

где R - исходное отношение;

Т - результирующее отношение;

р - условие выборки.

В качестве примера получим значения Х5 = W 1 [Продукция = "Лыжи"]

В СУБД dBASE выборка реализуется командой copy сопциейfor,

например, use W1 copy to X6 for Факт => План

В команде copy условия выборки и проекции могут присутствовать одновременно, но атрибуты условия выборки должны включаться в условие проекции.

Операции объединения, пересечения и вычитания производятся над двумя исходными отношениями с одинаковой структурой. Точных аналогов этих операций в dBASE нет.

Обозначим исходные отношения через R1 и R2, а результирующее через Т.

Объединение Т = U(R1, R2) содержит строки, присутствующие либо в отношении R1, либо в R2.

ПересечениеТ = I(R1, R2) содержит строки, присутствующие в отношениях R1 и R2 одновременно.

Вычитание Т = M(R1, R2) содержит те строки из R 1, которые отсутствуют в R2.

Если справочник цен на продукцию Х4 необходимо дополнить новыми сведениями из отношения W3, то надо выполнить объединение

Х7
Продукция   Цена  
Лодка ка
Палатка
Лыжи
Коньки
Гидрокостюм

Х7 = U (Х4, W3).

W3
Продукция   Цена  
Лодка Палатка

В dBASE предусмотрена операция добавленияappend, которая для нашего примера реализуется командами

useX4

append from W3,

что приводит к добавлению в отношение Х4 всех строк из отношения W3. Отличия добавления от объединения создание результирующего отношения на месте исходного отношения и возможность появления одинаковых строк в результирующем отношении.

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

Имя_атрибута_1 <знак сравнения> Имя_атрибута_2,

где Имя_атрибута_1 находится в одном исходном отношении, а Имя_атрибута_2 - в другом. Будем использовать следующее обозначение операции соединения:

T=Rl[p]R2,

где R1 и R2 - исходные отношения,

Т - результирующее отношение, р - условие соединения.

Практически наиболее важный частный случай соединения называется натуральным соединением и имеет следующие особенности:

• знаком сравнения в условии соединения является "=",

• Имя_атрибута_1 и Имя_атрибута_2 должны совпадать, а точнее, содержать пересечение списков атрибутов исходных отношений,

• список атрибутов результирующего отношения образуется в результате объединения списков атрибутов исходных отношений.

Обозначение натурального соединения не содержит условия соединения и имеет вид Т = R1 * R2.

Если требуется сведения о продаже продукции из отношения W1 дополнить данными о ценах на продукцию из отношения Х, то задача решается с помощью соединения

   
Х8  
Магазин   Продукция   План   Факт   Продукция   Цена  
Динамо Динамо Спорттовары Спорттовары Гидрокостюм Лыжи Лыжи Коньки   1200 2000 1400 200 170 100   Гидрокостюм Лыжи Лыжи Коньки  

 

Первая строка из W1 и первая строка из Х7 удовлетворяют условию Продукция = Продукция, поэтому сцепляются. Остальные строки из Х7 не будут сцепляться с первой строкой из W1 (условие не соблюдается). Вторая строка из W1 при сравнении со всеми строками из Х7 сцепится только с третьей строкой и т. д. Если применять операцию натурального соединения, то в отношении Х8 будет отсутствовать второй столбец с именем Продукция.

В СУБД DBASE для проведения соединения необходимо использовать две области для исходных отношений:

SELECT 1

USE W1 && открытие отношения W1

SELECT 2

USE Х7 && открытие отношения Х7

SELECT 1

JOIN WITH Х7 TO X9 FOR Продукция=Х7->Продукция FIELDS Магазин, Продукция, Х7->Цена, План, Факт

Опция with называет второе исходное отношение, опция for содержит условие соединения, опция fields перечисляет имена атрибутов результирующего отношения. В приведенном примере выполнено натуральное соединение и передвинут столбец Цена.

В ряде случаев соединение дает некорректные результаты, например:

X10=W1*W2

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

1.6.1Х10
Магазин   Продукция   План   Факт   Цена   Компл  
Динамо Гидрокостюм     А1  
Динамо Лыжи     В23  
Динамо   Лыжи       С23  
Спорттовары Лыжи   В23
Спорттовары Лыжи   С23
Спорттовары Коньки     С2  
           

 

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

Натуральное соединение определено и в тех случаях, ког­да соединяемые отношения совпадают по структуре или не содержат общих атрибутов. Если структура отношений R и S одинакова, то R * S выполняет фактически пересечение I(R,S).

Когда отношения R и S не содержат общих атрибутов, счи­тается, что условие соединения выполнено для любой пары сопоставляемых строк отношений, и R * S сцепляет каждую строку из R со всеми строками из S.

Операция натурального соединения имеет ряд свойств, например коммутативность и ассоциативность.

Свойство коммутативности означает, что операции

1.6.1.1 X1=R*S и X2=S*R

порождают, в сущности, одно и то же отношение.

Свойство ассоциативности означает, что операция

Y1=(R*S)*T и операция Y2=R*(S*T)

дают одинаковый результат. Различия, безусловно, состоят в неодинаковом порядке строк XI и Х2 (Y1 и Y2 соответствен­но). Кроме того, промежуточные отношения при вычислении Y1 и Y2 могут иметь резко различающиеся размеры (число строк), хотя Y1 и Y2 содержат равное число строк.

Описание операции деления отношений начнем с примера. Пусть существует отношение Y(ФИО, ЯП), где для каждого программиста с фамилией ФИО указываются языки программи­рования ЯП, которые он знает.

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

X11 = Y[ ЯП = "Си" AND ЯП = "Фортран"]

(через AND обозначена логическая операция "и") будет безуспешной, так как в одной строке отношения нет информации о двух языках программирования сразу, и отношение X11 будет пустое.

Определим операцию, называемую "образ". В отношении Т(А,В) образом значения атрибута А является множество значе­ний атрибута В, и каждый элемент b этого множества образует вместе с а некоторую строку (или часть строки) отношения Т.

imB(a)={bl,b2,...,bk},

где im - знак операции "образ",

а - значение, образ которого вычисляется, В - имя атрибута для образа значения а, b1, b2,...,bk - значения атрибута В.

Стоящая перед нами задача решается путем вычисления обра­зов значений "Си" и "Фортран" и последующего пересечения най­денных образов.

im ФИО("Си") = {"Иванов","Петpoв» , «Семин»}

im ФИО(«Фортран») = {"Иванов","Семин","Яшин"}

im ФИО("Си")ÇФИО("Фортран")= {"Иванов","Семин")

Такая связка операций взятия образа и пересечения получен­ных множеств (количество значений, для которых вычисляется образ, может быть произвольным, а не 2, как в нашем примере) требуется достаточно часто, поэтому вводится специальная

Операция - деление.

Условимся, что существует отношение-делимое W(A,B) (в на­шем примере это Y) и отношение-делитель V(A). Для необходимого нам запроса отношение-делитель имеет вид;

Результатом операции деления является отношение Q(B), содержащее пересечение образов всех строк отношения-дели­теля V(A), вычисленных на основе отношения-делимого W(A,B).

Q = D (W,V).

где D - знак операции деления.

Результат деления XI 2 = D (Y,Z) содержит следующие значе­ния:

XI 2  
ФИО  
Иванов Семин  

В СУБД семейства DBASE отсутствует операция деления отношений, и для реализации деления отношений необходима специальная программа

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