
- •20.7. Средства sql
- •20.8. Резюме
- •21.1. Введение
- •21.2. Некоторые аспекты технологам поддержки принятия решений
- •21.3. Проектирование базы данных поддержки принятия решений
- •21.5. Хранилища данных и магазины данных
- •21.6. Оперативная аналитическая обработка
- •21.7. Разработка данных
- •21.8. Резюме
- •22.1. Введение
- •22.2. Хронологические данные
- •22.3. Основная проблема хронологических баз данных
- •22.4. Интервалы
- •22.5. Интервальные типы
- •22.6. Скалярные операторы для интервалов
- •22.7. Операторы обобщения для интервалов
- •22.8. Реляционные операторы для обработки интервалов
- •22.9. Ограничения, включающие интервалы
- •22.10. Операторы обновления, включающие интервалы
- •22.11. Проектирование базы данных
- •22.12. Резюме
- •23.1. Введение
- •23.2. Обзор основных концепций
- •23.3. Исчисление высказываний
- •23.4. Исчисление предикатов
- •23.5. Базы данных с точки зрения доказательно-теоретического подхода
- •23.6. Дедуктивные субд
- •23.7. Обработка рекурсивных запросов
- •23.8. Резюме
- •Часть VI
- •24.1. Введение
- •24.2. Объекты, классы, методы и сообщения
- •24.3. Еще раз об объектах и объектных классах
- •Cdo для класса set (ref(emp))
- •24.4. Простой пример
- •1 | Course с001 , с001 0ffs , с001 ny offs |
- •24.5. Дополнительные аспекты
- •24.6. Резюме
- •25.1. Введение
- •X2 rational, y2 rational ) ... ;
- •25.2. Первая грубейшая ошибка
- •25.3. Вторая грубейшая ошибка
- •25.4. Вопросы реализации
- •25.5. Преимущества реального сближения двух технологий
- •25.6. Резюме
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
(в
течение) здесь не
подразумевает
"в течение всего интервала времени
".
Следуя [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.