Реляционное исчисление кортежей - Tuple relational calculus

Исчисление кортежей это исчисление который был создан и представлен Эдгар Ф. Кодд как часть реляционная модель, чтобы обеспечить декларативный язык запросов к базе данных для обработки данных в этом модель данных. Он послужил источником вдохновения для языков запросов к базам данных. QUEL и SQL, из которых последний, хотя и гораздо менее верен исходной реляционной модели и исчислению, теперь де-факто является стандартным языком запросов к базе данных; диалект SQL используется почти каждым система управления реляционной базой данных. Мишель Лакруа и Ален Пиротт предложенный исчисление предметной области, что ближе к логика первого порядка и вместе с Коддом показали, что оба этих исчисления (а также реляционная алгебра ) эквивалентны по выразительной силе. Впоследствии языки запросов для реляционной модели были названы относительно полный если бы они могли выразить хотя бы все эти вопросы.

Определение исчисления

Реляционная база данных

Поскольку исчисление - это язык запросов для реляционные базы данных сначала нам нужно определить реляционную базу данных. Основным строительным блоком отношений является домен (несколько похоже, но не равно a тип данных ). А кортеж конечная последовательность атрибуты, которые заказанные пары доменов и ценностей. А связь представляет собой набор (совместимых) кортежей. Хотя эти реляционные концепции определены математически, эти определения слабо соответствуют традиционным концепциям баз данных. А Таблица это общепринятое визуальное представление отношения; кортеж похож на концепцию ряд.

Предположим сначала, что существует множество C имен столбцов, примерами которых являются «имя», «автор», «адрес» и т. д. Мы определяем заголовки как конечные подмножества C. А схема реляционной базы данных определяется как кортеж S = (D, р, час) где D - область атомарных значений (см. реляционная модель для получения дополнительной информации о понятиях домен и атомная стоимость), р - конечный набор имен отношений, а

час : р → 2C

а функция который связывает заголовок с каждым именем отношения в р. (Обратите внимание, что это упрощение полной реляционной модели, в которой существует более одного домена, а заголовок - это не просто набор имен столбцов, но также сопоставляет эти имена столбцов с доменом.) Учитывая домен. D мы определяем кортеж над D как частичная функция который сопоставляет имена некоторых столбцов с атомарным значением в D. Например, (имя: «Гарри», возраст: 25).

т : CD

Набор всех кортежей по D обозначается как ТD. Подмножество C для которого кортеж т определяется, называется домен из т (не путать с доменом в схеме) и обозначается как дом(т).

Наконец, мы определяем реляционная база данных учитывая схему S = (D, р, час) как функция

db : р → 2ТD

который отображает имена отношений в р к конечным подмножествам ТD, так что для каждого имени отношения р в р и кортеж т в db(р) выполняется

дом(т) = час(р).

Последнее требование просто гласит, что все кортежи в отношении должны содержать одни и те же имена столбцов, а именно те, которые определены для него в схеме.

Атомы

Для построения формул предположим бесконечное множество V кортежных переменных. Формулы определены с учетом схемы базы данных S = (D, р, час) и частичная функция тип : V ⇸ 2C, позвонил в присвоение типа, который назначает заголовки некоторым переменным кортежа. Затем мы определяем набор из атомарные формулы А[S,тип] со следующими правилами:

  1. если v и ш в V, а в тип(v) и б в тип(ш) то формула v.а = ш.б в А[S,тип],
  2. если v в V, а в тип(v) и k обозначает значение в D тогда формула v.а = k в А[S,тип], и
  3. если v в V, р в р и тип(v) = час(р) то формула р(v) в А[S,тип].

Примеры атомов:

  • (т.age = s.возраст) - т имеет возрастной атрибут и s имеет атрибут возраста с тем же значением
  • (т.name = "Codd") - кортеж т имеет атрибут name и его значение - "Codd"
  • Книга(т) - кортеж т присутствует в отношении Book.

Формальная семантика таких атомов определяется с учетом базы данных db над S и привязка переменной кортежа вал : VТD который отображает кортежные переменные в кортежи по области в S:

  1. v.а = ш.б верно тогда и только тогда, когда вал(v)(а) = вал(ш)(б)
  2. v.а = k верно тогда и только тогда, когда вал(v)(а) = k
  3. р(v) истинно тогда и только тогда, когда вал(v) в db(р)

Формулы

Атомы можно объединять в формулы, как это обычно бывает в логике первого порядка, с помощью логических операторов ∧ (и), ∨ (или) и ¬ (not), и мы можем использовать квантор существования (∃) и универсальный квантор (∀), чтобы связать переменные. Мы определяем набор формул F[S,тип] индуктивно по следующим правилам:

  1. каждый атом в А[S,тип] также в F[S,тип]
  2. если ж1 и ж2 находятся в F[S,тип], то формула ж1ж2 также в F[S,тип]
  3. если ж1 и ж2 находятся в F[S,тип] то формула ж1ж2 также в F[S,тип]
  4. если ж в F[S,тип], то формула ¬ ж также в F[S,тип]
  5. если v в V, ЧАС заголовок и ж формула в F[S,тип[v->ЧАС]], то формула ∃ v : ЧАС ( ж ) также в F[S,тип], где тип[v->ЧАС] обозначает функцию, равную тип за исключением того, что он отображает v к ЧАС,
  6. если v в V, ЧАС заголовок и ж формула в F[S,тип[v->ЧАС]], то формула ∀ v : ЧАС ( ж ) также в F[S,тип]

Примеры формул:

  • т.name = "C. J. Date" ∨ т.name = "Х. Дарвен"
  • Книга(т) ∨ Журнал (т)
  • т : {автор, название, тема} (¬ (Книга (т) ∧ т.author = "C. J. Date" ∧ ¬ ( т.subject = "реляционная модель")))

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

Мы будем предполагать, что квантификаторы количественно определяют совокупность всех кортежей в домене в схеме. Это приводит к следующей формальной семантике для формул в базе данных db над S и привязка переменной кортежа вал : V -> ТD:

  1. ж1ж2 верно тогда и только тогда, когда ж1 правда и ж2 правда,
  2. ж1ж2 верно тогда и только тогда, когда ж1 правда или ж2 верно или оба верны,
  3. ¬ ж верно тогда и только тогда, когда ж не правда,
  4. v : ЧАС ( ж ) истинно тогда и только тогда, когда существует кортеж т над D такой, что дом(т) = ЧАС и формула ж верно для вал[v->т], и
  5. v : ЧАС ( ж ) истинно тогда и только тогда, когда для всех кортежей т над D такой, что дом(т) = ЧАС формула ж верно для вал[v->т].

Запросы

Наконец, мы определяем, как выглядит выражение запроса с учетом схемы S = (D, р, час):

{ v : ЧАС | ж(v) }

где v переменная кортежа, ЧАС заголовок и ж(v) формулу в F[S,тип] где тип = { (v, ЧАС) } и с v как его единственная бесплатная переменная. Результат такого запроса для данной базы данных db над S это набор всех кортежей т над D с дом(т) = ЧАС такой, что ж верно для db и вал = { (v, т) }.

Примеры выражений запросов:

  • { т : {name} | ∃ s : {имя, заработная плата} (Сотрудник (s) ∧ s. зарплата = 50.000 ∧ т.name = s.имя ) }
  • { т : {поставщик, статья} | ∃ s : {s #, sname} (Поставщик (s) ∧ s.sname = т.supplier ∧ ∃ п : {p #, pname} (Продукт (п) ∧ п.pname = т.article ∧ ∃ а : {s #, p #} (Расходные материалы (а) ∧ s.s # = а.s # ∧ а.p # = п.п# ) }

Семантические и синтаксические ограничения исчисления

Независимые от домена запросы

Поскольку семантика квантификаторов такова, что они количественно определяют все кортежи по домену в схеме, может оказаться, что запрос может вернуть другой результат для определенной базы данных, если предполагается другая схема. Например, рассмотрим две схемы S1 = ( D1, р, час ) и S2 = ( D2, р, час ) с доменами D1 = { 1 }, D2 = {1, 2}, имена отношений р = {"г1"} и заголовки час = {("г1", {" a "})}. Обе схемы имеют общий экземпляр:

db = {("г1", {(" а ", 1)})}

Если мы рассмотрим следующее выражение запроса

{ т : {a} | т.a = т.a}

затем его результат на db либо {(a: 1)} ниже S1 или {(a: 1), (a: 2)} под S2. Также будет ясно, что если мы возьмем домен за бесконечное множество, то результат запроса также будет бесконечным. Для решения этих проблем мы ограничим свое внимание теми запросами, которые независимый от домена, то есть запросы, которые возвращают один и тот же результат для базы данных по всем ее схемам.

Интересным свойством этих запросов является то, что если мы предположим, что переменные кортежа изменяются в пределах так называемого активный домен базы данных, которая является подмножеством домена, которое встречается по крайней мере в одном кортеже в базе данных или в выражении запроса, то семантика выражений запроса не изменяется. Фактически, во многих определениях исчисления кортежей так определяется семантика кванторов, что делает все запросы по определению независимыми от предметной области.

Безопасные запросы

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

Для вывода ограниченности введем следующие правила рассуждений:

  1. в " v.а = ш.б "пара переменных-столбцов не связана,
  2. в " v.а = k "пара переменная-столбец v.а связан,
  3. в " р(v) "все пары v.а привязаны к а в тип(v),
  4. в " ж1ж2 "связаны все пары, которые связаны либо в ж1 или в ж2,
  5. в " ж1ж2 "связаны все пары, которые связаны как в ж1 И в ж2,
  6. в "¬ ж "пары не связаны,
  7. в "∃ v : ЧАС ( ж ) " пара ш.а связан, если он связан в ж и ш <> v, и
  8. в "∀ v : ЧАС ( ж ) " пара ш.а связан, если он связан в ж и ш <> v.

Для вывода равенства мы вводим следующие правила рассуждений (рядом с обычными правилами рассуждений для отношений эквивалентности: рефлексивность, симметрия и транзитивность):

  1. в " v.а = ш.б "он считает, что v.а == ш.б,
  2. в " v.а = k "пары не приравниваются,
  3. в " р(v) "пары не приравниваются,
  4. в " ж1ж2 "он считает, что v.а == ш.б если он держится либо в ж1 или в ж2,
  5. в " ж1ж2 "он считает, что v.а == ш.б если он держит оба в ж1 И в ж2,
  6. в "¬ ж "пары не приравниваются,
  7. в "∃ v : ЧАС ( ж ) "выполняется ш.а == Икс.б если он держится ж и ш<>v и Икс<>v, и
  8. в "∀ v : ЧАС ( ж ) "выполняется ш.а == Икс.б если он держится ж и ш<>v и Икс<>v.

Затем мы говорим, что выражение запроса {v: H | f (v)} есть Безопасно если

  • для каждого имени столбца а в ЧАС мы можем вывести это v.а приравнивается к связанной паре в ж,
  • для каждого подвыражения ж формы "∀ ш : г ( грамм ) "мы можем вывести, что для каждого имени столбца а в г мы можем вывести это ш.а приравнивается к связанной паре в грамм, и
  • для каждого подвыражения ж формы "∃ ш : г ( грамм ) "мы можем вывести, что для каждого имени столбца а в г мы можем вывести это ш.а приравнивается к связанной паре в грамм.

Ограничение на безопасные выражения запроса не ограничивает выразительность, поскольку все независимые от предметной области запросы, которые могут быть выражены, также могут быть выражены безопасным выражением запроса. Это можно доказать, показав, что для схемы S = (D, р, час), заданное множество K констант в выражении запроса, переменная кортежа v и заголовок ЧАС мы можем построить безопасную формулу для каждой пары v.а с а в ЧАС в котором указано, что его значение находится в активном домене. Например, предположим, что K={1,2}, р= {"r"} и час = {("r", {"a," b "})}, то соответствующая безопасная формула для v.b это:

v.b = 1 ∨ v.b = 2 ∨ ∃ ш (г (ш) ∧ ( v.b = ш.a ∨ v.b = ш.b))

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

Системы

Смотрите также

Рекомендации