Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Неделя 05 Лекция 2 (8).doc
Скачиваний:
2
Добавлен:
13.11.2019
Размер:
179.71 Кб
Скачать

8.1.3. Реляционное исчисление доменов.

В реляционном исчислении доменов используются переменные, значения которых берутся из доменов, а не из кортежей отношений. Если P(d1, d2, ... ,dn) обозначает предикат с переменными d1, d2, ..., dn, то множество всех переменных домена d1, d2, ..., dn, для которых предикат или формула P(d1, d2, ..., dn) истинны, обознача­ется следующим выражением: {d1, d2 , ..., dn | P(d1, d2, ..., dn)}

В реляционном исчислении доменов зачастую требуется проверить условие принадлежности, чтобы определить, принадлежат ли значения указанному отношению. Выражение R(x, y) считается истинным тогда и только тогда, когда в отношении R имеется кортеж со значениями х и у в двух его атрибутах.

ПРИМЕР

Создайте список всех читателей, у которых номер читательского билета больше 100.

{FamilyNamе, Name, Patronymic, ReaderCardNumber | ReaderCardNumber

(Readers(FamilyNamе, Name, Patronymic, ReaderCardNumber) ReaderCardNumber > 100)}

Если сравнить этот запрос с эквивалентным запросом реляционного исчисления кортежей, то можно увидеть, что каждому атрибуту присвоено имя (переменной). Условие Readers(FamilyNamе, Name, Patronymic, ReaderCardNumber) гарантирует, что переменные домена FamilyNamе, Name, Patronymic и ReaderCardNumber ограничены атрибутами того же самого кортежа. Поэтому мы можем использовать формулу ReaderCardNumber > 100 вместо формулы Readers.ReaderCardNumber > 100.

Создайте список всех сотрудников, которые родились после 1960 года.

{FamilyNamе, Name, Patronymic | PasportCode Librarians(FamilyNamе, Name, Patronymic, PasportCode) Code PasportData(Code, Birthday) Birthday > 31.12.1960

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

8.2. Знакомство с оператором select.

8.2.1. Запись sql-операторов.

В этом разделе вашему вниманию будет предложено краткое описание структуры SQL-операторов и нотации, которую мы будем использовать для определения формата различных конструкций языка SQL. SQL-оператор состоит из зарезервированных слов, а также из слов, определяемых пользователем. Зарезервированные слова являются постоянной частью языка SQL и имеют фиксированное значение. Их следует записывать в точности так, как это установлено, и нельзя разбивать на части для переноса из одной строки в другую. Слова, определяемые пользователем, задаются самим пользователем (в соответствии с определёнными синтаксическими правилами) и представляют собой имена различных объектов базы данных – таблиц, столбцов, представлений, индексов и т.п. Слова в операторе размещаются в соответствии с установленными синтаксическими правилами. Хотя в стандарте это не указано, многие диалекты языка SQL требуют задания в конце оператора некоторого символа, обозначающего окончание его текста (как правило, с этой целью используется символ точки с запятой (;)).

Большинство компонентов SQL-операторов не чувствительно к регистру. Это означает, что могут использоваться любые буквы – как строчные, так и прописные. Одним важным исключением из этого правила являются символьные литералы-данные, которые должны вводиться точно так же, как были введены соответствующие им значения, хранящиеся в базе данных. Например, если в базе данных хранится значение фамилии ’SMITH’, а в условии поиска указан символьный литерал ‘Smith’, то эта запись не будет найдена.

Поскольку язык SQL имеет свободный формат, отдельные SQL-операторы и их последовательности будут иметь более читабельный вид при использовании отступов и выравнивания. Рекомендуется придерживаться следующих правил.

  • Каждая фраза в операторе должна начинаться с новой строки.

  • Начало каждой фразы должно быть выровнено с началом остальных фраз оператора.

  • Если фраза имеет несколько частей, каждая из них должна начинаться с новой строки с некоторым отступом относительно начала фразы, что будет указывать на их подчиненность.

В этой и следующей главе для определения формата SQL-операторов мы будем применять следующую расширенную форму BNF-нотации (Backus Naur Form).

  • Прописные буквы будут использоваться для записи зарезервированных слов и должны указываться в операторах точно так же, как это будет показано.

  • Строчные буквы будут использоваться для записи слов, определяемых пользователем.

  • Вертикальная черта (|) указывает на необходимость выбора одного из нескольких приведенных значений – например, a | b | c.

  • Фигурные скобки определяют обязательный элемент – например, {а}.

  • Квадратные скобки определяют необязательный элемент – например, [а].

  • Многоточие (…) используется для указания необязательной возможности повторения конструкции, от нуля до нескольких раз – например, {a|b} [,c…]. Эта запись означает, что после a или b может следовать от нуля до нескольких повторений с, разделенных запятыми.

На практике для определения структуры базы данных (т.е. ее отношений) используется DDL-операторы, а для заполнения этих отношений данными и выборки из них информации с помощью запросов – DML-операторы.