Реферат: Реляционное исчисление
Реферат: Реляционное исчисление
Содержание.
1. Введение.
2. Исчисление кортежей.
2.1. Синтаксис.
2.2. Переменные кортежей.
2.3. Свободные и связанные переменные кортежей.
2.4. Кванторы.
2.5. Ещё раз о сводных и связанных переменных.
2.6. Реляционные операции.
2.7. Примеры
3. Сравнительный анализ реляционного исчисления и реляционной алгебры.
4. Вычислительные возможности.
4.1. Примеры
5. Исчисление доменов.
5.1. Примеры
6. Средства языка SQL.
6.1. Примеры
7. Заключение.
8. Список литературы.
1.Введение.
Часть реляционной модели, которая связана с операторами манипулирования данными, основывается на использовании реляционной алгебры. Однако с тем же основанием можно сказать, что она построена на базе реляционного исчисления. Другими словами, реляционная алгебра и реляционное исчисление представляют собой два альтернативных подхода. Принципиальное различие между ними следующее. Реляционная алгебра в явном виде представляет набор операций (соединение, объединение, проекция и т.д.), которые можно использовать, чтобы сообщить системе, как в базе данных из определённых отношений построить некоторое требуемое отношение, а реляционное исчисление просто представляет систему обозначений для определения требуемого отношения в терминах данных отношений.
Например, рассмотрим три отношения:
Ø S-поставщики, каждый поставщик имеет уникальный номер (S#); имя (SNAME); значение рейтинга или статуса (STATUS); место расположения (CITY). Предполагается, что каждый поставщик находится только в одном городе.
Ø P-детали, у каждого вида детали есть уникальный номер (P#); название детали (PNAME); цвет (COLOR); вес (WEIGHT); город, где хранится этот вид деталей (CITY). Каждый отдельный вид детали имеет только один цвет и хранится на складе только в одном городе.
Ø SP-поставки, служит для организации логической связи двух других отношений. Например, первая строка отношения SP связывает поставщика с номером ‘S1’ из отношения S с соответствующей деталью, имеющей номер ‘P1’ в отношении P, т.е. представляет факт поставки деталей типа ‘P1’ поставщиком с номером ‘S1’ (а также указывает количество деталей-300 штук). Таким образом, каждая поставка характеризуется номером поставщика (S#), номером детали (P#) и количеством (QTY). Предполагается, что в одно и то же время может быть не более одной поставки для одного поставщика и одной детали.
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# | QTY |
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 |
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 |
Рассмотрим запрос «Выбрать номера поставщиков и названия городов, в которых находятся поставщики детали с номером ‘P2’». Алгебраическая версия этого запроса выглядит приблизительно так:
- Сначала выполнить соединение отношения поставщиков S и отношения поставок SP по атрибуту S#.
- Далее выбрать из результата этого соединения кортежи с номером детали ‘P2’.
- И, наконец, выполнить для результата этой выборки операцию проекции по атрибутам S# и CITY.
Этот же запрос в терминах реляционного исчисления формулируется приблизительно так:
- Получить атрибуты S# и CITY для таких поставщиков, для которых в отношении SP существует запись о поставке с тем же значением атрибута P#, равным ‘P2’.
В этой формулировке пользователь лишь указывает определённые характеристики требуемого результата, оставляя системе решать, что именно и в какой последовательности соединять, проецировать и т.д., чтобы получить необходимый результат.
Итак, можно сказать, что, по крайней мере, внешне формулировка запроса в терминах реляционного исчисления носит описательный характер, а в терминах реляционной алгебры - предписывающий. В реляционном исчислении просто описывается, в чём заключается проблема, тогда как реляционной алгебре задаётся процедура решения этой проблемы. Или, говоря очень неформально, алгебра имеет процедурный характер (пусть на высоком уровне, но всё же процедурный, поскольку задаёт необходимые для выполнения процедуры), а исчисление – непроцедурный.
Подчеркнём, однако, что упомянутые отличия существуют только внешне. На самом деле реляционная алгебра и реляционное исчисление логически эквивалентны. Каждому выражению в алгебре соответствует эквивалентное выражение в исчислении, и точно так каждому выражению в исчислении соответствует эквивалентное выражение в алгебре. Это означает, что между ними существует взаимнооднозначное соответствие, а различия связаны лишь с разными стилями выражения; исчисление ближе к естественному языку, а алгебра - к языку программирования; Но повторим еще раз, эти различия только кажущиеся, а не реальные. В частности, ни один из подходов нельзя назвать « более непроцедурным « по сравнению с другим.
Реляционное исчисление основано на разделе математической логики, который называется исчислением предикатов. Идея использования исчисления предикатов в качестве основы языка баз данных впервые была высказана в статье Кунса (Kuhns). Понятие реляционного исчисления, т.е. специального применения исчисления предикатов, в реляционных базах данных, впервые было предложено Коддом в 1972, а позже Кодд представил язык, основанный непосредственно на реляционном исчислении и названный « подъязык данных ALPHA». Сам язык ALPHA никогда не был реализован, однако язык QUEL, который действительно был реализован и некоторое время серьезно конкурировал с языком SQL , очень походил на язык ALPHA , оказавший заметное влияние на построение языка QUEL .