|
Программирование >> Хронологические базы данных
самом понятии интервального типа. Также является преимуществом то, что теперь не придется иметь дело с хронологическими ключами , которые на самом деле таковыми не являются (в классическом понимании этого термина), как указывалось в разделе 22.9. Остальные ограничения, которые рассматривались в разделе 22.9, также могут быть упрощены. На рис. 22.4 показано, как изменится наш пример базы данных, если использовать этот новый подход. 22.5. Интервальные типы в предыдущем разделе рассуждения об интервалах основывались, по существу, на интуиции. Теперь необходимо изложить этот подход более формально. Отметим, что зернистость интервального значения [d04,dl0]- дни . Точнее, можно сказать, что зернистость относится к типу DATE, т.е. мы подразумеваем, что единица измерения зернистости принадлежит к обычному семейству типов даты и времени, а его размерность- день (в противоположность, скажем, часам , миллисекундам или месяцам ). Исходя из данного замечания можно точно определить тип интервального значения [d04,dl0]. S DURING
SP DURING
Puc. 22.4. База данных поставщиков и деталей (значения для примера): окончательный вариант полной хронологической версии с использованием интерваюв Во-первых, это, конечно, некоторый интервальный тип. Только одного этого факта достаточно, чтобы определить операторы, которые применимы к рассматриваемому интервальному значению (точно так, когда говорят, например, что, ес- ли значение г относится к типу отношение, этого достаточно, чтобы определить операторы (JOIN и т.д.), которые применимы к значению г). Во-вторых, рассматриваемое интервальное значение является интервалом от одной даты до другой, и этого факта достаточно для того, чтобы определить множество интервальных значений, которые составляют рассматриваемый интервальный тип. Таким образом, тип значения [d04,dl0] - INTERVAL (DATE), где а) INTERVAL - генератор типа, подобный RELATION в языке Tutorial D (см. главу 5) или массиву array в обычном языке программирования; этот генератор типа позволяет определить множество конкретных типов интервалов, которые будут рассмотрены далее; б) DATE - точечный тип данного интервального типа. Следует подчеркнуть, что в общем случае точечный тип РГ определяет тип и точность начальной и конечной точек, а также всех точек между двумя последними, которые имеют значения типа INTERVAL (РГ). (В случае типа DATE точность, конечно, задается неявно.) Замечание. В главе 4 уже отмечалось, что точность не является частью соответствующего типа и должна задаваться ограничением целостности. Например, в объявлениях DECLARE X TIMESTAMP(3) и DECLARE У TIMESTAMP(6) атрибуты X и Y имеют один и тот же тип, но зависят от различных ограничений (согласно этим ограничениям в атрибуте X должны содержаться значения в миллисекундах, тогда как значения атрибута У измеряются в микросекундах). Поэтому, строго говоря, чтобы сказать, например, что TIMESTAMP(3) и DATE- это допустимые точечные типы, необходимо объединить два понятия, которые лучше было бы иметь отдельными понятиями. Вместо этого, пожалуй, было бы предпочтительнее определить два типа Tl и Т2, оба с возможными представлениями типа временных отметок TIMESTAMP, но с различными ограничениями точности . Затем можно сказать, что допустимыми точечными типами являются типы, Т1 и Т2 (а не, например, TIMESTAMP(3) и TIMESTAMP(6)). Однако для простоты мы следуем в этой главе общепринятой практике и условно считаем, что точность действительно является частью типа. Какие свойства должен иметь тип, чтобы он был допустимым как точечный тип? Прежде всего, нам известно, что интервал обозначается своими начальной и конечной точками и содержит, по крайней мере неформально, множество точек. Если можно определить полное множество точек, задав просто начальную точку s и конечную точку е, необходимо, чтобы можно было определить точку, которая непосредственно следует (в некотором установленном порядке) за точкой s. Такую непосредственно следующую точку называют наследником или преемником точки s. Условимся для простоты, что в качестве обозначения такой точки будет использоваться выражение s+1. Тогда функция, с помощью которой определяется точка s+1 по точке s, называется функцией следования для данного точечного типа (и точности). Функция следования должна быть определена для каждого значения точечного типа, за исключением точки, определенной как последняя . (Имеется и точка, определяемая как первая , которая не является следующей за какой-либо точкой.) Если точка s+l определена как следующая за точкой s, необходимо установить, не следует ли точка s+l за точкой е, в соответствии с тем же принятым порядком следования для точечного типа. Если это не так, точка s+l действительно принадлежит интервалу [s,e] и нужно переходить к следующей точке s+2. Этот процесс мы можем продолжать до тех пор, пока не перейдем к первой точке s+л, которая следует за точкой е. В результате такого прохода будут перебраны все точки интервала [s,e]. Поскольку точка s+л фактически является преемником точки е, т.е. в действительности непосредственно следует за точкой е, можно утверждать, что единственное свойство, согласно которому тип РГ должен быть допустимым как точечный тип, равносильно тому, что для него должна быть определена функция следования. Короче говоря, должно быть установлено общее упорядочение для значений типа РТ (поэтому можно считать, что для всех пар значений РГ определены и доступны обычные операторы сравнения < , > и т.д.). Кстати, вы, наверное, уже заметили, что хронологические данные больще конкретно не упоминаются. И в оставшейся части главы речь также будет идти, в основном, об интервалах вообще, а не о конкретно хронологических интервалах, хотя в разделе 22.11 будут рассмотрены и конкретные вопросы, касающиеся именно хронологических данных. Дадим, наконец, точное определение. Пусть РГ- точечный тип. Тогда интервал (или значение интервала) i типа INTERVAL (РГ) - это скалярное значение, для которого определены два унарных оператора (START и END) и один бинарный оператор (IN), такие, что а) START{i) и END(i) возвращают значения типа РГ; б) START{i) < END{i); в) пусть р - некоторое значение типа РГ; тогда р IN i истинно, если оба сравнения, START (i) < р и р < END (i), дают в результате значения истина. Обратите внимание на обращение в этом определении к некоторой функции следования для типа РГ. Также отметим, что начальная и конечная точки составляют возможное представление (в смысле главы 5) для значений типа INTERVAL (РГ) соответственно (поэтому в языке Tutorial D можно было бы обращаться к точкам START и END как THE START и THE END). И наконец заметим, что по определению интервалы всегда непустые, т.е. в любом заданном интервале всегда имеется по крайней мере одна точка. Следует подчеркнуть, что значение типа INTERVAL (РГ) является скалярным, т.е. оно не имеет компонентов, которые видны пользователю. Действительно, оно имеет некоторое возможное представление (на самом деле даже несколько возможных представлений, как мы убедились в предыдущем разделе), и эти возможные представления имеют видимые для пользователя компоненты, но само значение интервала таких видимых компонентов не имеет. Иначе говоря, это означает, что интервалы инкапсулированы. 22.6. Скалярные операторы для интервалов в этом разделе будут определены некоторые полезные операторы, применяемые к значениям интервалов. Большинство из этих операторов более или менее понятны без дополнительных объяснений. Рассмотрим интервальный тип INTERVAL (РГ). Пусть р бу-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |