Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры БД.docx
Скачиваний:
16
Добавлен:
26.09.2019
Размер:
592.64 Кб
Скачать
  1. Язык запросов к рбд, основанный на реляционном исчислении. Примеры запросов.

Реляционное исчисление над переменными кортежами.

Выражение РИ определяет новое отношение, являющееся результатом запроса к исходным отношениям. Для определения множества кортежей, создающих результат запроса, предлагается использовать определяющую функцию, записываемую в виде предиката первого порядка. Кортежи исходных отношений, для которых определяющая функция принимает значение истина, и образуют результат запроса. n–местным предикатом первого порядка называется выражение, содержащее n переменных из предметной области и обращающееся в высказывание (логическое выражение) при задании значений этим переменным. Предметные переменные связываются с кортежами исходных отношений Те кортежи отношений, для которых предикат принимает значение истина, формируют результат запроса. Выражения для запроса в РИ использует форму записи элементов множества с определяющей функцией:

{<элемент множества>| <определяющая функция – условие для элемента множества>} .

Например, {x | x mod (2) 0}.

Здесь x mod (2) 0 - предикат (определяющая функция). Операция x mod (2) вычисляет остаток от деления. Поэтому x mod (2) ≡ 0 является одноместным предикатом, принимающим истинное значение при четных x. Таким образом, запись { x | x mod (2) 0} определяет множество четных чисел.

Общая форма записи запроса в РИ имеет вид: {t | φ(t) }, где φ(t) – формула (предикат), являющаяся условием (определяющей функцией) для t, а t – переменная, принимающая значения кортежей результирующего отношения. Формула φ(t) строится из следующих элементарных (атомарных) условий:

1. R(t) – предикат, принимающий значения истина, если переменная t является кортежом в отношении R. Тогда запись {t | R(t) } является запросом,

возвращающим все кортежи отношения R;

2. u[i] Θ v[j] или u[i] Θ u[j], логическое выражение с переменными u, v, областью возможных значений которых являются кортежи каких-либо

отношений, i, j – номера или имена атрибутов в отношении, тогда u[i] и v[j] - поля i-го и j-го атрибутов кортежей отношений. u[i] и [j] выполняют роль предметных переменных в предикатах определяющей функции. Как и в РА, Θ – операция бинарного сравнения элементов кортежей разных отношений (u[i] Θ v[j]) или элементов кортежа одного отношения (u[i] Θ u[j]), Θ { >, <, <=, >= , =, # };

3. u[i] Θ <константное выражение> - логическое выражение для сравнения значения элемента u[i] (поля) кортежа в отношении со значением

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

1 каждое элементарное условие является функцией;

2) если ψ1 и ψ2 - являются определяющими функциями, то выражения вида:

ψ1 ψ2 , ψ1 ψ2 и ¬ψ1 – также являются определяющими функциями, в

которых:

- операция конъюнкции (логическое И),

- операция дизъюнкции (логическое ИЛИ),

¬ - одноместная операция отрицания (логическое НЕ);

3) если ψ - определяющая функция, то (s) (ψ(s)) и s ( ) (ψ(s)) являются

определяющими функциями, в которых s – обозначает предметную переменную, являющуюся кортежом отношения, связанную квантором существования - ∃или общности - ∀. Предикат (s) (ψ (s)) принимает значения истина, если существует хотя бы одно значение предметной переменной s, для которого ψ (s) имеет значение истина. Предикат (s(ψ(s))

принимает значения истина, если для всех значений предметной переменной s выражение ψ(s) имеет значение истина.

При вычислении значений предиката первыми выполняются операции связывания переменных кванторами ∃ и ∀, затем операции сравнения (Θ),

затем по старшинству ¬, , ∨ – обычные логические операции Порядок выполнения операций можно задавать скобками.

С помощью приведенных правил могут быть построены запросы, приводящие к практически бесполезным, но при этом весьма объемным результатам. Например, если правильным являетя выражение {t | R(t)}, то формально правильным в соответствии с правилом 2 является выражение {t | ¬ R(t)}. Данное выражение требует возвратить все кортежи, отсутствующие в отношении R. Ответ на такой запрос можно представить в виде разности отношения, получаемого декартовым произведением доменов, используемых атрибутами отношения R (всеми возможными кортежами) и существующими кортежами отношения R. Поскольку многие домены реальных баз задаются допустимыми типами данных, например, фамилия – строка фиксированной длины, дата рождения – произвольная дата из заданного интервала, то большинство кортежей, полученное декартовым произведением таких доменов, не имеет смысла. Поэтому в запросах {t | φt)} РИ рассматривают подмножества определяющих функций φ(t), называемых безопасными. Безопасные определяющие функции не позволяют создавать в результате запроса данные которые не представлены в используемых отношениях БД или в самой определяющей функции. Безопасные выражения для запросов оказываются всегда вычислимы по БД.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]