Читайте также: |
|
NewTable.Append;
NewTable.FieldByName('ImDet').Value:=
DetTable.FieldByName('ImDet').Value;
NewTable.Post;
End;
{Навигация по таблицев Det}
DetTable.Next;
end;
{Завершение запроса, закрытие таблиц}
NewTable.Close;
PstsTable.Close;DogTable.Close;DetTable.Close;PstTable.Close;
В основе реляционной алгебры лежит идея о том, что поскольку отношение можно понимать как множество кортежей, то и средства манипулирования отношениями должны быть такими же, как традиционные теоретико–множественные операции, дополненные специфическими для баз данных операциями.
Расширенный начальный вариант алгебры, определенный Коддом, состоит из восьми алгебраических операций, которые делятся на два класса – теоретико–множественные операции и специальные реляционные операции.
В состав теоретико–множественных операций входят:
· объединение отношений;
· пересечение отношений;
· взятие разности отношений;
· декартово произведение отношений.
Специальные реляционные операции включают:
· проекцию отношения;
· соединение отношений;
· деление отношений;
· выборка или ограничение отношения.
Кроме того, в состав алгебры включается операция присваивания, позволяющая сохранить в базе данных результаты вычисления алгебраических выражений, и операция переименования атрибутов, дающая возможность корректно сформировать заголовок (схему) результирующего отношения:
· Операция переименования производит отношение, тело которого совпадает с телом операнда, но имена атрибутов изменены.
· Операция присваивания позволяет сохранить результат вычисления реляционного выражения в существующем отношении БД.
Ниже используются обозначения:
A,B,C... (возможно с индексами) - имена полей (атрибуты), причем считается, что для каждого имени однозначно определен тип данных (домен) и этот тип неструктурный;
r,s,t... (возможно с индексами) - переменные типа кортеж (запись), причем считается, что порядок полей в кортеже не существенен, т.е. кортежи с одинаковым множеством полей (и их значениями) одинаковы;
R,S,T... (возможно с индексами) - переменные типа отношение (файл, таблица), причем считается, что порядок кортежей в отношении не существенен и в отношении не может быть одинаковых кортежей, т.е. отношения с одинаковым множеством кортежей одинаковы.
Базовый набор отношений: отношения, содержащие один кортеж; базовые файлы определяются с помощью операции - (имя_поля: значение_поля,...)
Базовый набор операций над отношениями.
Ø Теоретико-множественные: Ç È - (объединение, пересечение и разность, соответственно). Операции применимы только к парам отношений, имеющих одинаковую структуру (схему отношения базы данных). Операция объединения по двум отношениям R и S строит новое отношение , которое включает все кортежи, входящие в отношения R и S ровно один раз. Операция пересечения по двум отношениям R и S строит новое отношение , которое включает все кортежи, одновременно входящие в отношения R и S. Операция разности по двум отношениям R и S строит новое отношение , которое включает все кортежи, входящие в отношение R и отсутствующие в отношении S.
Ø Естественное соединение R*S={r*s / rÎR, sÎS}, где операция соединения кортежей r и s применима только к парам кортежей, у которых одноименные поля имеют одинаковое значение. Результатом соединения таких кортежей r и s является кортеж, который содержит все поля (со своими значениями) из r и s (одноименные поля не дублируются). В частном случае, при отсуствии одноименных полей имеем операцию декартова произведения двух отношений.
ПРИМЕР.(A:1,B:2)*(B:2,C:3)=(A:1,B:2,C:3);
(A:1,B:2)*(C:3,D:4)=(A:1,B:2,C:3,D:4) - в случае отношений без одноименных полей, операция применима к каждой паре записей;
(A:1,B:2)*(B:3, D:4) - к такой паре записей операция не применима.
Ø Выборка [ B ] (R) = отношение состоящее из кортежей из R, удовлетворяющих условию B. Операция выборки применяется к отношению R и определяет результирующее отношение, который содержит только те записи из R, которые удовлетворяют условию B. Условие B строится как обычное логическое выражение - из имен полей и констант с помощью операций сравнения и логических операций.
Ø Переименование полей [ A1®B1,A2®B2,... ] (R). A1,A2,... должны быть именами полей файла R, а поля B1,B2,... должны иметь соответствующий тип. Результат операции будет содержать те же записи, что и файл R, но поля A1,A2,... будут соответственно переименованы на B1,B2,...ё Операция переименования часто используется перед выполнением теоретико!множественных операцийё
Ø Проекция [имя_поля,...] (R) = отношение, полученное из R, и состоящее из кортежей в которых удалены все поля, кроме перечисленных в операции. Операция проекции создает новое отношение S из отношения R, кортежи которого являются соответствующими подмножествами кортежей отношения -операнда, с последующим удалением из результата дубликатов записей.
Ø Деление R ¸ S. Операция применима, если все поля отношения-«делителя» S являются полями отношения-«делимого» R; пусть A1,A2,... - поля отношения S, а A1,A2,...B1,B2,... - поля отношения R. Результат деления будет отношением с полями B1,B2,...
R ¸ S={t: такие, что (t*s)ÎR для любой записи s из S}.
Отметим, что в этом выражении записи t и s не имеют общих полей, поэтому операция * это просто декартово произведение записей.
ПРИМЕР. Пусть R - файл с полями (A,B), S - файл с полем (A), T=(R ¸ S) - будет файлом с полем (B):
2. Дан запрос на языке реляционной алгебры
Ø Сформулировать на естественном языке постановку задачи, специфицированной этим запросом
Ø Составить две программы решения этой задачи [1]:
o Select оператором на языке SQL
o PASCAL(С++) – программу с использованием средств обработки баз данных
1.([KPst][AdrPst=’КАЗАНЬ’]Psts)-
([KPst][DtN>’01.01.2002’]Dog)
======================================================
Выражение, задающее данный запрос, можно представить в виде формулы , где
([KPst][AdrPst=’КАЗАНЬ’]Psts)
([KPst][DtN>’01.01.2002’]Dog)
Из выражений А и В следует, что множества кортежей для каждого случая получаются последовательным выполнением операций выборки по условию и проекции.
Результатом выполнения запроса А является множество кортежей, описывающих коды поставщиков с Казанскими адресами. Заметим, что проекция строится по ключевому полю, поэтому в результате выполнения операции проекции не получается кортежей с одинаковыми значениями поля KPst.
Во втором запросе поле KPst является только частью ключа в таблице договоров (ключ (KPst,KDet)), и следовательно операция проекции по KPst может дать кортежи с повторяющимися значениями по этому полю. Разделим множество всех поставщиков на три класса по дате начала договора:
1. Поставщики, все договора которых были заключены до ’02.01.2002’
2. Поставщики, все договора которых были заключены после ’01.01.2002’
3. Поставщики, которые имеют договора, которые были заключены как до ’02.01.2002’, так и после ’01.01.2002’
Первой в выражении выполняется операция выборки, которая для первого класса формирует пустое множество кортежей, для второго и третьего класса может быть сформировано непустое множество кортежей. Выполнение операции проекции по полю KPst с исключением дубликатов приводит к множеству кортежей, которые перечисляют коды поставщиков, входящих в группу 2 и 3. Поэтому после выполнения операции остается множество поставщиков (кодов), которые связаны с группой 1.
Поэтому правильная интерпретация запроса связана с квантором всеобщности:
Дата добавления: 2015-08-13; просмотров: 61 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
WHERE NOT EXISTS (SELECT * FROM DOG | | | Показатели платёжеспособности (ликвидности) предприятия |