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

22.6. Скалярные операторы для интервалов

В этом разделе будут определены некоторые полезные операторы, применяемые к значениям интервалов. Большинство из этих операторов более или менее понятны без дополнительных объяснений. Рассмотрим интервальный тип INTERVAL {РТ). Пусть р бу­дет значением типа РТ. Обозначения р+1, р+2 и т.д. по-прежнему будут использоваться для указания преемника р, преемника р+1 и т.д. В реальном языке для получения сле­дующего значения может применяться некоторый оператор NEXT. Также будут использо­ваться обозначения р-1, р-2 и т.д. для указания значений, преемниками которых являют­ся р, р-1 и т.д. В реальном языке для получения предыдущего значения может использо­ваться некоторый оператор PRIOR.

Пусть pi и р2— значения типа РТ. Определим оператор MAX{pl,p2) как оператор, возвращающий значение р2, если pl<p2, и значение pi в противном случае. Оператор MIN(pI ,р2) возвращает значение pi, если pl<p2, и значение р2 в противном случае.

Обозначения, которые использовались до сих пор, применялись для операций интер­вальных выборок, по крайней мере в неформальном контексте. Например, в результате обращения к выборке интервалов (3,5] и (3,6) получим значения типа INTERVAL (INTEGER), которые будут содержать точки 3, 4 и 5. В реальном языке может потребоваться явный синтаксис, например INTERVAL ([3,5]).

Пусть il будет интервалом [si, el] типа INTERVAL {РТ). Как указывалось выше, опе­ратор START{il) возвращает значение si, а оператор END(iJ) — значение el. Кроме то­го, определим оператор STOP(ii), который возвращает значение el+1. Также обозначим через 12 еще один интервал [s2,e2\ типа INTERVAL (РТ). Теперь дадим определение опе­раторов сравнения интервалов.

Замечание. Эти операторы также называются операторами Аллена, по имени автора (Allen), впервые их предложившего [22.1]. В качестве упражнения можно попытаться начертить простые схемы, которые иллюстрируют эти операторы.

  • Оператор сравнения il=i2 возвращает значение истина тогда и только тогда, ко­гда sl=s2 и el=e2.

  • Оператор предшествования интервала i 1 BEFORE 12 возвращает значение истина тогда и только тогда, когда el<s2.

  • Оператор смежности интервалов il MEETS 12 возвращает значение истина тогда и только тогда, когда s2=el+l или sJ=e2+J.

  • Оператор перекрытия интервалов il OVERLAPS i2 возвращает значение истина тогда и только тогда, когда sl<e2 и s2<el.

  • Оператор вхождения интервала il DURING i2 возвращает значение истина тогда и только тогда, когда s2<sl и e2>ei7.

  • Оператор начального интервала il STARTS i2 возвращает значение истина тогда и только тогда, когда sl=s2 и el<e2.

  • Оператор конечного интервала il FINISHES i2 возвращает значение истина то­гда и только тогда, когда el=e2 и sl>s2.

В виде исключения в данном случае все же заметим, что название оператора DURING (в течение) здесь не подразумевает "в течение всего интервала времени ".

Замечание. Определения этих операторов иначе можно представить в терминах то­чек (соответствующего точечного типа). Например, можно сказать, что оператор il OVERLAPS i2 возвращает значение истина тогда и только тогда, когда существует значение р типа РТ, такое, что оба выражения, р Ш 11 ир IN 12, истинны.

Следуя [22.3], можно также определить дополнительные операторы.

  • Оператор слияния интервалов il MERGES i2 возвращает значение истина тогда и только тогда, когда один из операторов, il MEETS i2 или iJ OVERLAPS i2, воз­вращает значение истина.

  • Оператор содержания интервала i 1 CONTAINS i2 возвращает значение истина то­гда и только тогда, когда оператор 12 DURING il возвращает значение истина*.

Чтобы получить длину (если можно так выразиться) интервала, используют оператор DURATION(i), который возвращает количество точек в интервале i, например DURATION{[d03,d07]) = 5.

И раконец определим некоторые бинарные операторы для интервалов, которые воз­вращают интервалы.

  • Результатом выполнения оператора объединения интервалов il UNION i2 являет­ся интервал [MIN(sJ,s2) ,ШК(е1,е2) ], если оператор il MERGES i2 возвращает значение истина; в противном случае операция объединения не определена.

  • Результатом выполнения оператора пересечения интервалов il INTERSECT i2 явля­ется интервал [WX{sl,s2) ,MIN(ei,e2) ], если оператор il OVERLAPS 12возвращает значение истина; в противном случае операция пересечения не определена.

Замечание. Здесь операторы UNION и INTERSECT представляют собой обычные опера­торы обработки множеств и не являются их специальными реляционными аналогами. В статье [22.3] они называются соответственно MERGE и INTERVSECT.

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