Деление


Дата добавления: 2014-01-11; просмотров: 2; лекция была полезна: 0 студентам(у); не полезна: 0 студентам(у).
Опубликованный материал нарушает авторские права? сообщите нам...

Определение оператора деления. Пусть отношения А и В имеют заголовки { X1, Х2, ... , Хm } и { Yl, Y2, ... , Yn } соответственно (т.е. заголовки отношений А и В не пересекаются). Пусть также отношение С имеет следующий заголовок.

{ XI, Х2, ... , Xm, Yl, Y2, ... , Yn }

(Иначе говоря, заголовок отношения С является объединением заголовков отношений А и В.) Далее будем рассматривать множества { X1, Х2, ... , Хm } и { Yl, Y2, , Yn } как составные атрибуты X и Y соответственно. Тогда результатом деленияотношения А на отношение B по отношению С (что записывается как A DIVIDEBY В PER С, где отношение А представляет собой делимое, отношение В — делитель, а отношение С — "посредник") называется отношение с заголовком {X} и телом, содержащим множество всех кортежей вида {Х:х}, таких, что кортеж вида {Х:х, Y:y} принадлежит отношению В для всех кортежей вида {Y:y}, принадлежащих отношению В. Нестрого это можно сформулировать так: результат содержит такие Х-значения из отношения А, для которых соответствующие Y-значения из отношения С включают все Y-значения из отношения В.

На рис. 8 показаны некоторые простые примеры операции деления. В каждом случае делимое (отношение DEND) — это проекция текущего , значения переменной-отношения S по атрибуту S#, посредник (MED) — это проекция текущего значения переменной-отношения SP по атрибутам S# и P#, а три делителя (отношения DOR)— такие, как показано на рисунке. В частности рассмотрим последний пример, в котором делителем является отношение, содержащее номера всех известных в данный момент деталей. В результате, получим номера поставщиков, поставляющих все типы этих деталей. Как видно из примера, оператор DIVIDEBY полезен именно для запросов такого рода. Более того, если запрос на обычном языке включает слово "все" ("определить поставщиков всех типов деталей"), то почти наверняка понадобится использовать операцию деления. Тем не менее, следует отметить, что подобны запросы удобнее записывать в терминах реляционных сравнений.