Теорема. Для каждого безопасного выражения с переменными-кортежами существует эквивалентное безопасное выражение с переменными на доменах

Для каждого безопасного выражения с переменными-кортежами существует эквивалентное безопасное выражение с переменными на доменах.

Пример:

Даны отношения со схемами:

S(S#, SNAME, CITY) – поставщик,

P(P#, PNAME, PRICE) – деталь,

SP(S#, P#, QTY) – поставка.

Написать выражение реляционного исчисления, позволяющее получить имена поставщиков, поставляющих деталь с номером P1.

c. Выражение исчисления с переменными-кортежами:

{t(SNAME) | ∃u(S) ∃v(SP) (S(u) ∧ SP(v) ∧ u[SNAME] = t[SNAME] ∧ u[S#] = v[S#] ∧ v[P#] = ‘P1’)}

d. Выражение исчисления с переменными на доменах:

{t(SNAME) | ∃u1(S#) ∃u2(SNAME) ∃u3(CITY) ∃v1(S#) ∃v2(P#) ∃v3(QTY) (S(u1,u2,u3) ∧ SP(v1,v2,v3) ∧ u2 = t ∧ u1 = v1 ∧ v2 = ‘P2’)}

Общая характеристика языков манипулирования данными

Э.Ф. Кодд предложил использовать реляционное исчисление с переменными-кортежами как эталон для оценки языков манипулирования данными, основанных на реляционной модели. Дело обстоит так, что едва ли не во все современные языки запросов встраивается одна из трех рассмотренных выше нотаций, а в некоторые языки – их комбинация.

Язык, в котором можно (по крайней мере) моделировать исчисление с переменными-кортежами, либо, что равносильно, реляционную алгебру или исчисление с переменными на доменах, называется полным.

Однако в реальных системах языки манипулирования данными обладают, в общем случае, возможностями, выходящими за рамки реляционного исчисления. Во всех языках манипулирования данными, конечно же, включаются команды вставки, удаления и модификации, которые не являются частью реляционной алгебры или реляционного исчисления. Кроме того, часто предоставляются возможности использовать в записи атомов арифметические операции и использовать агрегатные функции.

Далее приводится краткий обзор языков манипулирования данными, основанных на реляционной модели.

ISBL (Information System Base Language) – «чистый» язык реляционной алгебры. Язык запросов, разработанный в исследовательском центре фирмы IBM в Питерли (Англия) для использования в экспериментальной системе PRTV (Peterlee Relational Test Vehicle); весьма близок к реляционной алгебре. В данном языке нет агрегатных операций, а также средств для вставки, удаления и модификации кортежей.

SEQUEL (Structured English Query Language) – переход от алгебраических языков к языкам исчислений. Использует реляционную алгебру, но имеет синтаксис, напоминающий реляционное исчисление с переменными-кортежами. SEQUEL разработан в 1974 г. (первая публикация) в исследовательской лаборатории IBM в Сан-Хосе. Центральная возможность языка – отображение: специальный вид селекции с последующей проекцией.

В 1976 г. на базе переработанной версии языка SEQUEL/2 корпорация IBM выпустила прототип СУБД, получивший название System R. Назначение этой пробной версии состояло в проверке осуществимости реляционной модели. Помимо прочего, важнейшим из результатов выполнения этого проекта можно считать разработку собственного языка SQL (Structured Query Language).

QUEL – язык реляционного исчисления с переменными-кортежами. Язык запросов реляционной СУБД INGRES, разработанной в Калифорнийском университете в Беркли в конце 70-х г.г. Включает широкий спектр операторов реляционного исчисления с переменными-кортежами. Включает агрегатные функции. Этот язык является более структурированным, чем SQL, но его семантика менее близка к обычному английскому языку (позднее, когда язык SQL был принят как стандартный язык реляционных баз данных, СУБД INGRES была переведена на использование этого языка).

QBE (Query-By-Example) – язык исчисления с переменными на доменах. Язык разработан в Исследовательском центре IBM в Йорктаун-Хейтсе. Его специфика заключается в том, что он предназначен для работы с терминала. Клавиши терминала позволяют затребовать показ на экране одной или более форм таблиц. Необходимые запросы формулируются с использованием переменных на доменах и констант, как в реляционном исчислении с переменными на доменах. Включены агрегатные функции.

SQL (Structured Query Language) – язык, ориентированный на отображение: описывается отображение известного атрибута или множества атрибутов в искомый атрибут или множество атрибутов. В языке для указания роли имен отношений и атрибутов применяются ключевые слова. Первой из коммерческих реализаций СУБД, построенных на использовании языка SQL, была СУБД ORACLE, выпущенная в конце 70-х г.г. компанией, которая ныне превратилась в корпорацию ORACLE.

В 1982 г. Американский национальный институт стандартов (ANSI) начал работу над стандартом языка реляционных баз данных. В 1983 г. к этой работе подключился Международный комитет по стандартизации (ISO). Совместными усилиями в 1987 г. был выпущен исходный вариант стандарта языка SQL, вызвавший волну критических замечаний. В 1992 г. была выпущена первая, существенно пересмотренная версия стандарта ISO, которую иногда называют SQL2 или SQL-92.

Язык SQL имеет два основных компонента:

• язык DDL (Data Definition Language), предназначенный для определения структуры базы данных;

• язык DML (Data Manipulation Language), предназначенный для выборки и обновления данных.

Язык SQL (точнее, его подмножество DML) является примером языка с трансформирующей ориентацией – языка, предназначенного для работы с таблицами с целью преобразования входных данных к требуемому виду. Это не процедурный язык, поэтому в нем необходимо указывать, какая информация должна быть получена, а не как ее можно получить. Иначе говоря, язык SQL не требует указания методов доступа к данным.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: