Автор работы: Пользователь скрыл имя, 05 Февраля 2013 в 15:00, реферат
В структурной части модели фиксируется, что единственной структурой данных, используемой в реляционных БД, является нормализованное n-арное отношение. В манипуляционной части модели утверждаются два фундаментальных механизма манипулирования реляционными БД - реляционная алгебра и реляционное исчисление. Первый механизм базируется в основном на классической теории множеств (с некоторыми уточнениями), а второй - на классическом логическом аппарате исчисления предикатов первого порядка. В данной работе мы подробно рассмотрим механизм реляционного исчисления.
Введение 3
1.Реляционное исчисление 4
2.Исчисление кортежей 7
2.1.Синтаксис. 7
2.2. Переменные кортежей. 9
2.3. Свободные и связанные переменные кортежей. 10
2.4. Кванторы 12
2.5. Ещё раз о свободных и связанных переменных 14
2.6. Реляционные операции 15
2.7. Примеры 17
3. Сравнительный анализ реляционного исчисления и реляционной алгебры 17
4. Вычислительные возможности 23
4.1. Примеры 23
5. Исчисление доменов 24
5.1. Примеры 25
6. Средства языка SQL 26
6.1. Примеры 26
Заключение 28
Список литературы 29
Следовательно, без потери общности прототип кортежа можно рассматривать как список, состоящий из разделённых запятыми ссылок на атрибуты в виде Vi.Ai AS Bj. Обратите внимание, что ссылки Vi- и Aj-е могут повторяться, тогда как ссылки Bj-е должны быть разными.
Здесь предполагается, что на предыдущем шаге были также переименованы атрибуты, упоминающиеся в предложении WHERE; в противном случае функция WFF в предложении WHERE может не иметь смысла.
2.7. Примеры
Представляем несколько примеров использования реляционного исчисления кортежей для формулирования запросов.
SX
WHERE EXISTS SPX (SPX.S# = SX.S# AND
Обратите внимание на
(SX.S#, SX.NAME, SX.STATUS, SX.CITY)
WHERE EXISTS SPX (SPX.S# = SX.S# AND
Этот же пример решённый средствами реляционной алгебры выглядит так
( (SP JOIN S) WHERE P# =’P2’) {SNAME}
SX.SNAME
WHERE EXISTS SPX (SX.S# = SPX.S# AND
Этот же пример решённый средствами реляционной алгебры выглядит так
( ( ( P WHERE COLOR = COLOR (‘Red’) )
3. Сравнительный анализ
В начале утверждалось, что реляционная
алгебра и реляционное
P# |
PNAME |
COLOR |
WEIGHT |
CITY |
P1 |
Nut |
Red |
12.0 |
London |
P2 |
Bolt |
Green |
17.0 |
Paris |
P3 |
Screw |
Blue |
17.0 |
Rome |
P4 |
Screw |
Red |
14.0 |
London |
P5 |
Cam |
Blue |
12.0 |
Paris |
P6 |
Cog |
Red |
19.0 |
London |
S# |
SNAME |
STATUS |
CITY |
S1 |
Smith |
20 |
London |
S2 |
Jones |
10 |
Paris |
S3 |
Black |
30 |
Paris |
S4 |
Clark |
20 |
London |
S5 |
Adams |
30 |
Athens |
S# |
P# |
J# |
QTY |
S1 |
P1 |
J1 |
200 |
S1 |
P1 |
J4 |
700 |
S2 |
P3 |
J1 |
400 |
S2 |
P3 |
J2 |
200 |
S2 |
P3 |
J3 |
200 |
S2 |
P3 |
J4 |
500 |
S2 |
P3 |
J5 |
600 |
S2 |
P3 |
J6 |
400 |
S2 |
P3 |
J7 |
800 |
S2 |
P5 |
J2 |
100 |
S3 |
P3 |
J1 |
200 |
S3 |
P4 |
J2 |
500 |
S4 |
P6 |
J3 |
300 |
S4 |
P6 |
J7 |
300 |
S5 |
P2 |
J2 |
200 |
S5 |
P2 |
J4 |
100 |
S5 |
P5 |
J5 |
500 |
S5 |
P5 |
J7 |
100 |
S5 |
P6 |
J2 |
200 |
S5 |
P1 |
J4 |
100 |
S5 |
P3 |
J4 |
200 |
S5 |
P4 |
J4 |
800 |
S5 |
P5 |
J4 |
400 |
S5 |
P6 |
J4 |
500 |
J# |
JNAME |
CITY |
J1 |
Sorter |
Paris |
J2 |
Display |
Rome |
J3 |
OCR |
Athens |
J4 |
Console |
Athens |
J5 |
RAID |
London |
J6 |
EDS |
Oslo |
J7 |
Tape |
London |
S-детали, P- поставщики, J- проекты, SPJ- поставки.
Рассмотрим теперь следующий запрос: «Получить имена поставщиков и названия городов, в которых находятся поставщики деталей по крайней мере для одного проекта в Афинах, поставляющих по крайней мере 50 штук каждой детали». Выражение реляционного исчисления для этого запроса следующее.
(SX.SNAME, SX.CITY) WHERE EXISTS JX FORALL PX EXISTS SPJX
Здесь SX, PX, JX и SPJX ─ переменные кортежей, получающие свои значения из отношений S, P, J и SPJ соответственно. Теперь покажем, как можно вычислить это выражение, чтобы достичь требуемого результата.
Этап 1. Для каждой переменной кортежа выбираем её область значений (т.е. набор всех значений для переменной), если это возможно. Выражение «выбираем, если возможно» подразумевает, что существует условие выборки, встроенное в фразу WHERE, которую можно использовать, чтобы сразу исключить из рассмотрения некоторые кортежи. В нашем случае выбираются следующие наборы кортежей.
SX
: Все кортежи отношения S
PX
: Все кортежи отношения P
JX : Кортежи отношения J, в которых CITY = ‘Athens’ 2 кортежа
SPJX : Кортежи отношения SPJ, в которых CITY ≥ 50 24 кортежа
Этап 2. Строим декартово произведение диапазонов, выбранных на первом этапе. Вот результат.
S# |
SN |
STA TUS |
CITY |
P# |
PN |
CO-LOR |
WEIGHT |
CITY |
J# |
JN |
CITY |
S# |
P# |
J# |
QTY |
S1 |
Sm |
20 |
Lon |
P1 |
Nt |
Red |
12.0 |
Lon |
J3 |
OR |
Ath |
S1 |
P1 |
J1 |
200 |
S2 |
Sm |
20 |
Lon |
P1 |
Nt |
Red |
12.0 |
Lon |
J3 |
OR |
Ath |
S1 |
P1 |
J4 |
700 |
.. |
.. |
.. |
… |
.. |
.. |
… |
… |
… |
.. |
.. |
… |
.. |
.. |
.. |
… |
(И т.д.) Всё произведение содержит 5*6*2*24=1440 кортежей.
Для экономии места здесь это отношение полностью не приводится. Мы также не переименовывали атрибуты (хотя это следовало бы сделать во избежание двусмысленности), просто расположили их в таком порядке, чтобы было видно, какой атрибут S# относится, например, к отношению S, а какой ─ к отношению SPJ. Это также сделано для сокращения изложения.
Этап 3. Осуществляем выборку из построенного на этапе 2 произведения в соответствии с частью «условие соединения» фразы WHERE. В нашем примере эта часть выглядит следующим образом.
JX.J# = SPJX.J# AND PX.P# = SPJX.P# AND SX.S# = SPJX.S#
Поэтому из произведения
S# |
SN |
STA TUS |
CI-TY |
P# |
PN |
CO-LOR |
WEIGHT |
CITY |
J# |
JN |
CI-TY |
S# |
P# |
J# |
QTY |
S1 |
Sm |
20 |
Lon |
P1 |
Nt |
Red |
12.0 |
Lon |
J4 |
Cn |
Ath |
S1 |
P1 |
J4 |
700 |
S2 |
Jo |
10 |
Par |
P3 |
Sc |
Blue |
17.0 |
Rom |
J3 |
OR |
Ath |
S2 |
P3 |
J3 |
200 |
S2 |
Jo |
10 |
Par |
P3 |
Sc |
Blue |
17.0 |
Rom |
J4 |
Cn |
Ath |
S2 |
P3 |
J4 |
200 |
S4 |
Cl |
20 |
Lon |
P6 |
Cg |
Red |
19.0 |
Lon |
J3 |
OR |
Ath |
S4 |
P6 |
J3 |
300 |
S5 |
Ad |
30 |
Ath |
P2 |
Bt |
Green |
17.0 |
Par |
J4 |
Cn |
Ath |
S5 |
P2 |
J4 |
100 |
S5 |
Ad |
30 |
Ath |
P1 |
Nt |
Red |
12.0 |
Lon |
J4 |
Cn |
Ath |
S5 |
P1 |
J4 |
100 |
S5 |
Ad |
30 |
Ath |
P3 |
Sc |
Blue |
17.0 |
Rom |
J4 |
Cn |
Ath |
S5 |
P3 |
J4 |
200 |
S5 |
Ad |
30 |
Ath |
P4 |
Sc |
Red |
14.0 |
Lon |
J4 |
Cn |
Ath |
S5 |
P4 |
J4 |
800 |
S5 |
Ad |
30 |
Ath |
P5 |
Cm |
Blue |
12.0 |
Par |
J4 |
Cn |
Ath |
S5 |
P5 |
J4 |
400 |
S5 |
Ad |
30 |
Ath |
P6 |
Cg |
Red |
19.0 |
Lon |
J4 |
Cn |
Ath |
S5 |
P6 |
J4 |
500 |
Этап 4. Применяем кванторы в порядке справа налево следующим образом.
Под делением здесь подразумевается оригинальная операция деления Кодда.
В нашем примере имеем следующие кванторы.
EXISTS JX FORALL PX EXISTS SPJX
Значит, выполняются следующие операции.
1. (EXISTS SPJX) Проецируем, исключая атрибуты отношения SPJ (SPJ.S#,
SPJ.P#, SPJ.J# и SPJ.QTY). В результате получаем следующее.
S# |
SN |
STA TUS |
CI-TY |
P# |
PN |
CO-LOR |
WEIGHT |
CITY |
J# |
JN |
CI-TY |
S1 |
Sm |
20 |
Lon |
P1 |
Nt |
Red |
12.0 |
Lon |
J4 |
Cn |
Ath |
S2 |
Jo |
10 |
Par |
P3 |
Sc |
Blue |
17.0 |
Rom |
J3 |
OR |
Ath |
S2 |
Jo |
10 |
Par |
P3 |
Sc |
Blue |
17.0 |
Rom |
J4 |
Cn |
Ath |
S4 |
Cl |
20 |
Lon |
P6 |
Cg |
Red |
19.0 |
Lon |
J3 |
OR |
Ath |
S5 |
Ad |
30 |
Ath |
P2 |
Bt |
Green |
17.0 |
Par |
J4 |
Cn |
Ath |
S5 |
Ad |
30 |
Ath |
P1 |
Nt |
Red |
12.0 |
Lon |
J4 |
Cn |
Ath |
S5 |
Ad |
30 |
Ath |
P3 |
Sc |
Blue |
17.0 |
Rom |
J4 |
Cn |
Ath |
S5 |
Ad |
30 |
Ath |
P4 |
Sc |
Red |
14.0 |
Lon |
J4 |
Cn |
Ath |
S5 |
Ad |
30 |
Ath |
P5 |
Cm |
Blue |
12.0 |
Par |
J4 |
Cn |
Ath |
S5 |
Ad |
30 |
Ath |
P6 |
Cg |
Red |
19.0 |
Lon |
J4 |
Cn |
Ath |
2.(FORALL PX) Делим полученный результат на отношение P. В результате имеем следующее.