|
Программирование >> Хронологические базы данных
в статье Лакруа (Lacroix) и Пиротте (Pirotte) [7.7] предлагается альтернативная версия исчисления, называемая исчислением доменов, в которой переменные кортежа изменяются на доменах, т.е. являются переменными, изменяемыми на доменах, а не на отношениях. В литературе предлагается множество языков исчисления доменов. Наиболее известный из нихпожалуй, Query-By-Example, или QBE [7.14] (в действительности он является смешанным, так как в языке QBE присутствуют и элементы исчисления кортежей). Сушествует несколько коммерческих реализаций этого языка. В общих чертах исчисление доменов будет описано в разделе 7.6, а язык QBE вкратце рассматривается в комментариях к [7.14]. Замечание. Пытаясь сделать эту главу короче, мы умышленно опускаем подробное описание некоторых вопросов, рассмотренных в главе 6, а именно: транзитивное замыкание, группирование, разгруппирование и реляционные сравнения. Мы также опускаем рассмотрение соответствующих версий реляционных операторов обновления. Все эти элементы можно перенести на почву реляционного исчисления (в версии кортежей или доменов) вполне очевидным способом. Кратко эти вопросы обсуждаются в [3.3]. 7.2. Исчисление кортежей Как и при описании реляционной алгебры в главе 6, сначала введем для реляционного исчисления конкретный синтаксис, взяв за образец (хотя умышленно не совсем точно) версию исчисления языка Tutorial D, определенного в [3.3], а затем перейдем к обсуждению семантики. В следующих ниже подразделах обсуждаются синтаксис и семантика. Синтаксис Замечание. Многие из приведенных здесь синтаксических правил не будут понятны вам до тех пор, пока вы не изучите семантический материал, следующий далее. Однако мы все же решили собрать все правила вместе для удобства ссылок. Начнем с повторения синтаксиса параметра <реляционное выражение>, приведенного в главе 6. <реляционное выражениё> ::= RELATION { < список выражений кортежей > } < имя переменной-отношения > <реляционная операция> ( <реляционное выражение> ) Иными словами, синтаксис параметра <реляционное выражение> остается прежним, однако один из наиболее важных его подпараметров, <реляционная операциЯ>, теперь будет иметь совершенно иное определение. <определение переменной кортежа> ::= RANGEVAR <имя переменной кортежа> RANGES OVER <список реляционных выражений> ; Данный тер.мин нелогичен: если исчисление доменов называется так по указанной причине, то исчисление кортежей следовало бы назвать исчислением отношений. Параметр <имя переменной кортежа> может использоваться как <выражение кортежа>, однако лишь в определенном контексте, а именно: перед точкой и последующим уточнением в параметре <ссылка на атрибут кортежа>; сразу после квантора в параметре <логическое выражение с KBaHTopoii>; как операнд в параметре <логическое выражение>; как параметр <прототип кортежа> или как (операнд) подпараметр <выражение> в параметре <прототип кортежа>. <ссылка на атрибут кортежа> ::= <имя переменной кортежа>.<ссылка на атрибут [ AS <имя атрибута> ] Параметр <ссылка на атрибут кортежа> может использоваться как параметр <выражение>, но только в определенном контексте, а именно: как операнд параметра <логическое выражение>; как параметр <прототип кортежа> или как (операнд) подпараметр <выражение> в параметре <прототип кортежа>. <логическое выражение> ::= ... все обычные возможности вместе с: I <логическое выражение с квантороаО Ссылки на переменные кортежей в значении параметра <логическое выражение> могут быть свободными в пределах этого параметра тогда и только тогда, когда выполнены два следующих условия. Параметр <логическое выражениё> расположен непосредственно после параметра <реляционная операциЯ> (т.е. параметр <логическое выражение> следует сразу за ключевым словом WHERE). Ссылка (обязательно свободная) именно на эту переменную кортежа непосредственно присутствует в значении параметра <прототип кортежа>, непосредственно содержащегося в том же выражении <реляционная операциЯ> (т.е. параметр <прототип кортежа> располагается непосредственно перед ключевым словом WHERE). Замечание по терминологии. В контексте реляционного исчисления (в версии исчисления доменов или исчисления кортежей) логические выражения часто называют правильно построенными формулами (well-formed formulas- WFF, что произносится как вэфф ). Далее мы также будем часто пользоваться этой терминологией. <логическое выражение с квантороМ> ::= EXISTS <имя переменной кортежа> ( <логическое выражение> ) I FORALL <имя переменной кортежа> ( <логическое выражение> ) Как и в главе б, мы не приводим здесь подробного описания параметра <выражение кортежа>, надеясь, что общая идея его построения будет понятна из примеров <реляционная операциЯ> ::= <прототип кортежа> [ WHERE <логическое выражение> ] В реляционной алгебре, рассмотренной в главе 6, параметр <реляционная операции представлял собой одну из форм параметра <реляционное выражение>, однако здесь он определяется иначе. Другие формы параметра <реляционное выражение> (в основном, имена переменных-отношений и обрашение к операторам выбора) допустимы, как и ранее. <прототип кортежа> ::= <выражение кортежа> Все ссылки на переменные кортежа, помешенные непосредственно в значение параметра <прототип кортежа>, должны быть свободными в пределах данного параметра <прототип кортежа>. Замечание. Прототип кортежа - термин удачный, но не стандартный. Переменные кортежей Приведем несколько примеров определения переменных кортежей (выраженных, как обычно, в контексте базы данных поставшиков и деталей). RANGEVAR SX RANGES OVER S ; RANGEVAR SY RANGES OVER S ; RANGEVAR SPX RANGES OVER SP ; RANGEVAR SPY RANGES OVER SP ; RANGEVAR PX RANGES OVER P ; RANGEVAR SU RANGES OVER ( SX WHERE SX.CITY = London ) , { SX WHERE EXISTS SPX ( SPX.S# = SX.Si AND SPX.Pi SPX = Pi { РГ ) ) ) ; Переменная кортежа SU из последнего примера определена на объединении множества кортежей поставшиков, находящихся в Лондоне, и множества кортежей поставщиков детали с номером Р1. Обратите внимание, что в определении переменной кортежа SU используются переменные кортежей SX и SPX. Также обратите внимание на то, что в подобных определениях переменных, построенных на объединении отношений, объединяемые отношения, безусловно, должны быть совместимы по типу. Замечание. Переменные кортежей не являются переменными в обычном смысле (как в языках программирования); они являются переменными в логическом смысле. В действительности они в значительной мере аналогичны местодержателям или параметрам предикатов, обсуждавшихся в главе 3. (Различие состоит в том, что на место параметров предикатов, обсуждавшихся в этой главе, подставляются значения из некоторого домена, а на место переменных кортежей подставляются кортежи.) Далее в этой главе предполагается, что приведенные выше определения переменных кортежей остаются в силе. Следует отметить, что в реальном языке должны быть определенные правила относительно области действия таких определений. В настоящей главе этот вопрос не рассматривается.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |