Программирование >>  Хронологические базы данных 

1 ... 286 287 288 [ 289 ] 290 291 292 ... 348


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

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

22.1.

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

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

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

( R1 UNION R2 ) COALESCE А

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

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

И вновь нет необходимости в развертывании переменных-отношений Rl и R2 по атрибуту А. Более того, если переменные-отношения R1 и R2 фактически свернуты по атрибуту А, нет необходимости и в заключительном этапе свертывания (почему?).

Хронологические версии других реляционных операторов (например, I JOIN) могут быть определены аналогично. В частности, специальные версии операторов UPDATE и DELETE, описанные в разделе 22.10, подразумевают неявное использование хронологической версии операции выборки.

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

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



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

IF ISJMPTY ( S DURING WHERE Sl = Sl (Sl)

AND STATUS = 20 AND END ( DURING ) = dlO ) THEN INSERT INTO S DURING

( EXTEND ( S DURING WHERE S# = S# (Sl)

AND END ( DURING ) = dlO )

{ ALL BUT DURING } AND INTERVAL ( [ dll, dl5 ] ) AS DURING ; ELSE UPDATE S DURING WHERE S# = S# (Sl)

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

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

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

22.6.

WITH SP DURING UNFOLD DURING AS SP UNFOLDED :

( SUMMARIZE SP UNFOLDED PER SP UNFOLDED { 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. Утверждение a, как нетрудно заметить, допустимо. Утверждение б, как мы сейчас убедимся, недопустимо. Пусть переменная-отношение R будет иметь следуюший вид.

[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 будет иметь такой вид.



[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 будет следующим.

[d01,d02] [d03,d04]

[d09,d09] [d08,d08]

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

[d01,d02] [d03,d04]

[d08,d09] [d08,d08]

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

R UNFOLD 11,12 = {R UNFOLD II) UNFOLD 12

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



1 ... 286 287 288 [ 289 ] 290 291 292 ... 348

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика