Особенности теоретико-множественных операций реляционной

advertisement
Мат.методы хранения данных. Лекция 5
Особенности теоретико-множественных операций реляционной
алгебры (дополнительные операторы продолжение)
Операция обобщения SUMMARIZE (продолжение)
Пусть А — исходное отношение c заголовком (A1, A2, …, An), а отношение B – проекция
отношения А на атрибуты А1, А2, ..., Аk.
Результатом операции обобщения SUMMARIZE отношения A является отношение R,
заголовок которого (A1, A2, …, Ak, Z), получается объединением заголовка (A1, A2, …, Ak)
отношения B и добавляемого атрибута Z. Тело отношения R состоит из кортежей t вида
(a1, a2, …, ak, z), где ∈ B. Значение z нового атрибута Z, есть результат вычисления
значения выражения <exp> по всем кортежам отношения А, которые имеют те же значения для атрибутов А1, А2, ... , Аk, что и кортеж t.
Синтаксис
SUMMARIZE A PER B ADD <exp> AS Z
Здесь A — исходное отношение, B – проекция отношения А, < exp > – допустимое
скалярное выражение, Z – имя добавляемого атрибута.
Атрибута Z не должно быть в списке атрибутов отношения A и в выражении <exp>.
Поскольку проецирование, как правило, приводит к сокращению количества кортежей
по отношению к исходному отношению (удаляются кортежи c одинаковыми значениями
атрибутов (a1, a2, …, ak)), то можно считать, что происходит группирование кортежей исходного отношения: одному кортежу отношения B соответствует один или более (если
было дублирование при проецировании) кортежей исходного отношения A.
Выражение< exp > частот называют обобщающим выражением.
Кардинальность результата равна кардинальности отношения В, а степень результата
равна степени отношения В плюс единица. Типом переменной Z в этом случае будет
тип выражения exp.
Пример 5.1.
SUMMARIZE SP PER SP [ P# ] ADD SUM ( QTY ) AS TOTQTY
SP
S#
P#
QTY
S1
S1
S1
S1
S1
S1
S2
S2
S3
S4
S4
S4
P1
P2
P3
P4
P5
P6
P1
P2
P2
P2
P4
P5
300
200
400
200
100
100
300
400
200
200
300
400
P#
TOTQTY
P1
P2
P3
P4
P5
P6
600
1000
400
500
500
100
Таблица 5.1. Пример выполнения операции SUMMARIZE
В результате его вычисления создается отношение с заголовком {Р#, TOTQTY }, содержащее один кортеж для каждого значения атрибута Р# в проекции PROJECT SP[Р#]. Каждый из этих кортежей содержит значение атрибута Р# и соответствующее общее количество деталей (Таблица 5.1). Т.е. исходное отношение Р "перегруппировано" в множество групп кортежей (по одной группе для каждого уникального значения атрибута Р#),
после чего для каждой полученной группы сгенерирован один кортеж, помещаемый в
окончательный результат.
Пример 5.2.
Подсчитать количество поставок деталей разными поставщиками из каждого города
SUMMARIZE (P JOIN SP) PER [CITY] ADD COUNT AS NSP
Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана.
1
Мат.методы хранения данных. Лекция 5
SUMMARIZE (P JOIN SP) PER [CITY] ADD COUNT AS NSP
P
P#
P1
P2
P3
P4
P5
P6
PNAME
Nut
Bolt
Screw
Screw
Cam
Cog
COLOR
Red
Green
Blue
Red
Blue
Red
WEIGHT
12.0
17.0
17.0
14.0
12.0
19.0
CITY
London
Paris
Rome
London
Paris
London
Sp
S#
S1
S1
S1
S1
S1
S1
S2
S2
S3
S4
S4
S4
P#
P1
P2
P3
P4
P5
P6
P1
P2
P2
P2
P4
P5
QTY
300
200
400
200
100
100
300
400
200
200
300
400
№
1
1
1
2
2
3
4
3
4
5
5
6
Результат вычисления:
CITY
NSP
London 5
Paris
6
Rome
1
Таблица 5.2. Пример выполнения операции SUMMARIZE (P JOIN SP) PER [CITY] ADD COUNT
AS NSP
Результат содержит по одному кортежу для каждого из трех упоминаемых в отношении
Р городов (Лондона, Парижа и Рима), причем в каждом кортеже показано количество
поставок деталей из соответствующего города.
Пример 5.3.
Подсчитать соответствующее количество общее и среднее количество деталей каждого
типа.
В операции обобщения SUMMARIZE после ключевого слова ADD можно записать список
обобщающих выражений и имен атрибутов. Такую операцию можно назвать множественной операцией обобщения.
SUMMARIZE SP PER [P#] ADD SUM (QTY) AS TOTQTY, AVG (QTY) AS AVGQTY
Результат содержит один кортеж для каждого значения атрибута Р# в проекции PROJECT
SP[Р#]. Каждый из этих кортежей содержит значение атрибута Р#, соответствующее
общее и среднее количество деталей. (Таблица 5.3)
SP
S#
S1
S1
S1
S1
S1
S1
S2
S2
S3
S4
S4
S4
P# TOTQTY AVGQTY
P#
P1
P2
P3
P4
P5
P6
P1
P2
P2
P2
P4
P5
QTY
300
200
400
200
100
100
300
400
200
200
300
400
P1
P2
P3
P4
P5
P6
600
1000
400
500
500
100
300
250
400
250
250
100
Таблица 5.3. Пример выполнения операции SUMMARIZE SP PER [P#] ADD SUM (QTY) AS
TOTQTY, AVG (QTY) AS AVGQTY
Общая форма операции обобщения имеет следующий вид.
SUMMARIZE < реляционное выражение> PER <реляционное выражение>
ADD <список добавляемых обобщений>
Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана.
2
Мат.методы хранения данных. Лекция 5
Каждый элемент из списка до6авляемых о6о6щений имеет следующий вид :
<тип обобщения> [(<скалярное выражение>)] AS <имя атри6ута>
Элементы в списке отделяются друг от друга запятыми.
Чаще всего параметр <тип обобщений> задает одну из функций COUNT, SUM, AVG, MIN,
MAX, ALL, ANY, COUNTD, SUMD и AVGD
Буква "D" (distinct — различный) в названии функций COUNTD, SUMD и AVGD означает
следующее: "перед выполнением этой обобщающей операции удалить все избыточные
повторяющиеся значения".
Параметр <скалярное выражение> может содержать ссылки на атрибуты отношения,
которое определяется параметром <реляционное выражение>, размещенным непосредственно за ключевым словом SUMMARISE.
Замечание. Параметр <скалярное выраженне> (вместе с квадратными скобками) можно
опустить лишь в том случае, если параметр <тип о6общення> имеет значение COUNT.
Параметр <добавляемое о6о6щенне> — это не скалярное значение; он является операндом операции SUMMARISE и имеет смысл только в контексте операции обобщения.
Пример 5.4.
Подсчитать количество общее количество всех деталей.
SUMMARIZE SP PER SP [ ] ADD SUM ( QTY ) AS GRANDTOTAL
В нем группирование и подведение итогов производятся для отношения, которое вообще не имеет атрибутов. Пусть sp — это текущее значение базовой переменнойотношения SP. Предположим, что отношение SP содержит по крайней мере один кортеж. Тогда все кортежи отношения SP будут иметь "одинаковые значения" по пустому
множеству атрибутов, а именно— по "0-кортежу". Таким образом, в этом контексте они
образуют единственную группу, для которой в конечном результате будет построен
всего один кортеж. Т.е. обобщающая функция вычисляется только один раз и для всего
отношения SP в целом. Следовательно, вычисление представленного выше выражения
SUMMARIZE даст в результате отношение с одним атрибутом (с именем GRANDTOTAL) и
одним кортежем, причем единственное скалярное значение в единственном результирующем кортеже является общим итогом по всем значениям атрибута QTY в исходном
отношении SP.
отношение SP
S#
P#
QTY
S1
S1
S1
S1
S1
S1
S2
S2
S3
S4
S4
S4
P1
P2
P3
P4
P5
P6
P1
P2
P2
P2
P4
P5
300
200
400
200
100
100
300
400
200
200
300
400
GRANDTOTAL
3100
Таблица 5.4. Пример выполнения операции SUMMARIZE SP PER SP [ ] ADD SUM ( QTY ) AS
GRANDTOTAL
Если исходное отношение A совсем не имеет кортежей, то нет и групп, а следовательно, нет и результирующих кортежей, т.е. результирующее отношение также будет пустым. Однако операция SUMMARISE "будет работать" ,т.е. будет возвращать корректное
значение, а именно — нуль, даже если отношение A пустое .
Транзитивное замыкание
Пусть А — произвольное бинарное отношение с атрибутами X и Y, принадлежащими одному типу Т. Тогда транзитивным замыканием отношения А (что записывается как
Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана.
3
Мат.методы хранения данных. Лекция 5
TCLOSE А) называется отношение А+, заголовок которого такой же, как заголовок отношения А, а тело является супермножеством отношения А.
Супермножество отношения А определяется следующим образом. Кортеж { Х:х, Y:y }
принадлежит отношению А+ тогда и только тогда, когда он принадлежит отношению А
или когда существует последовательность значений z1, z2, ... , zn (принадлежащих типу Т), такая, что все кортежи { Х:х, Y:z1 }, { Х:z1, Y:z2 }, ... , { Х:zn, Y:y } принадлежат отношению А. Иначе говоря, кортеж (х,у) принадлежит отношению А+ только тогда,
когда (нестрого говоря) в представляющем отношение А графе есть линия, соединяющая точку х с точкой у. Тело отношения А всегда содержится в теле отношения А+ как
подмножество.
Рассмотрим отношение R, содержащее информацию о людях, родившихся в некоторой
местности. Эта отношение, как правило, содержит о персоне и сведения о его родителях. Общие сведения о персоне содержат номер записи в отношении R, ФИО и др. сведения. Номер записи служит первичным ключом. В отношение могут иметься записи о
персонах, для родителей которых сведения о номере записи в отношении R отсутствуют.
Построим новое отношение R1, как проекцию отношения R номер записи персоны, номер записи родителя. Транзитивное замыкание отношение R1 позволит определить всех
родственников и построить генеалогическое дерево для выбранной персоны.
Группирование и разгруппирование
Поскольку значениями атрибутов отношений могут быть неявно другие отношения, было бы желательным наличие дополнительных реляционных операторов, называемых
операторами группирования и разгруппирования.
Операция группирования.
Рассмотрим выражение SP GROUP (P#, QTY) AS PQ. Результат показан в таблице 5.5..
SPQ
отношение SP
S#
S#
P#
QTY
S1
S1
P1
300
S1
P2
200
S1
P3
400
S1
P4
200
S1
P5
100
S1
P6
100
S2
P1
300
S2
P2
400
S3
P2
200
S4
P2
200
S4
P4
300
S4
P5
400
PQ
P#
QTY
P1
P2
P3
P4
P5
P6
300
200
400
200
100
100
P#
QTY
P1
P2
300
400
S3
P#
QTY
P2
200
S4
P#
QTY
P2
P4
P5
200
300 .
400
S2
Таблица 5.5. Группирование отношения SР по атрибуту S#
Выражение SP GROUP (P#, QTY) AS PQ можно прочесть как "сгруппировать отношение SР
по атрибуту S#, поскольку атрибут S# является единственным атрибутом отношения SР,
не упомянутым в предложении GROUP. В результате получится таблица с заголовком
{S# , PQ}, где атрибут S# совпадает со одноименным атрибутом отношения SP. Атрибут
PQ имеет тип отношение, его значениями являются отношения, с атрибутами Р# и QTY,(
PQ :RELATION {P#, QTY}).
Таблица содержит ровно по одному кортежу t для всех различных значений атрибута
S# исходного отношения SР (и никаких других кортежей). Каждый кортеж t t=(s,pq) содержит соответствующее значение Si атрибута S# (s), а также значение атрибута PQ (pq), ,
полученное следующим образом.
Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана.
4
Мат.методы хранения данных. Лекция 5
• Каждый кортеж отношения SP заменяется кортежем x, в котором компоненты Р# и
QTY "упакованы" в один компонент y. x=(s ,y) ;y= (p,q);
• Компоненты y всех кортежей x, значение S# которых равно s, "группируются" в отношение pq, и таким образом получается результирующий кортеж, в котором значение
S# равно s, а значение PQ равно pq.
Операция разгруппирования.
Пусть SPQ — это таблица из предыдущего примера (табл. 5.5). Тогда выражение
SPQ UNGROUP PQ возвращает нас к отношению SP.
Результатом операции UNGROUP является отношение, заголовок которого {S#, P, QTY}
состоит из атрибутов Р# и QTY (полученных из атрибута PQ), а также из всех остальных
атрибутов отношения SPQ (в нашем случае это только атрибут S#).
Тело отношения состоит из кортежей t, каждый кортеж t содержит соответствующее
значение Si атрибута S#, и значения р и q атрибутов Р# и QTY (t=(s,p,q)), которые получены следующим образом:
• Каждый кортеж SPQ заменяется множеством кортежей, которое содержит по одному
кортежу x для каждого кортежа из значения отношения PQ. Каждый кортеж x содержит
компонент s, равный компоненту S# рассматриваемого кортежа SРQ, и компонент у,
равный некоторому кортежу из компонента PQ того же кортежа SРQ. x=(s ,y); y= (pq);
• Компоненты y каждого кортежа x, значение S# которых равно s, "разворачиваются"
в отдельные компоненты p и q (значения атрибутов Р# и QTY). В результате получается
кортеж, значение компонента S# которого равно s, значение компонента Р# равно р и
значение компонента QTY равно q. t=(s,p,q)
Таким образом, в результате разгруппирования получилось отношение SP.
|
Обратимость операций группирования и разгруппирования
Если определенным образом сгруппировать некоторое отношение r, то всегда будет
существовать обратная операция разгруппирования, позволяющая вернуться к отношению r. Но, если сначала разгруппировать некоторое отношение r, то обратная операция
группирования, возвращающая нас к отношению r, будет существовать не всегда.
Пример 5.5.
Сначала выполним разгруппирование отношения R1 (Таблица 5.6.) В качестве результата получим отношения R2. Теперь, если сгруппировать отношение R2 по атрибуту А, в
результате получится не отношение R1, а отношение R3.
R1 A
RVX
1
X
a
b
1
X
a
c
R2 A
X
1
1
1
a
b
c
R3
A
RVX
1
X
a
b
c
Таблица 5.6. Операции разгруппирования и группирования необязательно являются
обратимыми
В отношении R3 атрибут RVX (обязательно) функционально зависит от А, задавая тем
самым потенциальный ключ. Если теперь разгруппировать отношение R3, можно снова
вернуться к отношению R2, а отношение R2, очевидно, может быть сгруппировано так,
чтобы в результате получилось отношение R3. Таким образом, для этой пары отношений операции группирования и разгруппирования действительно являются обратными.
В общем случае решающим моментом в вопросе обратимости операции разгруппирования является функциональная зависимость. В действительности для отношения r с атрибутом, RVX принимающим в качестве значений отношения, операция разгруппироваВиноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана.
5
Мат.методы хранения данных. Лекция 5
ния (относительно атрибута RVX ) обратима тогда и только тогда, когда выполнены два
следующих условия:
1. Ни один кортеж отношения r не принимает в качестве значения атрибута RVX
пустое отношение.
2. Атрибут RVX функционально зависит от комбинации всех остальных атрибутов
отношения r. Иначе говоря, у отношения r должен быть потенциальный ключ, не
содержащий атрибут RVX как компонентов.
[Функциональная зависимость (functional dependence или functional dependency (FD) в англоязычной литературе) является связью типа "многие к одному" между множествами атрибутов внутри данной переменнойотношения. Подробно - лекция 6.]
Реляционное исчисление
В основе исчисления лежит понятие переменной с определенной для нее областью допустимых значений и понятие правильно построенной формулы, опирающейся на переменные, предикаты и кванторы.
В зависимости от того, что является областью определения переменной, различают исчисление кортежей и исчисление доменов. В исчислении кортежей областями определения переменных являются тела отношений БД, т. е. допустимым значением каждой
переменной является кортеж тела некоторого отношения. В исчислении доменов областями определения переменных являются домены, на которых определены атрибуты отношений БД, т. е. допустимым значением каждой переменной является значение некоторого домена.
Понятие реляционного исчисления, т.е. специального применения исчисления предикатов в реляционных БД, впервые было предложено Коддом.
Кодд представил язык, основанный непосредственно на реляционном исчислении и названный "подъязык данных ALPHA". Сам язык ALPHA никогда не был реализован, однако
этот язык оказал заметное влияние на построение языка QUEL, который был реализован и некоторое время серьезно конкурировал с языком SQL.
Исчисление кортежей
Кортежная переменная
Для определения кортежной переменной необходимо указать ее область определения,
т.е. указать некоторое отношение. Для этого используется конструкция
RANGEVAR <имя переменной кортежа> RANGES OVER <список реляционных выражений>;
Примеры определения переменных кортежей (выраженных в контексте БД поставщиков
и деталей).
1.
RANGEVAR SX
RANGES OVER S ;
2.
RANGEVAR SY
RANGES OVER S ;
3.
RANGEVAR SPX RANGES OVER SP ;
4.
RANGEVAR SPY RANGES OVER SP ;
5.
RANGEVAR PX
RANGES OVER P ;
6. RANGEVAR SU RANGES OVER (SX WHERE SX.CITY='London') ,
(SX WHERE EXISTS SPX (SPX.S#=SX.S# AND SPX.P#=P1) );
Переменная кортежа SU из примера 6. определена на объединении множества кортежей
поставщиков, находящихся в Лондоне, и множества кортежей поставщиков детали с
номером 'Р1'. В подобных определениях переменных, построенных на объединении отношений, объединяемые отношения должны быть совместимы по типу. В определении
переменной кортежа SU используются переменные кортежей SХ и SРХ.
Правильно построенные формулы
Правильно построенная формула (Well-Formed Formula, WFF) служит для выражения
условий, накладываемых на кортежные переменные.
Понятие правильно построенной формулы можно ввести индуктивно.
1. Базис индукции. Правильно построенной формулой считают любую константу
и любое скалярное значение атрибута.
Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана.
6
Мат.методы хранения данных. Лекция 5
2. Индуктивный переход. Если Ф1,Ф2 – правильно построенные формулы, а
comp – операция сравнение, то выражение (Ф1 comp Ф2) – есть правильно построенная формула, которая является простым сравнением.
Если Comp_Ф простое сравнение, то NOT Comp_Ф, Comp_Ф AND Ф1, Comp_Ф OR Ф1 и
IF Comp_Ф THEN Ф1 являются правильно построенными формулами.
Если Ф1 – это правильно построенная формула, в которой участвует переменная var, то EXISTS var (Ф1) и FORALL var (Ф1) являются правильно построенными
формулами, где EXISTS – квантор существования, FORALL квантор всеобщности.
3. Замыкание. Никаких других правильно построенных формул, кроме определенных выше, не существует.
Основой WFF являются простые условия, представляющие собой операции сравнения
скалярных значений (значений атрибутов переменных или литерально заданных констант). Например, конструкции
СТУДЕНТ.НОМЕР_Л_Д = 1234 и S.S# = SP.S#
являются простыми условиями. Первое условие принимает значение true в том и только
в том случае, когда значение атрибута НОМЕР_Л_Д кортежной переменной СТУДЕНТ равно 1234. Второе условие принимает значение true в том и только в том случае, когда
значения атрибутов S# переменных S и SP совпадают.
По определению, простое сравнение является WFF, а WFF, заключенная в круглые
скобки, представляет собой простое сравнение.
Более сложные варианты WFF строятся с помощью логических связок NOT, AND, OR и
IF ... THEN с учетом обычных приоритетов операций (NOT > AND > OR) и возможности
расстановки скобок.
Пример 5.6.Правильно построенной является следующая формула:
IF СТУДЕНТ.ФИО = ‘Гришин Г. Г.’
THEN (СТУДЕНТ.НОМЕР_Л_Д >= 1235 AND СТУДЕНТ.ГРУППА=У-11)
Эта формула будет принимать значение true для следующих значений кортежной переменной СТУДЕНТ:
Номер л.д.
1232
1233
1234
1235
ФИО
Алексеев А. А.
Борисов Б. Б.
Васькин В.В.
Гришин Г. Г
Группа
И-12
И-12
И-12
У-11
Специальность
ИС
ИС
ИС
Сист. Управ.
Таблица 5.7.
Осмыслим результат.
Конструкция IF ... THEN — это импликация x⇒y. Импликация принимает значение ЛОЖЬ
только в одном случае: x=ИСТИНА, а y=ЛОЖЬ.
Выражение x=« СТУДЕНТ.ФИО = ‘Гришин Г. Г.’» принимает значение ИСТИНА только в
одном случае, в последней строке (кортеже). В этой же строке (кортеже) выражение y=
«СТУДЕНТ.НОМЕР_Л_Д >= 1235 AND СТУДЕНТ.ГРУППА=У-11» также имеет значение ИСТИНА.
Импликация x⇒y принимает значение ИСТИНА. Во всех остальных строках (кортежах)
выражение x=« СТУДЕНТ.ФИО = ‘Гришин Г. Г.’» принимает значение ЛОЖЬ, и следовательно, импликация x⇒y принимает значение ИСТИНА.
Необходим способ реализации системы, которая сможет по заданной WFF при существующем состоянии БД произвести такой результат. Очевидно, можно просмотреть в некотором порядке область определения переменной и к каждому очередному кортежу
применить условие. Результатом будет то множество кортежей, для которых при вычислении условия производится значение true.
Результат эквивалентен выполнению алгебраической операции
СТУДЕНТ WHERE (NOT (СТУДЕНТ.ФИО=‘Гришин Г.Г.’) OR
(СТУДЕНТ.НОМЕР_Л_Д >=1235 AND СТУДЕНТ.ГРУППА=У-11) )
над отношением, тело которого представляет собой область определения кортежной
переменной. Здесь использовано тождество x ⇒ y ≡ x ∨ y
Будем считать, что все формулы являются синтаксически правильными.
Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана.
7
Мат.методы хранения данных. Лекция 5
Кванторы. Свободные и связанные переменные кортежей
Существует два квантора: EXISTS и FORALL. Квантор EXISTS называют квантором существования, а FORALL — квантором всеобщности. Допускается построение WFF с помощью кванторов существования (EXISTS) и всеобщности (FORALL). Если Ф1 – это WFF, в
которой участвует переменная var, то конструкции EXISTS var (Ф1) и FORALL var (Ф1)
представляют собой WFF. По определению, формула EXISTS var (Ф1) принимает значение true в том и только в том случае, если в области определения переменной var найдется хотя бы одно значение (кортеж), для которого WFF Ф1 принимает значение true.
Формула FORALL var (Ф1) принимает значение true, если для всех значений переменной
var из ее области определения WFF Ф1 принимает значение true.
Переменные, входящие в WFF, могут быть свободными или связанными. По определению, все переменные, входящие в WFF, при построении которой не использовались
кванторы, являются свободными. Фактически, это означает, что если для какого-то
набора значений свободных кортежных переменных при вычислении WFF получено
значение true, то эти значения кортежных переменных могут входить в результирующее отношение. Если же имя переменной использовано сразу после квантора при построении WFF вида EXISTS var (Ф1) или FORALL var (Ф1), то в этой WFF и во всех WFF,
построенных с ее участием, var является связанной переменной. Это означает, что
такая переменная не видна за пределами минимальной WFF, связавшей эту переменную. При вычислении значения такой WFF используется не одно значение связанной
переменной, а вся область ее определения.
Примеры формул , содержащих свободные и связанные переменные кортежей.
•
Простые сравнения
o
o
o
SX.S# = SPX.S#
SPX.P#≠ PX.P#
SX.S# = S1
Здесь все ссылки на переменные SХ, РХ и SРХ являются свободными.
•
Логические выражения из простых сравнений
o
o
PX.WEIGHT<15.5 OR PX.CITY = 'Rome'
NOT ( SX.CITY = 'London' )
Здесь также все ссылки на переменные SХ и РХ являются свободными.
• Формулы с кванторами
o
o
EXISTS SPX (SPX.S#=SX.S# AND SPX.P#=P2)
FORALL PX (PX.COLOR=Red) )
В этих примерах ссылки на переменные SРХ и РХ являются связанными, а ссылка на переменную SХ является свободной.
Если выражение р — формула , в которой переменная V свободна, то выражения
EXISTS V(p) и FORALL V(p) также являются допустимыми формулами , но переменная V в
них обеих будет связанной. Первая формула означает следующее: "Существует по
крайней мере одно значение переменной V, такое, что вычисление формулы р дает
для него значение истина". Вторая формула означает следующее: "Для всех значений переменной V вычисление формулы р дает значение истина"". Предположим, например, что переменная V изменяется на множестве "Студенты МГТУ", и предположим
также, что выражение р — следующая формула : "V — женщина". Тогда выражение EXISTS V(р) будет допустимой формулой , имеющей значение истина (True); выражение
FORALL V(р) также будет допустимой формулой , но вычисление его значения будет давать значение ложь (False).
Квантор существования EXISTS.
EXISTS SPX ( SPX.S#=SX.S# AND SPX.P#=P2 )
Из приведенных ранее рассуждений следует, что эта формула может быть прочитана
следующим образом.
В текущем значении переменной-отношения SР существует кортеж (скажем, SРХ), такой, для которого значение атрибута S# в этом кортеже равно значению атрибута SХ.
S# (какое бы оно ни было), а значение атрибута Р# в кортеже SРХ равно 'Р2'.
Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана.
8
Мат.методы хранения данных. Лекция 5
Каждая ссылка на переменную SРХ в этом примере является связанной. Единственная
ссылка на переменную SХ свободна.
Формально квантор существования EXISTS определяется как повторение операции OR
(ИЛИ). Другими словами, если r — это отношение с кортежами t1, t2, ... , tm, V — это
переменная кортежа, изменяющаяся на данном отношении, и р(V) — это формула , в
которой переменная V используется как свободная переменная, то формула вида
EXISTS V ( p ( V ) )
равносильна следующей формуле .
false OR p ( t1 ) OR ... OR p ( tm )
В частности, обратите внимание, что если отношение R пустое (т.е. t=0), то результатом вычисления данного выражения будет значение ложь.
Пример 5.7. Рассмотрим отношение R, содержащее следующие кортежи.
( 1, 2, 3 ) ( 1, 2, 4 ) ( 1, 3, 4 )
Для простоты предположим, что три атрибута, идущие по порядку слева направо, имеют имена А, В и С соответственно и каждый из этих атрибутов имеет тип INTEGER. Тогда
приведенные ниже выражения будут иметь указанные значения.
EXISTS V ( V.C > 1 )
: true
EXISTS V ( V.B > 3 )
: false
EXISTS V ( V.A > 1 OR V.C = 4 )
: true
Квантор всеобщности FORALL.
FORALL PX (PX.COLOR = Red)
Эта формула может быть прочитана следующим образом.
В текущем значении переменной-отношения Р для всех кортежей РХ значение их атрибута COLOR равно 'Red '.
Обе ссылки на переменную РХ в этом примере связаны.
Подобно тому, как квантор EXISTS был определен как повторение операции ОR, квантор существования FORALL определяется как повторяющаяся операция AND (И). Формула вида
FORALL V ( p ( V ) )
равносильна следующей формуле .
true AND p ( t1 ) AND ... AND p ( tm )
В частности, обратите внимание, что если отношение r пустое, то результатом вычисления данного выражения будет значение истина.
Пример 5.8. Рассмотрим отношение R , (см пример 5.7)
( 1, 2, 3 ) ( 1, 2, 4 ) ( 1, 3, 4 ).
Тогда приведенные ниже выражения будут иметь указанные значения.
FORALL V ( V.A > 1 )
FORALL V ( V.B > 1 )
FORALL V ( V.A = 1 AND V.C > 2 )
: false
: true
: true
Квантор FORALL не является необходимым.
Любая формула, использующая квантор FORALL, всегда может быть заменена эквивалентной формулой, использующей квантор EXISTS.
FORALL V ( p ) ≡NOT EXISTS V ( NOT p )
(Выражение "все значения V, удовлетворяющие формуле р" — это то же самое, что и
выражение "нет таких значений V, которые бы не удовлетворяли формуле р".) Например, утверждение (истинное)
Для любого целого х существует целое у, такое, что у > х равносильно утверждению
Не существует целого х, такого, что не существует целого у, такого, что у>х.
(Иначе говоря, не существует наибольшего целого числа.) Но обычно легче выразить
подобное утверждение в терминах квантора FORALL, чем в терминах квантора EXISTS, с
использованием двойного отрицания. На практике гораздо удобнее использовать оба
квантора.
Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана.
9
Мат.методы хранения данных. Лекция 5
Формула, в которой все переменные связаны, называется закрытой формулой (фактически она является высказыванием). Открытая формула — это формула, которая
не является закрытой, т.е. такая формула, которая содержит по крайней мере одну
ссылку на свободную переменную.
Результирующие списки и выражения реляционного исчисления
WFF обеспечивают средства формулировки условия выборки из отношений БД. Чтобы
можно было использовать исчисление для реальной работы с БД, требуется еще один
компонент, который определяет набор и имена атрибутов результирующего отношения.
Этот компонент называется результирующим (целевым) списком (target list).
Результирующий список строится из элементов, каждый из которых может иметь следующий вид:
ƒ
ƒ
ƒ
var.attr, где var – имя свободной переменной соответствующей WFF, а attr – имя
атрибута отношения, на котором определена переменная var;
var, что эквивалентно наличию подсписка var.attr1, var.attr2, ..., var.attrn, где
{attr1, attr2, ..., attrn} включает имена всех атрибутов определяющего отношения;
new_name = var.attr; new_name – новое имя соответствующего атрибута результирующего отношения.
Последний вариант требуется в тех случаях, когда в WFF используется несколько свободных переменных с одинаковой областью определения. Фактически применение результирующего списка к области истинности WFF эквивалентно действию алгебраической операции проекции, а последний из приведенных вариантов представляет собой
некоторую разновидность алгебраической операции переименования атрибута.
Выражением реляционного исчисления кортежей называется конструкция вида
target_list WHERE WFF. Значением выражения является отношение, тело которого определяется WFF, а множество атрибутов и их имена – результирующим списком.
Результатом выполнения операции, заданной параметром WFF, будет отношение, содержащее все возможные значения кортежей, определяемых параметром target_list,
для которых результат вычисления логического выражения, заданного в предложении
WHERE, принимает значение истина. Если предложение WHERE опущено, то подразумевается WFF = true.
Все ссылки на переменные кортежей в параметре target_list должны быть свободными в
пределах значения этого параметра.
Ссылка на кортежную переменную в предложении WHERE может быть свободной только
в случае, если ссылка на эту же переменную (обязательно свободная) присутствует в
соответствующем значении параметра target_list .
Например, следующее выражение является допустимым значением параметра WFF
("Получить номера поставщиков, находящихся в Лондоне").
SX.S# WHERE SX.CITY = 'London'
Здесь ссылка на переменную SХ в target_list является свободной. Ссылка на переменную SХ в предложении WHERE также является свободной.
Рассмотрим конструкцию
SX.SNAME WHERE EXISTS SPX ( SPX.S#=SX.S# AND SPX.P#=P2)
с WFF ("Получить имена поставщиков детали с номером 'Р2'").
Здесь все ссылки на переменную SХ являются свободными, тогда как все ссылки на переменную SРХ (в предложении WHERE) являются связанными, как и должно быть, поскольку на них нет ссылок в target_list.
Пусть даны два отношения:
список студентов отношение Student(Номер_л_д, ФИО, Группа) и список групп с фамилиями кураторов - отношение Curator _Group(Группа, Куратор)
Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана.
10
Мат.методы хранения данных. Лекция 5
Номер_л_д
1232
1233
1234
1235
1237
1240
Student
ФИО
Алексеев А. А.
Борисов Б. Б.
Васькин В.В.
Гришин Г. Г.
Иванов И.В.
Степанов А. С.
Группа
И-12
И-12
И-12
У-11
И-13
К-14
Curator _Group
Группа
Куратор
И-12
Семенова И.А.
У-11
Иванова Е.А.
И-13
Демин А.Д
К-14
Лосев А.Д.
Student JOIN Curator _Group
ФИО
Группа
Алексеев А. А.
И-12
Борисов Б. Б.
И-12
Васькин В.В.
И-12
Гришин Г. Г.
У-11
Иванов И.В.
И-13
Степанов А. С.
К-14
Таблица 5.8. Естественное соединение (Student JOIN
Номер_л_д
1232
1233
1234
1235
1237
1240
Куратор
Семенова И.А.
Семенова И.А.
Семенова И.А.
Иванова Е.А.
Демин А.Д
Лосев А.Д
Curator _Group)
Покажем выражение реляционного исчисления кортежей, результат которого совпадает
с результатом операции Student JOIN Curator _Group
RANGEVAR Studen1 RANGES OVER Student
RANGEVAR Curator _Group1 RANGES OVER Curator _Group
Studen1.Номер_л_д, Studen1.ФИО, Studen1.Группа, Curator _Group1.Куратор
WHERE FORALL Curator _Group1
(EXISTS Student1 (Student1. Группа =Curator _Group1.Группа))
Примеры
Примеры использования реляционного исчисления кортежей для формулирования запросов.
1. Определить номера поставщиков из Парижа со статусом, большим 20
(SX.S#, SX.STATUS) WHERE SX.CITY ='Paris' AND SX.STATUS>20
2. Найти все такие пары номеров поставщиков,
в которых два поставщика находятся в одном городе
(SX.S# AS SA, SY.S# AS SB) WHERE SX.CITY=SY.CITY AND
SX.S#<SY.S#
Спецификации АS в целевом списке используются для именования атрибутов результата. Следовательно, эти имена недоступны для использования в фразе WHERE, и потому
второе сравнение в фразе WHERE записано как SХ.S#<SY.S#, а не в виде SА<SВ.
3. Определить имена поставщиков детали с номером 'Р2'
SX WHERE EXISTS SPX (SPX.S#=SX.S# AND SPX.P#=P2)
Имя кортежной переменной в целевом списке записано без атрибутов.
Этот пример является сокращенной записью следующего выражения.
(SX.S#, SX.NAME, SX.STATUS, SX.CITY) WHERE EXISTS SPX (SPX.S#=SX.S# AND SPX.P#=P2)
4. Определить имена поставщиков по крайней мере одной красной детали
SX.SNAME WHERE EXISTS SPX
(SX.S#=SPX.S# AND EXISTS PX (PX.P#=SPX.P# AND PX.COLOR=Red))
5. Найти имена поставщиков по крайней мере одной детали, поставляемой поставщиком с номером 'S2'
SX.SNAME WHERE EXISTS SPX
(EXISTS SPY (SX.S#=SPX.S# AND SPX.P#=SPX.P# AND SPY.S#=S2))
6. Выбрать имена поставщиков всех типов деталей
SX.SNAME WHERE FORALL PX (EXISTS SPX (SPX.S#=SX.S# AND SPX.P#=PX.P#))
Равносильное выражение можно записать без использования квантора FORALL.
SX.SNAME WHERE NOT EXISTS PX (NOT EXISTS SPX (SPX.S#=SX.S# AND SPX.P#=PX.P#))
Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана.
11
Мат.методы хранения данных. Лекция 5
7. Определить имена поставщиков, которые не поставляют деталь с номером
Р2.
SX.SNAME WHERE NOT EXISTS SPX( SPX.S# = SX.S# AND SPX.P# = P2)
8. Получить номера деталей, которые либо весят более 16 фунтов, либо поставляются поставщиком с номером 'S2', либо и то, и другое
PU.P# WHERE PX.WEIGHT>16.0 OR EXISTS SPX(SPX.P#=PX.P# AND SPX.S#=S2)
Виноградова М.С. Каф. ФН-12, МГТУ им. Н.Э. Баумана.
12
Download