Скачиваний:
77
Добавлен:
02.05.2014
Размер:
2.54 Mб
Скачать

22.12. Резюме

В начале главы был отмечен все возрастающий интерес к базам данных, содержащим не только текущие, но и исторические сведения. Также было показано, что представле­ние исторических данных с использованием лишь временных отметок (timestamp) при­водит к серьезным трудностям и, в частности, очень усложняет задание некоторых огра­ничений и формулировку определенных запросов. В качестве лучшего подхода рассмат­ривалось использование скалярных ("инкапсулированных") интервалов: обсуждался генератор типа INTERVAL вместе с несколькими новыми операторами, необходимыми для обработки интервальных данных, хотя все эти операторы, напомним, представляют собой просто некоторые сокращения. Интервалы и связанные с ними операторы могут быть полезны не только для хронологических данных как таковых; к сожалению, наш пример основывался лишь на типе INTERVAL (DATE). В настоящей главе также приводи­лись примеры хронологических отношений и рассматривались хронологические пе­ременные-отношения с атрибутами этого специфического типа.

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

Рассмотренные здесь операторы включали операторы для обработки собственно ин­тервалов, операторы для обработки множеств интервалов и операторы для обработки хронологических отношений. К операторам для обработки интервалов относятся START и END, а также операторы Аллена. К операторам для обработки множеств интервалов от­носятся UNFOLD и COALESCE. К операторам для обработки хронологических отношений относятся реляционные версии операторов UNFOLD и COALESCE. Также здесь обсужда­лись некоторые специализированные операторы обновления и некоторые специализи­рованные ограничения целостности для хронологических переменных-отношений ("хронологические ключи"). Было показано, что большинство из этих новых операторов могли бы фактически рассматриваться как хронологические аналоги соответствующих обычных конструкций.

Далее были рассмотрены две важные канонические формы для множеств интерва­лов одного и того же типа — развернутая форма и свернутая форма. Множество ин­тервалов типа INTERVAL (РТ) представлено в развернутой форме, если каждый интер­вал в множестве является единичным интервалом, т.е. интервалом, содержащим ровно одну точку, где точка — это значение основного точечного типа РТ. Множество ин­тервалов типа INTERVAL (РТ) представлено в свернутой форме, если никакие два от­дельных интервала в этом множестве не перекрываются и не являются смежными. Обе канонические формы обладают преимуществом освобождения от определенных видов избыточности. Свернутая форма максимально краткая и имеет психологические преимущества, а развернутой формой легче оперировать (избавляют от необходимости иметь специальные ограничения и операторы обновления, рассмотренные в разде­лах 22.9 и 22.10). Затем было показано, как концепции этих канонических форм могут быть расширены до отношений с интервальными атрибутами, что приводит к новым важным реляционным операторам UNFOLD и COALESCE. Эти операторы использовались для определения хронологических аналогов обычных реляционных операторов проек­ции и вычисления разности.

И наконец было уделено внимание вопросам проектирования базы данных, связан­ным с горизонтальной и вертикальной декомпозициями некоторых хронологических переменных-отношений.

Упражнения

22.1.

а) В языке SQL тип данных VARCHAR( 3) включает все строки длиной до трех сим- волов, входящих в набор символов по умолчанию, под которым подразумевает- ся набор символов кода ASCII. Как вы полагаете, можно ли считать тип INTERVAL(VARCHAR(3)) приемлемым интервальным типом?

б) Если ваш ответ на предыдущий вопрос — "Да", то выразите закрыто-открытый интер- вал [' р', ' q') этого типа с помощью закрыто-закрытого обозначения интервала.

  1. В разделе 22.8 был определен оператор получения хронологической разности I_MINUS. Операторы хронологического объединения (I_UNI0N) и хронологического пересечения (I_INTERSECT) могут быть определены аналогично. Дайте соответст­вующие определения этим операторам.

  2. Предположим, что переменная-отношение S_DURING имеет ограничение, требую­щее, чтобы она была свернута по атрибуту DURING, и предположим, что необходи­мо обновить эту переменную-отношение с целью отразить тот факт, что поставщи­ку с номером 'S1' присвоен статус 20 на период с дня 11 по день 15. Приведите оператор, с помощью которого можно получить желаемый результат. При этом нельзя считать, что операторы обновления расширены так, как было предложено в разделе 22.10. Однако можно считать, что переменная-отношение S_DURING содер­жит данные о поставщике с номером 'S1' на день 10, а данные после этого дня для него отсутствуют. Не делайте никаких предположений относительно того, каким может быть существующий статус поставщика с номером 'S1' на день 10.

  3. В этой главе было показано, как определенные операторы, которые применяются к интервальным атрибутам вообще, в частности могут оказаться очень полезны­ми и для хронологических интервалов. Предложите какие-либо иные возможные применения этих операторов для обработки интервалов, которые не являются хронологическими.

  4. Приведите реальные примеры отношений, у которых имеется более одного интер­вального атрибута (хронологического или иного типа).

  5. Еще раз обратимся к переменной-отношению S_DURING. В любое заданное время, если имеются какие-либо поставщики, с которыми на этот период был заключен договор, имеется и некоторый статус smax, такой, что ни один из поставщиков в этот период не имел статус выше статуса smax. С помощью описанных в этой главе операторов получите свернутое отношение, в котором каждое значение статуса, когда-либо являвшееся значением smax, будет связано с интервалом времени, когда оно имело значение smax.

  1. Дано отношение HW с атрибутами NAME, HEIGHT и WEIGHT, представляющими имя, рост и вес некоторого человека. Напишите запрос, который для каждого записан­ного значения веса покажет все диапазоны значений роста, таких, что для каждого значения роста в этом диапазоне существует по крайней мере один человек с дан­ным ростом и весом.

  2. Рассмотрим отношение *? с двумя различными интервальными атрибутами II и 12. Докажите или опровергните следующие утверждения.

а) (R UNFOLD II) UNFOLD 12 я (R UNFOLD 12) UNFOLD II

б) (R COALESCE II) COALESCE 12 = {R COALESCE 12) COALESCE II

22.9. Можете ли вы привести пример переменной-отношения с интервальным атрибу- том, которую было бы нежелательно поддерживать в свернутой форме?

22.10.Исследуйте возможности расширения понятия "хронологического внешнего клю­ча" для включения ссылочных действий, таких как каскадное удаление.

Список литературы

Вместо того чтобы приводить здесь список работ, который может оказаться слишком объемным, мы просто обратим ваше внимание на то, что в [22.2] содержится обширный список литературы по теме данной главы.

  1. Allen J.F. Maintaining Knowledge about Temporal Intervals // CACM. — "November, 1983. — 16, № 11.

  2. Etzion O., Jajodia S., Sripada S. (eds.) Temporal Databases: Reaserch and Practice. — New York, N.Y.: Springer Verlag, 1998.

Антология, представляющая состояние исследований данной темы на 1997 год, а также превосходная первая работа для дальнейшего изучения. Четвертая часть, Part 4: General Reference, включает обширную библиографию и версию словаря терминов, The Consensus Glossary of Temporal Database Concepts, по состоянию на февраль 1998 года. Вторая часть, Part 2: Temporal Query Languages, включает ста­тью "Valid Time and Transaction Time Proposals: Language Design Aspects", в кото­рой автор оригинального текста настоящей главы Хью Дарвен (Hugh Darwen) при­водит доводы против подхода, принимающего язык TSQL2, и настаивает на том, что в определениях языка TSQL2 [22.4] имеются существенные недостатки. Также во вторую часть входит статья Дэвида Томэна (David Toman) "Point-Based Temporal Extensions of SQL and Their Efficient Implementation", в которой предлага­ется расширение языка SQL, основанное на точках, а не интервалах. Эта идея под­нимает некоторые интересные вопросы, касающиеся реализации. Ответы на них могли быть применимы и для подхода, основанного на интервалах, поскольку "единичные интервалы", которые получаются в развернутой форме (UNFOLD), "фактически" представляют точки (на самом деле они действительно являются точками в языке IXSQL; см. аннотацию к [22.3]).

22.3. Lorentzos N.A., Mitsopoulos Y.G. SQL Extension for Interval Data // IEEE Transactions on Knowledge and Data Engineering. — May/June, 1997. — 9, № 3.

Многие идеи, которые обсуждались в настоящей главе, основаны на результатах исследований, описанных в данной статье. Как и предыдущая работа, эта статья содержит множество полезных ссылок.

Прежде чем представить собственное расширение языка SQL, авторы опреде­лили реляционную алгебру, дополненную интервалами (Interval-Extended Relational Algebra). Предлагаемое расширение языка SQL называется IXSQL (иногда произносят, как "девять SQL") и не предназначено исключительно для хронологических интервалов. Поскольку ключевые слова INTERVAL и COALESCE уже используются в языке SQL для других целей, авторы предлагают вместо них ключевые слова PERIOD (даже для не хронологических интервалов) и NORMALISE (обратите внимание на написание). Как указывалось в аннотации к [22.2], оператор UNFOLD в языке IXSQL отличается от нашего тем, что в ре­зультате его выполнения получаются точки, а не единичные интервалы. По­этому авторы предлагают обратный оператор FOLD, который преобразует точки в интервалы, а затем свертывает их. Эти операторы предлагаются не как от­дельные операторы, а как дополнительные предложения обычной конструкции SELECT-FROM-WHERE. Интересно, что вновь введенное предложение NORMALISE ON не только записывается последним, но и выполняется последним (что явля­ется отклонением от правил языка SQL; см. приложение Б). Иными словами, вывод предложения SELECT является вводом для предложения NORMALISE ON (по веским причинам).

22.4. Snodgrass R.T. The Temporal Query Language TASQL2. — Dortrecht, Netherlands: Kluwer Academic Pub., 1995.

Язык TSQL2 — это множество предложенных расширений для языка SQL. Комитет языка TSQL2 в значительной степени отверг общий подход к исполь­зованию скалярных и реляционных операторов для интервалов в пользу того, что больше подходит в особых случаях. Вместо простой поддержки генератора интервального типа и связанных с ним операторов были предложены различ­ные специального вида таблицы: таблицы снимков, таблицы допустимого времени состояния, таблицы допустимого времени события, таблицы време­ни транзакций, таблицы двухронологического состояния и таблицы двухроно-логических событий.

  • Таблица снимков — это таблица в обычном стиле языка SQL, возможно, вклю­чающая столбцы данных типа PERIOD (как и в языке IXSQL [22.3], это ключевое слово используется вместо ключевого слова INTERVAL, которое уже употребля­ется в языке SQL для других целей).

  • Все остальные виды таблиц имеют хронологическую поддержку. Хронологиче­ская поддержка означает существование для каждой строки одного или двух хронологических элементов. Хронологический элемент— это множество вре­менных отметок, причем каждая временная отметка представляет собой или значение типа PERIOD, или значение некоторого типа даты-времени. (Обратите внимание, что термин "временная отметка" здесь используется не в его при­вычном, принятом в языке SQL/92 смысле.)

Хронологические элементы, содержащие значения типа PERIOD, определяются как свер­нутые14. Хронологические элементы не выступают в роли обычных столбцов; вместо это­го доступ к ним осуществляется с помощью операторов специального назначения. Ниже приведен краткий обзор различного вида таблиц "с хронологической поддержкой".

  • В таблицах допустимого времени состояния и таблицах времени транзакций каждая временная отметка — это значение типа PERIOD.

  • В таблицах допустимого времени события каждая временная отметка— это значение некоторого типа даты-времени.

  • Двухронологическая таблица представляет собой одновременно таблицу времени транзакций и либо таблицу допустимого времени состояния, либо таблицу допус­тимого времени события. Каждая строка в двухронологической таблице имеет два хронологических элемента: один — для времени транзакции, другой— для до­пустимого времени. Поэтому двухронологическая таблица может обрабатываться как таблица времени транзакций или как таблица допустимого времени.

Версия языка TSQL2, которая была предложена организацией ISO (но не была принята) для включения в стандарт в 1996 году, отличается от версии, описанной в [22.4], где таблицы с хронологической поддержкой всегда были "не вложенными" (т.е. каждый элемент представлял собой отдельную временную отметку, а не множество отметок). Также не указывалось, свер­нута таблица или нет.

15 На самом деле есть другое отличие между языком TSOL2, как он определен в [22.4], и вер­сией, предложенной ISO. В [22.4] требуется ключевое слово SNAPSHOT после слова SELECT, озна­чающее, что некоторый запрос зависит от текущего состояния каждой из таблиц, на которые он ссылается. В версии, предлагаемой ISO, это не требуется.

В языке TSQL2 строго соблюдается так называемая хронологическая прямая со­вместимость. Ее суть заключается в том, чтобы можно было добавить "хронологическую поддержку" к существующей базовой таблице путем преобра­зования базовой таблицы из таблицы снимка в некоторого вида хронологическую таблицу. С этого момента все обычные SQL-операции над такой базовой таблицей интерпретируются как операции над текущей версией моментального снимка этой таблицы15, но теперь они могут иметь новый побочный эффект. В частности, опе­рации обновления и удаления для текущей версии моментального снимка сохра­няют старые версии строк как строк с хронологическими элементами. Выбранный в языке TSQL2 подход приобретает большое преимущество благодаря так называемым последовательным операциям. Последовательная операция выра­жается как операция над моментальным снимком базы данных (обычно — над те­кущим снимком), но выполняется так, как если бы это был каждый моментальный снимок. Результат выполнения последовательного запроса для таблиц допустимого времени, например, является таблицей допустимого времени. Сам запрос выража­ется так, как будто это запрос текущего снимка базы данных с добавлением от­дельного ключевого слова, чтобы можно было указать, что это последовательный запрос. В прикладных программах, в которых выдаются такие запросы, должно быть создано специальное обеспечение для доступа к временной отметке в резуль­тирующих строках.

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

Ответы к некоторым упражнениям

22.1.

а) Вероятно, нет (хотя мог бы и быть).

б) Символьная строка, непосредственно предшествующая символу 'q', зависит от того, какой именно символ является последним в используемой сопоставимой последовательности (см. [4.19], где рассматриваются сопоставимые последова- тельности языка SQL). Если последним является символ Ч', то ответ будет та- ким: ['р', 'pZZ'].

Замечание. Напомним, что, строго говоря, элемент "(3)" в описании VARCHAR(3) лучше считать не частью типа как такового, а ограничением целостности. 22.2. Во-первых, выражение Rl I_UNI0N R2 ON А равносильно следующему выражению.

( Rl ONION R2 ) COALESCE А

Обратите внимание, что нет необходимости в развертывании переменных-отношений R1 и R2 по атрибуту А до выполнения операции свертывания (почему?). Во-вторых, выражение Rl I_INTERSECT R2 ON А равносильно следующему выражению.

( ( EXTEND ( ( Rl RENAME A AS Al ) JOIN { R2 RENAME A AS A2 ) ADD ( Al INTERSECT A2 AS A ) { ALL BUT Al, A2 } )

И вновь нет необходимости в развертывании переменных-отношений R1 и R2 по ат­рибуту А. Более того, если переменные-отношения R1 и R2 фактически свернуты по атрибуту А, нет необходимости и в заключительном этапе свертывания (почему?). Хронологические версии других реляционных операторов (например, I JOIN) мо­гут быть определены аналогично. В частности, специальные версии операторов UPDATE и DELETE, описанные в разделе 22.10, подразумевают неявное использова­ние хронологической версии операции выборки.

Исключение — операция SUMMARIZE (см. ответ к упр. 22.6).


Замечание. Возможно, следовало бы объяснить, почему в этой главе больше вни­мания уделялось именно сокращению I_MINUS. Дело в том, что сокращение I_MINUS включает развертывание, в то время как другие хронологические реляци­онные операторы (как мы уже убедились) обычно его не включают16, и желатель­но, где это возможно, избегать таких развертываний.

22.3. Вот возможное решение.

IF IS_EMPTY ( S_DURING WHERE SI = SI {'SI')

AND STATUS =20 AND END { DURING ) = dlO ) THEN INSERT INTO S_DURING

( EXTEND { S_DURING WHERE Si = Si ('SI')

AND END ( DURING ) = dlO )

{ ALL BUT DURING } AND INTERVAL ( [ dll, dl5 ] ) AS DURING ; ELSE UPDATE S_DURING WHERE Si = Si ('SI')

AND END ( DURING ) = dlO DURING := INTERVAL ( [ START ( DURING ), dl5 ] );

  1. Животные отличаются между собой диапазоном частоты света и звуковых волн, которые воспринимают их глаза и уши. Существуют различные природные явле­ния, и можно измерять в диапазонах глубину почвы или моря либо высоту над уровнем моря. Тот факт, что чай пьют во второй половине дня, между 16.00 и 17.00,— это тоже хронологическое наблюдение, но оно существенно отличается от примеров в этой главе (чем именно?). Не вызывает сомнения, что можно при­думать множество подобных примеров, на которых могут основываться интерес­ные приложения баз данных.

  2. Животные отличаются между собой диапазоном частоты света и звуковых волн, которые воспринимают их глаза и уши! Кроме того, как только мы соединим два хронологических отношения R1{A,B) и R2{A, С), где В и С— интервальные атрибу­ты, будет получен результат (хотя и промежуточный), который имеет больше од­ного интервального атрибута.

22.6.

WITH SP_DURING UNFOLD DURING AS SP UNFOLDED :

( SUMMARIZE SP UNFOLDED PER SPJJNFOLDED { DURING }

ADD MAX ( STATUS ) AS SMAX ) COALESCE DURING

22.7.

( { EXTEND HW { HEIGHT, WEIGTH }

ADD INTERVAL ( [ HEIGHT, HEIGHT ] ) AS HR )

{ WEIGTH, HR } ) COALESCE HR

22.8. Утверждение а, как нетрудно заметить, допустимо. Утверждение б, как мы сейчас убедимся, недопустимо. Пусть переменная-отношение R будет иметь

следующий вид.

11

12

[d01,d01} [d01,d02] [d03,d04] \d04,d04]

[d08,d09] [d08,d09] [d08,d08] \d08,d08]

Тогда результирующее отношение U выражений (R UNFOLD II) UNFOLD 12 и (R UNFOLD 12) UNFOLD 11 будет иметь такой вид.

11

12

[d01,d01]

[d08,d08]

[d01,d01]

[d09,d09]

[d02,d02]

[d08,d08]

[d02,d02]

[d09,d09]

[d03,d03]

[d08,d08]

[d04,d04]

[d08,d08]

Однако результат выполнения выражения (U COALESCE II) COALESCE 12 будет следующим.

11

12

[d01,d02] [d03,d04]

[d09,d09] [d08,d08\

Результат выполнения выражения (U COALESCE 12) COALESCE II будет таким.

11

12

[d01,d02] \d03,d04)

[d08,d09] \d08,d08]

Предлагаем вам проверить сказанное выше, записав результаты выполнения выра­жений U COALESCE II и О COALESCE 12, а затем свернув полученные результаты по атрибутам 12 и II соответственно. Также мы предлагаем следующие сокращения.

  • R UNFOLD 11,12 a (R UNFOLD II) UNFOLD 12

  • R COALESCE 11,12 = (R COALESCE II) COALESCE 12

J

Глава

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

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]