- •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.2. Хронологические данные
Если обычные данные являются закодированным представлением фактов, то хронологические данные являются закодированным представлением фактов с отметкой точного времени, или временной отметкой (timestamp). В хронологических базах данных в соответствии с крайней интерпретацией этого термина все данные являются хронологическими, а значит, каждый записанный факт сопровождается временной отметкой. Таким образом, хронологическое отношение — это такое отношение, в котором содержится по крайней мере одна временная отметка, т.е. заголовок включает хотя бы один атрибут некоторого типа, представляющего собой временную отметку. Отсюда следует, что хронологическая переменная-отношение является такой переменной-отношением, заголовок которой представлен хронологическим отношением. В свою очередь, реляционная хронологическая база данных — это база данных, в которой все переменные-отношения являются хронологическими.
Замечание. Мы здесь умышленно не уточняем, как могут выглядеть данные "некоторого типа, представляющего собой временную отметку". Этот вопрос будет рассмотрен в разделах 22.3-22.5.
Итак, выше было дано достаточно точное определение понятия "хронологическая база данных" (в ее чересчур строгом понимании). Однако такое понятие здесь использоваться не будет, поскольку от него мало проку! Оно отвергается потому, что даже если бы все исходные переменные-отношения в базе данных были хронологическими, то многие производные отношения (например, результаты выполнения запроса) все же не являлись бы хронологическими. Например, ответ на запрос "Найти фамилии всех служащих, которые были приняты на работу в течение некоторого периода времени" вполне может быть получен из некоторой хронологической базы данных, однако сам ответ не будет представлять собой хронологическое отношение. Это была бы действительно странная СУБД, и уж точно не реляционная, если бы она позволяла получать результаты, которые не смогла бы сохранить в собственной базе данных.
Поэтому в настоящей главе будем считать, что хронологические базы данных — это такие базы данных, которые могут включать хронологические данные, но содержание которых не ограничивается лишь хронологическими данными. В настоящей главе подробно обсуждаются именно такие базы данных.
Далее в этом и следующем разделах содержится вступительный материал для последующих разделов. В частности, в разделе 22.3 показано, почему хронологические данные, как оказывается, требуют специальной трактовки.
В разделах 22.4 и 22.5 вводится понятие интервалы (промежутки времени) как удобный способ добавления к данным временных отметок. Затем в разделах 22.6 и 22.7 обсуждается несколько скалярных и обобщающих операторов, предназначенных для обработки интервалов.
В разделе 22.8 вводятся некоторые новые важные реляционные операторы для обработки хронологических отношений.
В разделе 22.9 рассматриваются вопросы, касающиеся ограничений целостности для хронологических данных, а в разделе 22.10— специальные проблемы обновления таких данных.
Наконец, в разделе 22.11 предлагаются некоторые важные (и, возможно, непривычные) идеи проектирования баз данных и в разделе 22.12 представлено резюме.
Замечание. Важно понимать, что, кроме одного исключения (генератора интервального типа, представленного в разделе 22.5), все новые операторы и другие конструкции, обсуждаемые в этой главе, в действительности являются лишь сокращениями. Другими словами, они могут быть выражены (хотя иногда и очень громоздко) с помощью тех функциональных возможностей, которые уже имеются в полном реляционном языке, таком как Tutorial D. Это утверждение будет подкрепляться по мере необходимости примерами (хотя и не во всех случаях).
Некоторые основные концепции и вопросы
Рассмотрим, как в обычном языке выражаются так называемые "высказывания с временной отметкой". Приведем три примера.
С поставщиком с номером 'S1' был заключен договор (т.е. подписан контракт) от 1 июля 1999 года.
Договор с поставщиком с номером 'S1' действителен с 1 июля 1999 года.
Договор о поставках с поставщиком с номером 'S1' имеет силу на период с 1 июля 1999 года и по настоящий день.
Каждое из этих высказываний представляет собой возможную интерпретацию кортежа с двумя атрибутами: номером поставщика со значением 'S1' и временной отметкой ' 1 июля 1999 года'. Причем каждое из этих высказываний может соответствовать кортежу, который содержится в базе данных типа моментального снимка, представляющей текущее состояние некоторого предприятия. Выделенные слова от, с и на период характеризуют эти различные интерпретации.
Замечание. Везде в этой главе слова "с" и "на период" будут использоваться исключительно в смысле "с тех пор" и "в течение всего времени" (рассматриваемого периода) соответственно, если противное не будет указано явно.
Хотя здесь приведены три возможные интерпретации, можно возразить, что во всех этих высказываниях в действительности говорится об одном и том же, но с использованием различных выражений. На самом деле высказывания 2 и 3 считаются равносильными, а высказывания 1 и 2 (или 1 и 3) — нет. Покажем, что это действительно так.
■ В высказывании 1, безусловно, утверждается, что с поставщиком с номером 'S1' договор о поставках не был заключен до определенной даты (30 июня 1999 года), которая непосредственно предшествует указанной дате подписания контракта. В высказывании 2 этот факт не утверждается и из него никак не следует.
■ Предположим, что сегодня ("текущий день") 25 сентября 2000 года. Тогда в высказывании 2, безусловно, утверждается, что заключенный с поставщиком с номером 'S1' договор был действителен каждый день, начиная с 1 июля 1999 года и по 25 сентября 2000 года включительно. Однако в высказывании 1 этот факт не утверждается и не подразумевается.
Таким образом, высказывания 1 и 2 не равносильны и не следуют одно из другого.
Кортежи в базах данных типа моментального снимка часто включают элементы со значением "указанная дата". В этом случае в качестве подразумеваемой интерпретации чаще всего понимаются высказывания, подобные высказыванию 2 (или 3). В рассмотренном выше примере высказывание 1 в той форме, в которой оно представлено, является не совсем точной интерпретацией заданного кортежа. Точнее, его следовало бы сформулировать так: "Договор с поставщиком с номером 'S1' был заключен не раннее 1 июля 1999 года". Более того, если эта версия высказывания 1 действительно соответствует тому, что подразумевается под данным гипотетическим кортежем с двумя атрибутами, то высказывание 2 в его приведенной форме также представляет собой не совсем точную интерпретацию. Корректнее было бы сформулировать его так: "Договор с поставщиком с номером 'S1' не был заключен до 30 июня 1999 года, но 1 июля 1999 года он действительно был заключен".
Обратите внимание, что высказывание 1 отражает момент, в который имело место определенное событие, в то время как высказывания 2 и 3 отражают интервал времени, на период которого сохраняется определенное состояние. Здесь умышленно был выбран пример, в котором об определенном состоянии можно судить исходя из информации, касающейся определенного события. Поскольку договор с поставщиком с номером 'S1' был заключен не раньше 1 июля 1999 года, договорные отношения с этим поставщиком существуют начиная с этой даты и по настоящее время. В классической технологии баз данных вполне удовлетворительно обрабатываются экземпляры времени (время, когда произошло событие), однако совсем плохо обрабатываются интервалы времени, т.е. периоды времени, в течение которого сохраняется определенное состояние (это будет показано в разделе 22.3).
Обратите также внимание, что хотя высказывания 2 и 3 логически равносильны, их формы заметно отличаются. Точнее, форма высказывания 2 не может использоваться для хранения исторических сведений, в то время как форма высказывания 3 это позволяет, если только заменить в нем фразу "по настоящий день" какой-либо явной датой, например 25 сентября 2000 года. (Конечно, тогда высказывание будет соответствовать кортежу с тремя атрибутами, а не с двумя.) Таким образом, можно сделать вывод, что понятие "на период" является очень важным для ведения исторических записей, по крайней мере для данных о состояниях, если не для данных о состоянии2.
2
Здесь не лишне было бы заметить, что
несмотря на повторяющееся использование
таких терминов, как "исторические
записи", в хронологических базах
данных могут также содержаться
данные, относящиеся к будущему времени.
Например, может возникнуть необходимость
зафиксировать тот факт, что с поставщиком
с номером 'S1'
будет заключен договор на период
времени от а
до
Ь,
где
обе даты — будущие даты
Замечание. В предыдущем абзаце упоминались интервалы и множества моментов времени, которые неявно представляют хотя и простую, но важную идею, а именно — что интервал с начальным временем s и конечным временем е фактически означает множество таких моментов t, что s < t < е (где "<" означает, конечно, "раньше чем"). Хотя это простое понятие вполне "очевидно", оно имеет далеко идущие последствия, в чем мы убедимся в последующих разделах.
Большая часть предыдущего обсуждения умышленно была построена так, чтобы у читателя возникли определенные вопросы. Независимо от того, достигнута ли данная цель, перечислим эти вопросы и попытаемся на них ответить.
1. Определяют ли такие выражения, как "множество моментов t, такое, что s < t < е", бесконечные множества элементов, вызывающие, как и другие бесконеч- ные множества, некоторые концептуальные и вычислительные трудности, харак- терные для работы с ними?
Ответ. Да, сказанное выше имеет место. Но все эти трудности можно обойти, если предположить, что "шкала времени" содержит конечную последовательность дискретных неделимых квантов времени (долей времени). В этом случае интервал с начальным временем s и конечным временем е содержит заведомо конечное число таких квантов.
Замечание. Во многих работах квант времени называется хрононом. Однако при этом сам хронон определяется как интервал (см., например, словарь терминов в [22.2]) и подразумевается, что он имеет начальную и конечную точки (возможно, еще точки между ними) и, следовательно, не является неделимым. (Что конкретно представляют собой эти точки? Чем еще они могут быть, кроме хрононов?) Мы считаем, что здесь есть противоречие, и поэтому будем избегать данного термина.
2. В высказываниях 1-3, вероятно, подразумевается, что кванты времени— это дни, но система, безусловно, поддерживает отсчет времени с точностью до долей секун- ды. Если с поставщиком с номером 'S1' договор был заключен 1 июля 1999 года, а не 30 июня 1999 года, то что можно сказать о периоде от начала суток 1 июля до момента подписания договора с поставщиком с номером 'S1'?
Ответ. Необходимо четко различать кванты времени как таковые, являющиеся самыми малыми единицами времени, которые могут быть представлены в системе, и единицы времени, используемые для конкретного применения, например год, состоящий из месяцев, каждый из которых, в свою очередь, состоит из дней или недель, и т.д. Подобные единицы мы будем называть моментами времени, или, для краткости, просто моментами, подчеркивая тем самым, что для наших целей они также рассматриваются как неделимые. Тогда неформально можно сказать, что моменты времени являются "отрезками шкалы времени" (т.е. множеством квантов времени), которые продолжаются от границы одного кванта до границы следующего, например от полуночи одного дня до полуночи следующего дня. Поэтому можно сказать, опять-таки неформально, что моменты времени имеют продолжительность (в нашем примере это один день). Однако формально моменты времени, повторяем, неделимы и понятие протяженности для них ни коим образом не применяется.
Замечание. Во многих публикациях для ссылки на моменты времени как мы их определили, используется термин гранула. Однако, к сожалению, как и в случае термина хронон, гранулу рассматривают как интервал. Поэтому мы будем избегать употребления и этого термина3. Тем не менее мы будем использовать неформальный термин зернистость, который определим, тоже неформально, как продолжительность соответствующего момента времени. Таким образом, можно сказать, что в нашем примере зернистость момента времени составляет один день. Это означает, что мы в данном контексте отбрасываем наше обычное понимание дня, состоящего из часов, состоящих, в свою очередь, из минут, и т.д. (такие понятия могут быть выражены лишь посредством более мелкой зернистости).
3. Если шкала времени по существу представляет собой последовательность момен- тов времени (с некоторой зернистостью), то можно, не вызывая какой-либо дву- смысленности, обращаться к "непосредственно следующему времени" (или пред- шествующему) для какого-либо момента времени. Верно ли это?
Ответ. Да, но лишь до определенных моментов времени. Этими моментами, безусловно, являются конец и начало шкалы времени при движении по ней в прямом и обратном направлениях соответственно. Начало шкалы времени — это момент времени, который не имеет предшествующего момента (возможно, он соответствует вычисленному астрономами моменту предполагаемого "большого взрыва" в теории происхождения Вселенной). Конец шкалы времени — это момент времени, за которым пока нет последующего момента.
4. Если некоторое отношение включает кортеж из трех атрибутов, представляющий тот факт, что договор с поставщиком с номером 'S1' был подписан 1 июля
3 На наш взгляд, заблуждение, при котором хрононы и гранулы рассматриваются в качестве интервалов, возникает из-за того, что имеет место путаница между интуитивным и формальным. Интуитивное понимание каких-либо материальных процессов — это одно дело, а их формальная модель — совсем другое. В частности, можно считать график времени непрерывным и бесконечным, однако в нашей модели (в том числе по соображениям, которые связаны с возможностями проведения вычислений) он полагается дискретным и конечным.
Замечание. В дополнение к обсуждаемой теме следует сказать, что хотя концепция кванта времени (или хронона) весьма полезна как основа для описания формальной модели на интуитивном уровне, сама по себе она вовсе не является частью этой модели и не имеет для нее какого-либо значения
года и будет действителен по 25 сентября 2000 года, то не требует ли допущение о замкнутости мира (см. главу 5), чтобы то же самое отношение включало и аналогичный кортеж, представляющий, например, тот факт, что договор с поставщиком с номером 'S1' был действителен также со 2 июля 1999 года по 24 сентября
года, и множество других кортежей, представляющих прочие тривиальные следствия исходного кортежа?
Ответ. Интересный вопрос! Очевидно, что необходим более ограничивающий предикат по сравнению с общей интерпретацией данного кортежа с тремя атрибутами, а именно: "С поставщиком с номером ' Sx' был подписан договор, действительный каждый день с даты s по дату е, но не в день, непосредственно предшествующий s, и не в день, непосредственно следующий за е"4. Эта более ограничивающая интерпретация в общем виде предоставляет мотивировку и основу для многих операторов, которые будут описаны в этой главе, в частности в разделах 22.8 и 22.10.