Квантор существования
Целевой список и определяющее выражение
Целевой список – это список в выражении реляционного исчисления, определяющий атрибуты таблицы решения.
Определяющее выражение – это условие в выражении реляционного исчисления, ограничивающее вхождение элементов в таблицу решения.
Решением каждого запроса в реляционном исчислении является реляционная таблица, которая задается целевым списком и определяющим выражением. Целевой список определяет атрибуты таблицы решения. На основе определяющего выражения отбираются значения из базы данных, которые войдут в таблицу решения. Объясним, как они работают.
В рассмотренном примере целевым списком был r.SalpersName. Другими словами, таблица решения имеет только один атрибут – имя торгового агента. Значения, входящие в таблицу решения, взяты из тех строк, которые удовлетворяют определяющему выражению:
r IN SalesPerson AND r.Office = ‘Ярославль’
В рассмотренном примере целевой список состоит из одного атрибута. Однако, в общем случае, целевой список может состоять из нескольких атрибутов. Атрибуты списка отделяются друг от друга запятыми. Например,
{r.SalpersId, r.SalpersName, r.ManagerId : r IN SalesPerson AND r.Office = ‘Ярославль’}
Более того, можно выбрать любое подмножество из этих атрибутов.
Из данного объяснения можно понять, как операции выбора и проектирования реляционной алгебры поддерживаются в реляционном исчислении. Объединение, пересечение, разность и произведение также легко можно вывести из конструкций реляционного исчисления, которые мы обсудили к настоящему моменту. В исчислении не используются пошаговые процедуры алгебры. Поэтому операция присвоения здесь не нужна. Остались только две операции реляционной алгебры (соединения и деления), для которых требуются кванторы: квантор существования для соединения и квантор всеобщности для деления.
Квантор существования – это выражение реляционного исчисления, означающее существование хотя бы одной строки, удовлетворяющей условию.
Квантор обозначает количество чего-либо. Квантор существования означает, что существует хотя бы один экземпляр определенного типа вещей. В реляционном исчислении квантор существования используется для задания условия того, что определенный тип строк в таблице существует.
Рассмотрим пример запроса:
Перечислить названия фирм-клиентов, покупавших товар 3333.
Эта таблица состоит из одного столбца и целевым списком является
r.CustName,
где r - строка из таблицы Customer.
Данные о продажах хранятся в таблице Sale, где код товара ProdId = 3333. Таким образом, условие таково: существует хотя бы одна строка таблицы Sale, содержащая Id (идентификатор клиента) и код товара 3333. Это формулируется следующим образом:
Существует s IN Sale
(s.CustId = r.CustId and s.ProdId = 3333)
Такое выражение читается: «Существует строка s в таблице Sale такая, что s.CustId = r.CustId и s.ProdId = 3333».
Полное решение в реляционном исчислении выглядит так:
(r.CustName : r IN Customer AND exists s IN Sale
(s.CustId = r.CustId and s.ProdId = 3333))
Оно описывает таблицу, состоящую из одного столбца и содержащую названия клиентов, взятых из строк таблицы Customer. Данное название помещается в таблицу решения, если его строка r удовлетворяет условию после двоеточия. В реляционной алгебре для выполнения этого запроса требуется соединение. Рассмотрим более сложный запрос, требующий двух соединений.
Запрос: Кто покупал настольные лампы?
Рассмотрим три таблицы.
Customer (Клиент) Sale (Продажи) Product (Товары)
CustId | CustName | CustId | ProdId | ProdId | ProdName | ||
Иванов | Свитер | ||||||
Петров | Настольная лампа | ||||||
Сидоров | Блокнот | ||||||
Перчатки | |||||||
Этот запрос используется для иллюстрации соединения при описании реляционной алгебры. Решение в реляционном исчислении выглядит так:
(r.CustName : r IN Customer AND there exists s IN Sale AND exists t IN Product)
(s.CustId = r.CustId AND
s.ProdId = t.ProdId AND
t.ProdName = ‘Настольная лампа’)