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

1 ... 278 279 280 [ 281 ] 282 283 284 ... 348


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

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

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

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

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

Оператор сравнения Ц-=12 возвращает значение истина тогда и только тогда, когда sl=s2 и el=e2.

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

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

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

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

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

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

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

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



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

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

Оператор содержания интервала И CONTAINS 12 возвращает значение истина тогда и только тогда, когда оператор 12 DURING ii возвращает значение истина.

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

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

Результатом выполнения оператора объединения интервалов И UNION 12 является интервал [MIN(si,s2) ,MAX(ei,e-?) ], если оператор ii MERGES i2 возвращает значение истина; в противном случае операция объединения не определена.

Результатом выполнения оператора пересечения интервалов ii INTERSECT i2 является интервал [MAX(si,s2) ,MIN(ei,e2) ], если оператор ii OVERLAPS i2вoзвpaщaeт значение истина; в противном сл>чае операция пересечения не определена.

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

22.7. Операторы обобиоения для интервалов

в этом разделе будут рассмотрены два чрезвычайно важных оператора: UNFOLD (развернуть) и COALESCE (свернуть). Они обрабатывают множество интервальных значений того же типа, что и их собственный операнд, и возвращают другое такое множество. Результат в обоих случаях можно рассматривать как определенную каноническую форму для исходного множества (о канонической форме читайте в разделе 17.3 главы 17).

Дальнейщее обсуждение будет основываться на следующих исходных данных. Пусть XI и Х2 представляют собой два показанных ниже множества соответственно.

{ [d01,d01], [d03,d05], [d04,d06] }

{ [d01,d01], [d03,d04], [d05,d05], [d05,d06] }

Нетрудно заметить, что XI и X2 - это не одно и то же множество. Почти так же легко заметить, что множество всех точек р, таких, которые содержатся в некотором интервале в XI, то же самое, что и множество всех точек р, таких, которые содержатся в некотором интервале в Х2. В это множество включены точки dOl, d03, d04, d05 и d06. Однако по соображениям, которые вскоре станут понятными, нас не так интересует множество самих точек, как соответствующее множество единичных интервалов. Назовем его ХЗ.

* Возможно, в этом случае более подходящим названием оператора было бы INCLUDES (включает), тогда можно было бы использовать ключевое слово CONTAINS (содержит) для оператора, обратного оператору IN, определив его как i CONTAINS р, что равносильно р IN 1.



{ [d01,d01], [d03,d03], [d04,d04], [d05,d05], [d06,d06] }

Говорят, что интервал ХЗ - это развернутая форма интервала XI (и Х2). В общем случае, если X является множеством интервалов и все они имеют один и тот же тип, развернутая форма множествах- это множество всех интервалов вида [р, р], где р - точка в некотором интервале из множества X.

Отметим, что множества XI, Х2 и ХЗ имеют разную кардинальность, т.е. отличаются количеством элементов. В нашем примере получилось так, что множество ХЗ, т.е. развернутая форма, имеет наибольшую кардинальность среди всех трех множеств примера. Но можно легко найти такое множество Х4, которое имеет ту же развернутую форму, что и множество XI, но кардинальность которого больше кардинальности множества ХЗ (упражнение для читателя). Также легко можно найти более интересное, и единственное, множество Х5, которое имеет ту же развернутую форму, но минимально возможную кардинальность.

{ [d01,d01], [d03,d06] }

Множество Х5 называют свернутой формой множества XI (а также Х2, ХЗ и Х4). В общем случае, если X является множеством интервалов и все они имеют один и тот же тип, свернутая форма множествах- это множество Y, элементами которого являются интервалы одного и того же типа, такие, что множества Хи Y имеют одну и ту же развернутую форму и не существует двух отдельных элементов ii и 12 множества У, таких, что оператор ii MERGES 12 возвращает значение истина. Отметим, что, как мы уже видели, многие различные множества могут иметь одну и ту же свернутую форму. Кроме того, определение свернутой формы зависит (а определение развернутой формы не зависит) от определения функции следования для соответствующего точечного типа.

Теперь можно определить операторы UNFOLD и COALESCE. Пусть X- это множество интервалов типа INTERVAL (РГ). Тогда оператор UNFOLD возвращает развернутую форму множества X, а оператор COALESCE - свернутую форму множества X.

Замечание. Следует подчеркнуть, что термины развернутая форма и свернутая форма не являются стандартными. Фактически еще нет стандартных терминов для этих понятий, хотя сами понятия, безусловно, обсуждаются в литературе.

Рассмотренные канонические формы играют важную роль в решениях, к которым мы, наконец, начали приближаться, чтобы найти подходы к разрешению проблем, обсуждаемых в разделе 22.3. Однако операторы UNFOLD и COALESCE- это не совсем то, что нам нужно. Они представляют лишь этап на пути к нашей цели. Нам необходимы некоторые реляционные аналоги данных операторов, поэтому в следующем разделе будут даны определения таких аналогов.

22.8. Реляционные операторы для обработки интервалов

Скалярные операторы для обработки интервалов, описанные в разделе 22.6, конечно, могут использоваться и в скалярных выражениях, которые, в свою очередь, могут применяться в соответствующих местах реляционных выражений. В языке Tutorial D, например, к таким местам относятся в основном предложения WHERE в



1 ... 278 279 280 [ 281 ] 282 283 284 ... 348

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