Хронологическая модель данных для промышленных
информационных систем
Сидоров А.А., Маслов Д.В. (dmaslov@industrialauto.ru) Научно-внедренческая фирма "Сенсоры, модули, системы"
1. ВВЕДЕНИЕ
В настоящее время постоянно растет интерес к проблемам хранения исторических данных на различных предприятиях, что вызвано необходимостью принятия решений на основе не только текущей информации, но и информации за предыдущие периоды работы предприятия [7]. Этим объясняется всплеск научных исследований в области баз данных (БД), хранящих историческую информацию - так называемых темпоральных баз данных (англ. temporal databases). В данной статье рассматриваются специфические темпоральные БД, применяемые в промышленных информационных системах (ИС). Их отличительными особенностями являются:
1. необходимость формирования на основе исторических данных разнообразной отчетной документации за различные отчетные периоды [5] (такие как "двухчасовки", "рабочие смены", "кварталы", "отчетные годы" и др.);
2. необходимость работы с измерительной информацией [1, 3], которая, как правило, поступает на вход системы управления базой данных (СУБД) в прореженном виде (т.е. необходимость восстановления информации при помощи интерполяции и учета восстановленной информации при выполнении операций извлечения данных);
3. необходимость выполнения запросов, учитывающих хронологическую упорядоченность исторических данных [6, 12] (например, получение трех последних аварий, предшествующих заданной дате).
Сегодня доминируют БД, построенные на реляционной модели. Эта модель наиболее распространена и универсальна. Однако во многих прикладных областях, когда требуется учитывать специфику хранимых данных, реляционная модель используется главным образом для обеспечения хранения данных, а большая часть логики, связанной с предметной областью, остается вне компетенции СУБД [4]. Именно так дело обстоит с БД для промышленных ИС - ни одна из перечисленных их особенностей не поддерживается реляционной моделью. Для подтверждения данного тезиса рассмотрим выполнимость в реляционной модели специфических требований темпоральных БД в промышленных ИС, сформулированных выше.
1. Формирование отчетной информации за различные отчетные периоды в принципе осуществимо с помощью реляционного оператора агрегирования при условии, что в БД присутствуют функции для работы с метками времени, такие как выделение частей метки времени - года, месяца, дня и т.д. В этом случае, для того чтобы, к примеру, на основе исходного отношения с атрибутом T, имеющим тип метки времени, сформировать отчетную информацию за каждый год, необходимо выполнить оператор агрегирования по выражению year(T), где year() - системная функция выделения года из метки времени. Однако при необходимости формирования отчетов за более сложные периоды возникают сложности. Из-за отсутствия средств описания таких размерностей времени, как "двухчасовки", "смены", "отчетные месяцы", "отчетные годы" и др., для формирования отчета приходится описывать их взаимосвязь со стандартными размерностями (такими, как "минуты", "часы" и др.) прямо в запросе к БД, что сложно сделать средствами реляционной алгебры.
Электронный журнал «Исследовано в России» 1009 http://zhurnal.ape.relarn.ru/articles/2004/090.pdf
2. Эффективная работа с измерительной информацией невозможна в реляционной модели. Пусть, к примеру, в БД сохраняется информация о значениях измеряемого параметра в узлах интерполяции. Ответ на любой запрос к такой БД, например, "какое значение имел параметр в заданные моменты времени?", или "в какое время параметр имел заданное значение?", должен выполняться с учетом интерполяции, а не путем поиска среди тех значений, которые явно хранятся в БД, как это происходит в реляционной модели. В реляционной алгебре нет средств для формулирования таких запросов.
3. Запросы, учитывающие хронологическую упорядоченность, противоречат принципам реляционной модели, т.к., по определению, тело отношения - это неупорядоченное множество кортежей, и все операторы реляционной алгебры предназначены для работы с такими множествами.
Результатом указанных недостатков реляционной модели, является то, что коммерческие программные комплексы, предназначенные для организации промышленных ИС, либо используют собственные механизмы работы с данными, отказавшись от услуг СУБД, либо все же базируются на реляционной СУБД, и наследуют все недостатки реляционной модели. В первом случае такие программные комплексы вынуждены включать в себя всю функциональность, свойственную СУБД, и, в результате, их цена оказывается крайне высокой. Во втором случае, когда программный комплекс базируется на реляционной СУБД, ограничения функциональности могут оказаться весьма серьезными.
Таким образом, для промышленных ИС требуется другая модель данных, являющаяся альтернативой или расширением реляционной. Для выполнения запросов, учитывающих хронологическую упорядоченность данных, такое расширение было найдено. Был предложен целый ряд моделей данных, учитывающих упорядоченность [14, 16, 23, 24, 25, 26, 27, 28]. Наиболее общей из них является модель SEQ [27, 28], предназначенная для любых упорядоченных данных. Для того чтобы реализовать функциональность модели SEQ в рамках реляционной модели, в работе [23] были предложены операторы, дополняющие реляционную алгебру.
Мы считаем, что реляционная алгебра, дополненная операторами работы [23], позволяет в промышленных ИС формулировать запросы к БД, учитывающие хронологическую упорядоченность. Однако оставшиеся две проблемы БД в промышленных ИС мы считаем актуальными, и предлагаем для их решения хронологическую модель данных. В разделе 2 рассматриваются разработки, затрагивающие проблемы поддержки различных размерностей времени и интерполяции в БД, раздел 3 содержит описание предлагаемой хронологической модели, и, наконец, в разделе 4 приводятся выводы.
2. СУЩЕСТВУЮЩИЕ РАЗРАБОТКИ В ДАННОЙ ОБЛАСТИ
2.1. Поддержка размерностей времени
Научным сообществом уже давно признана необходимость описания различных размерностей времени в темпоральных БД. В работах [8, 11, 29] вводится формализация понятия размерности времени, а также вводятся отношения между различными размерностями времени. Размерность времени определяется следующим образом. Пусть имеется "абсолютное время" - произвольное множество Т с линейным порядком "<" ("меньше"). "Размерность времени - это функция О, действующая из множества целых чисел (называемого множеством индексов) в множество всех подмножеств Т, такая что 1) если г <у и О(г) и О(У) не пусты, то каждый элемент О(г) меньше всех элементов О(Д и 2) если г < к <у и О(г) и О(У) не пусты, то О(к) не пусто" [8]. Далее, для размерностей вводится ряд отношений, из которых мы упомянем два. Размерность О агрегируется в размерность Н, если для любого индекса у существует множество целых чисел 8, такое что Н (у) = YО(i) .
Размерность О точнее чем размерность Н, если для любого индекса г существует индекс у, такой что О(г) ^ Н(/). Таким образом, понятие любой размерности вводится на базе
Электронный журнал «Исследовано в России» 10 10 http://zhurnal.ape.relarn.ru/articles/2004/090.pdf
некоторого общего для всех размерностей абсолютного времени, любая метка времени представляет собой множество моментов абсолютного времени, а отношения между размерностями задаются в терминах абсолютного времени.
В данной статье мы представляем формализацию размерностей времени, базирующуюся на описанном подходе, но расширяющую его. В нашей модели любая размерность времени определяется на базе любой другой "более мелкой" размерности, с помощью отношения "является частью" между метками времени базовой и задаваемой размерностей. В этом случае метка времени - это просто число с указанием размерности, связанное отношением "состоит из" (обратным отношению "является частью") с метками времени некоторой другой размерности. Мы также определяем отношения "агрегируется в" и "точнее чем" между различными размерностями, но не в терминах абсолютного времени, а в терминах некоторой третьей, " более мелкой", размерности. Мы утверждаем, что если две размерности связаны отношением "агрегируется в" или "точнее чем" в терминах одной размерности, то они связаны этим отношением и в терминах любой другой размерности. Нетрудно видеть, что наш подход можно свести к описанному в [8, 11, 29], если все размерности задавать на базе одной, общей для всех размерности, которая в этом случае будет выступать в роли абсолютного времени.
Формализация понятия размерности времени и связанных с ней понятий сама по себе не является конечной целью исследований в данной области. Необходимо предоставить пользователю возможность понятного и удобного задания новых размерностей времени на базе существующих с тем, чтобы система после этого могла преобразовывать любые метки времени к любым размерностям. В работе [17] для решения данной задачи пользователю предлагается явно задавать функции преобразования меток времени scale и cast между парами размерностей, и описывается, как построить корректную цепочку преобразований для размерностей, между которыми не задано прямой функции преобразования. Такой подход, возможно, будет эффективным с точки зрения производительности, однако его недостаток - требование явного задания функций преобразования. Для предоставления пользователю возможности задания размерностей в более "дружественной" форме было предложено два различных формализма: представление размерностей с помощью структурированных множеств интервалов и операций над ними [18], и задание размерностей на базе иерархии существующих размерностей [21] (эти два подхода подробно рассматриваются и сравниваются в работе [9], где делается вывод, что подход [18] является более общим). В более поздней работе [22] был предложен альтернативный подход - задание новых размерностей на базе других с помощью специализированных операторов, " базирующихся на принципах, по которым люди строят различные размерности в реальной жизни" (что делает это подход более удобным). Операторы указанной работы позволяют описывать размерности с исключениями (такими, как високосные годы, високосные секунды) и размерности с "пропусками", чего не позволяет формализм работ [18, 21]. Кроме того, в указанной работе было предложено представлять метки времени, используя структурные шкалы, такие, как "годы:месяцы:сутки", позволяющие использовать в качестве элементов шкалы произвольные (в том числе заданные пользователем) размерности времени.
В данной статье предлагается расширить использование структурных шкал. Во-первых, мы допускаем, чтобы размерность, являющаяся последним элементом шкалы была "точнее чем" или "агрегировалась в" размерность представляемой метки времени (в отличие от [22], где требуется, чтобы она была строгой подразмерностью). К примеру, метка времени размерности "недели" может быть представлена по шкале "годы:месяцы:сутки" (такое представление будет указывать первый день соответствующей недели). Во-вторых, мы позволяем задавать новые размерности времени и множества меток времени (календари) с помощью представления по шкале, допуская в представлении по шкале не только натуральные числа, но и множества натуральных чисел, а также обозначение "*" ("все"). Такое задание размерностей заменяет сразу несколько операторов работы [22], является более понятным и компактным. Например, размерность, описывающая все недели, включающие пятое число каждого месяца, может быть задана с помощью операторов работы [22] следующим образом:
Электронный журнал «Исследовано в России» 10 11 http://zhurnal.ape.relarn.ru/articles/2004/090.pdf
пятые дни месяцев = Select_Down(дни, месяцы, 5, 1) недели_пятых дней месяцев = Select_Up(пятые дни месяцев, недели).
Эта же размерность у нас может быть задана с помощью представления "*:5" по шкале "месяцы:дни" оператором pattern(месяцы:дни, *:5, недели). По сути дела, вводимый нами оператор pattern является модификацией формализма, предложенного в [18]. Т.е. мы предлагаем объединить преимущества двух подходов - использования операторов работы [22] и формализма [18].
Кроме того, мы расширяем возможности по описанию исключений в определении размерностей. В работе [22] для этого служит оператор alter, описывающий периодические исключения из правила, описывающего размерность. Мы добавляем возможность описания исключений при помощи произвольного календаря, что бывает необходимо при задании некоторых реальных размерностей времени.
2.2. Включение интерполяции в базы данных
Необходимость учета интерполяции при выполнении запросов к базам данных отмечалась в работах [10, 13, 19, 20, 25, 26]. Однако часть из этих публикаций лишь описывают суть проблемы, не указывая путей решений. На наш взгляд, проблема интерполяции в темпоральных БД для промышленных ИС имеет две стороны:
1. требуются новые возможности формулировки критерия выборки по времени - не с помощью задания ограничений на атрибут времени (как в реляционной модели), а посредством явного указания множества интересующих моментов времени (которое может включать моменты времени, отсутствующие в хронологической последовательности);
2. при выборке и соединении по невременным атрибутам требуется учитывать данные, восстановимые с помощью интерполяции.
Следует отметить, что в модели [25, 26] уже использовались различные типы интерполяции и задание критерия выборки для хронологических последовательностей при помощи указания набора интересующих моментов времени. Однако предложенная в этих работах модель включала лишь способы задания примитивных наборов, состоящих из подряд идущих моментов времени. В нашей модели можно задавать сложные наборы моментов времени (календари), используя для этого специальные операторы.
Ни одна из известных нам моделей не включает оператор соединения, учитывающий интерполяцию, и лишь в модели, описанной в [19, 20], присутствует оператор выборки, учитывающий произвольную интерполяцию.
3. ХРОНОЛОГИЧЕСКАЯ МОДЕЛЬ ДАННЫХ
3.1. Представление времени в модели
Будем рассматривать время как интервал целых чисел, на котором задан линейный порядок - отношение "<" на множестве чисел. Для поддержки различных размерностей времени будем рассматривать не один такой интервал, а набор интервалов, элементами каждого из которых являются значения времени какой-либо одной размерности (например, " минуты", "дни" и др.). Для того чтобы иметь возможность сравнивать значения времени разной размерности, необходимо связать пары значений времени разных размерностей отношениями "является частью". Например, для связи размерностей "секунды" и "минуты", отношение "является частью" - это функция мнуты = tсекунды div 60 (где div - операция целочисленного деления). Дадим теперь формальное определение размерности.
Определение 1. Размерность времени / - это либо интервал целых чисел T, называемый интервалом размерности (обозначается T(/)), либо тройка (T, n, где T -
интервал целых чисел, называемый интервалом размерности, n - некоторая другая размерность, - отношение "является частью" из интервала размерности n в интервал T, обладающее следующими свойствами:
• Fп^.м - это сюръективная функция;
• У/ е Г(п), у е Т(/: (/ </) & (/, / е ^ (/) < (/),
где dom(Fп-+/) - область определения Fп^./
□
В случае если размерность / описывается тройкой (Т, п, Fп-+/), будем говорить, что размерность / задана через размерность п Дадим теперь формальное определение метки времени.
Определение 2. Метка времени - это пара (т /и), где / - это размерность времени, а т - целое число из интервала Т(/), называемое значением времени. □
Пример 1. Пусть минуты - это размерность, представляющая собой интервал целых чисел [0, Тогда размерность час может быть задана на базе размерности минуты тройкой ([0, +го), минуты, Р'минуты^часыХ где Fминуты^часы т 60. При ЭТ°м нулевой час будет состоять из минут 0 - 59, первый час - из минут 60 - 119 и т.д. □
Пример 2. В общем случае не все метки времени базовой размерности являются частью некоторой метки времени задаваемой размерности. Так, размерность вторники можно задать через размерность сутки с помощью следующего отношения "является частью":
Т.е. дневные метки времени, попадающие на дни, отличные от вторников, не являются частью ни одной метки времени размерности вторники. □
Таким образом, отношение "является частью" предназначено для задания новых размерностей времени на базе существующих. Кроме того, оно служит для преобразования меток времени одной размерности в метки времени другой размерности.
Пусть задана размерность / = (Т, п, Fп^.¿). Если для сюръекции Fп^.ц множество значений {т1, т2, ..., т} является прообразом для значения т, то будем говорить, что (т /и) состоит из {(т, п), (т2, п), ••• (т, п)}. Будем записывать это следующим образом: (т, /и) ~ {(т, п), (т2, п), .. (т, п)}. Если при этом размерность п задана через размерность V, и каждая из меток (т, п) состоит из { (тц, V), (т/2, V),..., (тV)}, то также будем говорить, что
(т, /и) состоит из Y { (т/1, V), (т/2, V),..., (т^, V) }, а размерность / задана (транзитивно)
через размерность V. Факт того, что размерность / задана через размерность п (напрямую или транзитивно) будем обозначать следующим образом: п / Будем также считать, что для любой размерности / имеет место /и, и для любых меток времени (т /и) выполняется
(т /) ~ {(т /)}.
Предполагается, что на основе имеющегося набора стандартных размерностей времени ("секунды", "минуты", "часы", "дни", "недели" и т.д.) пользователь или администратор базы данных будет определять новые, специфичные для его задач, размерности, такие как "двухчасовки", "получасовки", "смены", "кварталы" и др. Причем задание новых размерностей времени возможно на базе любых других уже существующих. Пользователю необходимо лишь задать отношение "является частью", либо воспользоваться специальными операторами из раздела 3.2.
Введем теперь понятие сравнимости размерностей времени и различные отношения для сравнения меток времени сравнимых размерностей.
Определение 3. Размерности времени / и п называются сравнимыми, если существует размерность V (общая размерность), что / и п заданы через V (напрямую или транзитивно). □
Определение 4 (отношения сравнения меток времени). Пусть / и п - сравнимые размерности времени, V - их общая размерность (произвольная), т.е. /, п, и пусть (т, /и) ~ М (т2, п) ~ Н где М и Н - некоторые множества меток времени размерности V. Тогда:
т div 7, если т mod 7 = 2;
функция не определена в остальных случаях.
i=1..k
Электронный журнал «Исследовано в России» 10 13 http://zhurnal.ape.relarn.ru/articles/2004/090.pdf
• если для любой общей размерности времени v выполняется условие Мс Н (1)
то будем говорить, что (tí, л) входит в (т2, п), и записывать это следующим образом: (Ti, /) с (т n);
• если для любой общей размерности времени v выполняется следующее условие: V(TM, v) e М V(тя, v) e Н: TM < тн, (2)
то будем говорить, что (т1, л)раньше чем (т2, п), а (т2, п) позже чем (т1, л), и записывать это следующим образом: (т1, л) < (т2, rj);
• если для любой общей размерности времени v выполняется
Мп Нф 0, (3)
то будем говорить, что (т1, л) пересекается с (т2, rj), и записывать это следующим образом: (т1, л) п (т2, rj) ф 0.
□
С практической точки зрения важна задача нахождения всех меток времени размерности r¡, которые входят в, или пересекаются с заданной меткой времени (т л) (это называется преобразованием размерностей времени). Например, если есть хронологическая последовательность с метками времени размерности час, и на ее базе необходимо сформировать хронологическую последовательность со сводной информацией с метками времени размерности смена, то для выполнения такой операции необходимо уметь находить все метки времени размерности час, относящиеся к каждой смене. Для выполнения преобразований произвольных размерностей был разработан специальный алгоритм, однако его рассмотрение выходит за рамки данной статьи.
Утверждение 1. Если условие (1), (2) или (3) выполняется для некоторой общей размерности времени v, то оно выполняется и для любой другой общей размерности времени. □
Согласно данному утверждению, если одна метка времени входит в (раньше, пересекается) другую метку времени в терминах одной общей размерности, то она входит в (раньше, пересекается) нее и в терминах любой другой общей размерности.
Введем теперь отношения "агрегируется в" и "точнее чем" [8], адаптированные для нашей модели.
Определение 5. Будем говорить, что размерность времени п "агрегируется в"
размерность л, (л < rj), если они сравнимы, и для любых размерностей времени v таких, что v —> л и v—> п, выполнено следующее условие:
пХ 3(т Í) ~ { (TJ1, vX (т2, v), (т1кt, v) }, j = 1 -к :
(т п) - Y { (тц, v), (т2, v),(т^, v) }, (4)
t=1..к
причем метки времени (т, л), t = 1...к, зависят только от (т п) и не зависят от выбора v □
Утверждение 2. Пусть существует такая размерность времени v, что v — л и v— п,
и для v, л и п выполнено условие (4). Тогда л < п П
Согласно данному утверждению, если две размерности связаны отношением " агрегируется в" в терминах одной общей размерности, то они связаны этим отношением и в терминах любой другой общей размерности.
Определение 6. Будем говорить, что размерность времени л "точнее чем"
размерность п (Л ^ п), если они сравнимы, и выполнено следующее условие: V(z, л), 3(т', п) : (т л) С (т', п). □
Мы определили метку времени как целое число с указанием размерности. Такое представление, несомненно, является удобным для хранения меток времени в базе данных и для выполнения вычислений, но не является ни привычным, ни удобным для пользователя. К примеру, метка времени (1052776800, секунды) ни о чем не скажет пользователю. В реальной жизни люди пользуются метками времени, представленными по структурным
Электронный журнал «Исследовано в России» 10 14 http://zhurnal.ape.relarn.ru/articles/2004/090.pdf
(относительным) шкалам, таким как "годы:месяцы:сутки" и др. Поэтому мы определим понятие шкалы времени и способ представления любой метки времени по любой шкале.
Введем оператор, возвращающий первую метку времени размерности n, пересекающуюся с заданной меткой времени (т /л) (обозначим этот оператор first((r, /л), n)), следующим образом:
• если размерности / и n сравнимы, то first((T, /л), n) = Tlmjn, где T min = miniT': (Т /) п (т', n) * 0}
т.е. это минимальное значение из таких т', что метка времени (Т, n) пересекается с (т /); а если при этом таких Т нет, то оператор first((T, /л), n) не определен;
• если / и n несравнимы, то для них оператор first((T, /л), n) не определен.
Аналогично определим оператор last((T, /л), n), возвращающий последнюю метку времени размерности n, пересекающуюся с заданной меткой времени (т, / ).
Определение 7. Пусть /, i = 1...„, - различные сравнимые размерности времени. Тогда запись вида /:/:/: ... :/„ будем называть шкалой времени. □
Определение 8. Пусть размерность времени n сравнима с /, i = 1 ...n. Будем называть представлением метки времени (т, n) по шкале /:/:/: ... :/„ запись вида (т1:т2:т3: ... :т„, n), где:
• т = ряф;, n), /1);
• т+1 = frst^, n), /+1) -first((first((^x, n), /), /), /+1), i = 1 -„-1-
Если при этом результат хотя бы одного используемого в данном определении оператора first не определен, то будем считать, что метка времени (т, n) не представима по шкале /1/2/3: ... :/„. □
Пример 3. Шкала годы:недели зачастую используется в учебных заведениях. При использовании такой шкалы метка времени (2004:26, недели) будет обозначать 26-ю неделю 2004-го года. В промышленных приложениях могут использоваться такие шкалы, как годы:месяцы:смены, годы:месяцы:сутки:двухчасовки и т.д. □
Пример 4. Последняя размерность времени в шкале - это не обязательно размерность описываемой метки. К примеру, если у нас задано время размерности недели, то мы можем его представить по шкале годы:месяцы:сутки. Представление недельной метки времени по этой шкале будет указывать на первый день интересующей нас недели. □
В следующем утверждении формулируется достаточное условие однозначности представления меток времени по шкале.
Утверждение 3. Пусть задана шкала времени /:/:/:... :/„ и размерность времени n
Пусть при этом выполняется условие /л„ < n или /л„ < n Тогда, для любой метки времени (т, n), если существует представление по шкале /:/:/:... :/„, то оно однозначно определяет эту метку времени. □
Данное утверждение служит базой для проверки корректности представления меток времени по шкале.
У шкал имеется два основных назначения:
1. представление пользователю меток времени, хранящихся в базе данных, в удобном для него виде;
2. предоставление пользователю возможности самому задавать интересующие метки времени в удобном для него виде, а также задавать новые размерности времени и календари.
При задании меток времени через представление по шкале важно, чтобы представление однозначно определяло метку времени. Поэтому потребуем, чтобы при задании меток времени было разрешено пользоваться только шкалами, удовлетворяющими условию утверждения 3.
При задании метки времени (т, n) через ее представление (т1:т2:т3: ... :т„, n) по шкале /:/:/: ... :/„ кроме явного указания элементов т, будем также использовать обозначение last. Данное обозначение, встречающееся на месте т, обозначает следующее:
Ш((А^((т, п), /-1), /-1), /) - п), /-1), /-1), /).
Например, если задана шкала годы:недели, то представление (2003:last, недели) определяет последнюю неделю 2003 года. Введем теперь понятие календаря.
Определение 9. Множество меток времени одной размерности будем называть календарем. □
Календари мы будем использовать при выборке данных из хронологической последовательности для указания интересующих нас моментов времени. Календари, требуемые для выборки данных, зачастую поддаются компактному описанию. Для компактного описания календарей в разделе 3.3 вводятся специализированные операторы. Кроме того, на основе существующих календарей можно получать новые с помощью теоретико-множественных операций "о1", "п" и "\", но лишь в том случае, когда операнды содержат метки времени одной размерности.
3.2. Операторы для задания размерностей времени
В данном разделе вводятся операторы для задания новых размерностей времени, дополняющие набор операторов работы [22].
Отношение "является частью" Рп-+и при определении новых размерностей времени можно задавать следующим образом: внутри диапазона значений времени Т(п) выделить непересекающиеся непустые подмножества, пронумеровать эти подмножества подряд идущими целыми числами, и считать, что Рп-+и каждому значению времени размерности п, принадлежащему такому подмножеству, ставит в соответствие значение времени размерности /, являющееся номером этого подмножества.
В этом случае Рп-+и полностью определяется двумя свойствами:
• набором подмножеств множества значений времени размерности п;
• нумерацией этих подмножеств.
Задав эти два свойства, мы определяем отношение "является частью". Именно таким образом определяется это отношение для размерностей времени, задаваемых с помощью вводимых ниже операторов.
Оператор группировки. Оператор имеет следующий вид: ^гоир( тп, Т/, п, Р1, Р2, ..., Рп).
Множество значений времени Т(п) разбивается на непересекающиеся интервалы Р1, такие, что один из них содержит р1 последовательных элементов множества Т(п), следующий - р2 элементов, следующий - р3 элементов, и т.д. После интервала, содержащего рп элементов, снова идет интервал, содержащий р1 элементов, и т.д. Причем интервал с номером ти начинается со значения тп. Строго говоря, п п
Рт-п +тИ = [тп+ т-Е р] , тп+ т "Е р] + р1 -1] п Тп;
]=1 ]=1
Рт-п +ти +1 = [тп+ т-Е р] + Р1, тп+ т "Е р] + р1 + р2 -1] п Тп;
] =1 ] =1
Рт-п+ти+ п-1 = [тп + т - Е р] + р\ + р2 + - + рп-Ь
]=1
п
тп+ т-Ер] + Р1 + Р2 + .. + РП -1] п Тп;
] =1
где т - произвольное целое число. При этом требуется Р1 ^ 0, т.е. пустые множества в разбиение множества Т(п) не включаются.
Электронный журнал «Исследовано в России» 10 16 http://zhurnal.ape.relarn.ru/articles/2004/090.pdf
Такой набор пронумерованных подмножеств множества T(rj) определяет отношение "является частью" F^p Результатом оператора group(Tп тл j,p1,p2, ...,pn) является размерность л = (^П+ДДП)), j, F^v)-
Пример 5. часы = group(1, 1, минуты, 60) □
Оператор выборки по шаблону. Пусть задана размерность j и шкала ¡1:л2:л3: ... лn.
Пусть также л„ < j или л„ =< j. В этом случае, согласно утверждению 3, если запись (т1:т2:т3: ... :тп, j) является представлением некоторой метки времени размерности j, то она однозначно определяет эту метку времени.
С помощью записи вида (т1:т2:т3: ... :Tn, rj), где Tn е N, будем задавать множество всевозможных меток времени, имеющих по шкале ¡1:л2:л3: ... :лn представление (т1:т2:т3: ... :т„, rj), такое, что Tn е Tn. Например, при использовании шкалы годы:месяцы, запись (1998:{1, 3, 5}, месяцы) задает три метки времени, соответствующие январю, марту и маю 1998 года.
С помощью записи следующего вида (которую мы будем называть шаблоном): (T1T2T3: ... :(Tm, Tn2, ..., Tnk), j), (5)
где Ti ^ N и Tnj ^ N (i = 1...n-1, j = 1...k), будем задавать набор множеств меток времени. Каждое из множеств меток времени данного набора определяется следующей записью: (т1:т2:т3: ... :Tnj, rj), где т е Ti, i = 1...n-1; 1 < j < k. Например, при использовании шкалы годы:месяцы:сутки, запись ({1998}:{1, 2}:({1, 2, 3, 4, 5}, {6, 7}), сутки) задает четыре множества меток времени, объединяющие первые пять дней, и шестой с седьмым днем января и февраля 1998 года.
Будем использовать следующие способы задания множеств Ti:
• прямое перечисление входящих в них элементов и интервалов (например, {1, 3, [5, 14], 17}); при этом могут использоваться арифметические выражения с использованием обозначения last;
• символ "*" будем использовать для обозначения множества всевозможных натуральных чисел.
Аналогичные обозначения используются и для множеств Tnj. Например, при использовании шкалы годы:месяцы:сутки, шаблон (*:{3}:({last-1}), сутки) задает набор множеств меток времени, каждое из которых состоит из одного элемента - предпоследнего дня марта каждого года.
Итак, пусть j - размерность времени, л1:л2:л3: •• 'Лп - шкала, Р - шаблон, задающий на основе этой шкалы набор непересекающихся множеств меток времени размерности r. Оператор выборки по шаблону имеет следующий вид:
pattern(m2:V3: •• Л, ттт: ... :т„, Р).
Шаблон Р задает набор непересекающихся множеств меток времени размерности j. Эти множества последовательно нумеруются, причем первый индекс получает множество, содержащее метку времени (т1:т2:т3: ... :т„, j). Такой набор пронумерованных множества определяет отношение "является частью" Рг^,л. Результатом оператора является размерность
Л = СГДДгЖ П ^Л).
Пример 6. Размерность времени вторники легко определяется на базе размерности сутки с помощью оператора pattern следующим образом: вторники = pattern(недели:сутки, 1:2, *:({2}), сутки).
Первый вторник соответствует в данном примере второму дню первой недели. □
При использовании оператора pattern важно контролировать соблюдение следующих условий:
• шаблон Р должен задавать набор непересекающихся множеств меток времени; для этого надо проверять, что множества Tn1, Tn2, ..., Tnkпопарно не пересекаются;
• представление любой метки времени размерности п по шкале jjj: ... :jn однозначно определяет эту метку времени; для этого достаточно выполнения условия
Jn < п или jn =< п
Невыполнение любого из этих условий необходимо считать ошибкой при задании размерности времени при помощи оператора pattern.
При введении набора операторов для той или иной цели естественным образом возникает вопрос о полноте этого набора. Для решения этого вопроса введем понятие периодичности размерности времени.
Определение 10. Пусть размерность времени j задана через размерность п с помощью отношения "является частью" Будем говорить, что J периодична
относительно п, если выполнено следующее условие:
Рп е N : (F^T) = т) & ((т + np) е Т(п)) ^ ^(т + np) = Т + nPj
где n - произвольное целое число. Числа Рц и Рп называются в этом случае периодами. □
В большинстве научных работ, посвященных темпоральным базам данных, полным считается такой набор операторов задания размерностей времени, с помощью которого можно определить любые периодические размерности времени (см., например, [9, 22]).
Нетрудно видеть, что операторы group и pattern вместе образуют полный набор. Действительно, если размерность j периодична относительно п с периодами Рц и Рп, то ее можно задать следующим образом:
9 = group(rtl, j п, Рп); J = pattern(9 :п, т:т2, *:(Tn1, Tn2, ..., Tnk), п), т.е. сначала с помощью оператора group создается промежуточная размерность 9, каждая метка времени которой соответствует периоду п, а затем с помощью оператора pattern простым перечислением задается соответствие меток времени размерности п меткам времени размерности j внутри одного периода Рп (это можно сделать ввиду конечности периода).
Также нетрудно видеть, что введенный нами оператор pattern обеспечивает функциональность операторов combine, select-down и select-up работы [22].
Набор операторов group, pattern является полным, однако задание некоторых реальных размерностей времени с помощью них представляется весьма громоздким в связи со слишком большой для полного перечисления величиной периода. Так, для размерностей месяцы и сутки периоды составляют примерно 4800 и 146000 соответственно (с учетом високосных лет). Поэтому для удобства задания размерностей времени ниже вводятся дополнительные операторы.
Оператор группировки с исключениями. Описание исключений при группировке размерностей времени возможно при помощи оператора alter работы [22]. Однако он позволяет описывать лишь периодически встречающиеся исключения. Таким описанием пользоваться неудобно, например, для задания размерности сутки через размерность часы с учетом перехода на летнее/зимнее время. В этом случае каждый день состоит из 24 часов, с двумя исключениями в году - при переходе на летнее время день состоит из 23 часов, а при переходе на зимнее - из 25. При этом за счет переменного числа дней в году эти исключения сложно описать с помощью явного указания периода их возникновения. Для описания таких исключений мы предлагаем использовать оператор groupex следующего вида: group_ex( Тп, J п, p1, p2, • • •, pn, ex(C1, dif 1), ex(C2, dif2), ..., ex(Cm, difm)),
где Cj, j = 1...m - календари, содержащие метки времени размерности п. Результат данного оператора строится так же, как и для оператора group(TT], j п,p1,p2, •••,pn), однако к набору интервалов
n n
Рт -n = [тп+ m 'S pj, Тп+ m 'S pj + p1 -1];
j=1 j=1
nn
Рт-n +ти +1 = [тп+ m 'S pj + Pl, Тп+ m 'S pj + p1 + P2 -1];
j =1 j =1
n+тц+ n-1 = [тп + m' Spj + p1 + p2 +... + pn-b
j=1
Тп + m- Spj + p + p2 + .. + pn-1];
j=1
применяются исключения: каждый из интервалов, содержащий одну из меток времени календаря Cj, расширяется или сужается (в зависимости от знака difj) на \dif\ элементов с правой стороны. Все последующие интервалы сдвигаются на соответствующее число элементов. После этого для каждого интервала берется его пересечение с Т(п).
Пример 7. Зададим размерность суткилетн (дни с учетом перехода на летнее время) на базе размерности часы. При этом предполагается, что заданы размерности годы, месяцы и воскресенья без учета перехода на летнее время. сутки летн = group_ex(1, 1, часы, 24,
ex(pattern(годы:месяцы:воскресенья:часы, *:{4}:{last}:{3}, часы), -1), ex(pattern(годы:месяцы:воскресенья:часы, *:{10}:{last}:{3}, часы), +1)).
Размерность сутки летн получается при помощи группировки размерности часы по 24, и применением исключений - каждая группа, содержащая третий час ночи в последнее воскресенье апреля, уменьшается на один час, а группа, содержащая третий час ночи в последнее воскресенье октября, увеличивается на один час. Для описания календарей применяется версия оператора pattern, предназначенная для задания календарей (см. раздел 3.3). □
Оператор группировки по календарю. Данный оператор группировки использует календарь для описания начала и конца каждой группы. Оператор имеет следующий вид: groupcalJ J C),
где С - календарь, состоящий из меток времени размерности п Множество значений времени Т(п) разбивается на непересекающиеся интервалы, такие, что каждый из них начинается с очередной метки времени календаря C и заканчивается значением, непосредственно предшествующим следующей метке времени календаря С. Полученные интервалы нумеруются таким образом, что интервал с номером тJ содержит значение Тп.
Такой набор пронумерованных подмножеств множества Т(п) определяет отношение "является частью": Fп—м. Результатом оператора group_cal(Tt], j C) является размерность
J = ^п—Л^п))-* п, F-).
Пример 8. Пусть отчетный месяц начинается 3 числа каждого календарного месяца и заканчивается 2 числа следующего месяца. Тогда размерность отчетные месяцы можно задать следующим образом: отчетные месяцы =
group_cal(1, 1, сутки,pattern(месяцы:сутки, *:{3}, сутки)). □
3.3. Операторы для задания календарей
Оператор для создания циклических календарей. Оператор имеет вид: cycle(T0,period, п), где т0 - целое число, period - натуральное число, п - размерность времени. Результатом оператора является календарь, состоящий из меток времени размерности п, имеющих вид (т0 + n-period, п), где n - произвольное целое число. Если period = 1, то результат оператора cycle будет содержать все метки времени размерности п. Будем обозначать такой календарь следующим образом: all(п).
Оператор ограничения. Оператор имеет вид: bound(C, t1, t2), где C - некоторый календарь, а t1, t2 - метки времени той же размерности, что и метки времени календаря C.
Электронный журнал «Исследовано в России» 10 19 http://zhurnal.ape.relarn.ru/articles/2004/090.pdf
Результатом оператора является календарь, состоящий из меток времени t е C, удовлетворяющих условию t1 < t < t2.
Оператор пересечения. Если два календаря содержат метки времени одной и той же размерности, то к ним применим оператор пересечения обычных множеств. Введем теперь оператор пересечения календарей разных размерностей следующим образом: C1 n C2 = {t е C1 : 3t' е C2, t е t'}.
Другим вариантом оператора пересечения (будем называть его нестрогим) является следующий:
C1 n* C2 = {t е C1 : 3t' е C2, t n t' * 0}.
Различие операторов n и n можно проиллюстрировать следующим образом: календарь all(недели) n {(2003, годы)} содержит все недели, полностью содержащиеся в 2003 году, а календарь all(недели) n {(2003, годы)} содержит все недели, хотя бы частично содержащиеся в 2003 году.
Очевидно, что если C1 и C2 содержат метки времени одной и той же размерности, то C1 n C2 = C1 n C2, и оператор пересечения сводится к обычному пересечению множеств.
Оператор выборки по шаблону. Как и в случае задания размерностей времени, календари удобно задавать с помощью шкал. Для этого служит оператор pattern, определяемый следующим образом.
Пусть задана размерность j и шкала льлгл: •• л„, и пусть л„ — j или л„ ^ j. Результатом оператора pattern(лl:Л2:Лз: - л„, T1T2T3: ... :T„, j),
где Ti е N (i = 1 .„), является календарь, состоящий из всех меток времени размерности j, таких, что каждая из них по шкале льл2л •• л„ имеет представление (т1:т2:т3: ... :т„, j), такое, что т е Ti, i = 1...n. При этом для задания множеств Ti (i = 1...n) используются те же обозначения, что и в операторе pattern для задания размерностей времени.
Пример 9. Оператор pattern позволяет легко описывать календари, встречающиеся в реальной жизни. Например, календарь "последняя пятница каждого месяца" размерности сутки задается следующим образом: pattern(месяцы:пятницы, *:{last}, сутки).
Календарь, содержащий все 31-е числа месяцев, можно задать следующим образом: pattern(месяцы:сутки, *:{31}, сутки). Такой календарь будет содержать последний день тех месяцев, которые состоят из 31 дня. □
Оператор расширения. Оператор имеет вид: extend(C, ±n), где C - календарь, n -натуральное число. Результатом оператора является календарь C', определяемый следующим образом:
C = {(т', л): Э(т, л) е C, Т е [т- n; т]}, если n указано со знаком "минус", или C = {(т', л): Э(т, л) е C, т' е [т; т+ „]}, если n указано со знаком "плюс".
Пример 10. Пусть календарь C содержит дни, в которые происходили аварии на некотором производственном предприятии. Если мы хотим получить показания датчиков за трехдневный период перед каждой аварией, то нам необходимо получить календарь, содержащий интересующие нас дни. Это можно сделать с помощью оператора расширения: extend(C, - 3). □
3.4. Базовые понятия хронологической модели
Наша модель базируется на реляционной модели, дополненной операторами для работы с упорядоченными данными [23].
Кроме того, мы вводим поддержку темпоральных данных согласно подходу, выбранному в [15]. Вводятся два новых семейства типов данных: для описания меток времени и интервалов времени. Понятие метки времени было введено выше как пара (т л), где т- целое число (значение времени), л - размерность времени. Метки времени различных размерностей образуют различные типы данных. Т. е. к каждому типу данных относятся
Электронный журнал «Исследовано в России» 1020 http://zhurnal.ape.relarn.ru/articles/2004/090.pdf
метки времени строго одной и той же размерности. Например, возможны типы данных "метки времени размерности секунды", "метки времени размерности кварталы" и т.д. Интервалом времени ([тн, тк], /), где тн < тк, а (тн, /и) и (тк, /и) - метки времени, будем называть множество меток времени {(т /и) : тн < т< тк}. Темпоральным отношением будем называть отношение, в котором имеется хотя бы один атрибут одного из типов меток времени или интервалов времени.
Для темпоральных отношений вводятся операторы РАСК и иЫРАСК (ниже используются обозначения заголовков отношений и кортежей из [2]). Для темпорального отношения Я, с заголовком (Г, Х1, Х2, ..., Хп), где атрибут Т имеет тип интервала времени, результатом оператора иЫРАСК(Я, Т) является темпоральное отношение с заголовком (Т, Х1, Х2, . , Хп), где атрибут Т имеет тип метки времени той же размерности, что и интервальный тип атрибута Т исходного отношения. Результирующее отношение для каждого кортежа (Г:/,Х1:х1, Х2:х2, ..., Хп:хп) исходного отношения содержит всевозможные кортежи (Т:р, Х1:х1, Х2:х2, ..., Хп:хп), такие что р е /. Для отношения Я результат оператора иЫРАСК(Я, Г) будем называть развернутой формой. Если же в исходном отношении Я атрибут Г имеет тип метки времени, то будем считать, что иЫРАСК(Я, Г) = Я.
Для темпорального отношения Я с заголовком (Г, Х1, Х2, ..., Хп), где атрибут Г имеет тип метки или интервала времени, результатом оператора РАСК(Я, Г) является темпоральное отношение с заголовком (Г, Х1, Х2, ..., Хп), где атрибут Г имеет тип интервала времени той же размерности, что и атрибут Г исходного отношения. Результирующим отношением является минимальное (в смысле мощности отношения) из таких отношений Я, что иЫРАСК(Я, Г) = ШРАСК(Я, Г). Для отношения Я результат оператора РАСК(Я, Г) будем называть свернутой формой.
Определение 11. Пусть Я - темпоральное отношение и пусть Я' = иЫРАСК(Я, Г). Если значение атрибута Г в отношении Я' уникально (т.е. в отношении Я' не может быть двух различных кортежей с совпадающими значениями данного атрибута), то Я называется хронологической последовательностью. При этом атрибут Г отношения Я будем называть календарным атрибутом, а множество значений, которые принимает атрибут Г в отношении Я', будем называть календарем хронологической последовательности. □
Таким образом, хронологическая последовательность - это темпоральное отношение, в котором для каждой метки времени имеется ровно один кортеж.
Календарь хронологической последовательности является множеством меток времени одной и той же размерности, а значит, является календарем в смысле определения 9. В силу этого, к операторам задания календарей, введенным в разделе 3.3, можно добавить еще один - оператор задания календаря на основе хронологической последовательности. Пусть Я -хронологическая последовательность, Г - календарный атрибут. Результатом оператора еа1впёаг(Я) является календарь, состоящий из всех меток времени, являющихся значениями атрибута Г в отношении иЫРАСК(Я, Г).
Поскольку хронологическая последовательность является отношением, к ней применимы все реляционные операторы. В следующем разделе вводятся специфические операторы для хронологических последовательностей.
3.5. Операторы над хронологическими последовательностями
Выборка по времени. Выборка по времени для хронологических последовательностей имеет две особенности.
1. Требуется иметь возможность в критерии выборки задавать метки времени, отсутствующие в исходном отношении (значения невременных атрибутов в эти моменты времени могут быть получены с помощью интерполяции), что невозможно сделать при помощи реляционного оператора выборки.
2. При описании критерия выборки по времени зачастую требуется использование знаний о различных размерностях времени и их взаимосвязях. Например, для формулировки запроса "выбрать все показания датчика за вторую рабочую смену каждого дня в течение заданного месяца" необходимо в запросе указать взаимосвязь размерностей месяцы и
Электронный журнал «Исследовано в России» 10 21 http://zhurnal.ape.relarn.ru/articles/2004/090.pdf
сутки, а также сутки и смены. Во- первых, это крайне сложно сделать с помощью реляционных языков запросов, а во-вторых, нецелесообразно описывать взаимосвязь размерностей времени в каждом запросе - логичнее один раз описать эти размерности времени с помощью аппарата, предложенного в разделе 3.2.
Поэтому для хронологических последовательностей вводится специализированный оператор выборки по времени.
Пусть R - хронологическая последовательность с заголовком (T:T0, X1:T1,X2:T2, ..., X„:T„), T - ее календарный атрибут размерности л, и пусть С -некоторый календарь размерности л. Оператор выборки по времени (a1 ) имеет следующий вид:
at (R, С, F),
где необязательный параметр F : ^xT0 ^ T1xT2x...xT„ - это функция интерполяции, позволяющая для хронологической последовательности с заголовком (T:T0, X1:T1, X2:T2, ..., X„:T„) и для любой метки времени, принадлежащей типу T0, и находящейся между первой и последней меткой времени данной хронологической последовательности, вычислить значения атрибутов X1, X2, ..., X„ (здесь через Ш мы обозначили множество всевозможных хронологических последовательностей с заголовком (T: T0, X1: T1, X2: T2, ..., Xn:T„)). Результатом оператора является хронологическая последовательность R', с таким же заголовком, как у последовательности UNPACK(R, T), содержащая все кортежи (T:t, X1:x1, X2:x2, ..., X„:x„) отношения UNPACK(R, T), такие что t е C; а также, если указана функция интерполяции, все кортежи (T:t, X1:x1, X2:x2, ..., X„:x„),
такие что t е C, t ^ calendar(R, T) и F(R, t) = (x1, x2, ..., x„).
Ниже приводятся примеры запросов, которые крайне сложно реализовать с помощью реляционных операторов, но которые легко реализуются с помощью введенного оператора выборки и операторов для задания календарей.
Пример 11. Пусть R1 содержит показания датчика (время имеет размерность секунды), R2 содержит историю возникновения аварий технологического оборудования. Необходимо выбрать все показания датчика за те рабочие смены, в течении которых возникала хотя бы одна авария. Такой запрос реализуется следующим образом: a1 (R1, calendar(R1) n (all(смены) n calendar(R2)).
Если же необходимо для каждой аварии получить показания датчика за два часа, предшествующие этой аварии, то запрос можно построить следующим образом: a1 (R1, calendar(R1) n extend(calendar(R2), -120-60)). □
Пример 12. Пусть R содержит прореженные показания датчика. Необходимо, например, для визуализации в виде таблицы или тренда, получить значения измеряемого параметра за каждые 10 секунд в течение всех воскресений января 2003 года. Такой запрос реализуется следующим образом: a1 (R, cycle(0, 10, секунды) n
n (all(воскресенья) n {(2003:01, месяцы)}), F), где F - требуемая функция интерполяции. □
Выборка по невременным атрибутам. Важно предусмотреть возможность выборки таких кортежей, которые в хронологической последовательности отсутствуют, но могут быть восстановлены с помощью интерполяции. Для этого вводится оператор INTERPOLATE(R, F),
результат которого содержит все кортежи заданной хронологической последовательности R, а также все кортежи, которые можно получить из R с помощью функции интерполяции F.
В силу дискретности используемой модели времени, число меток времени одной размерности между первой и последней метками времени хронологической последовательности всегда будет конечным. Поэтому результат оператора INTERPOLATE всегда будет содержать конечное число кортежей. Если применить оператор выборки после применения оператора INTERPOLATE, то будут выбраны все кортежи исходного отношения и кортежи, восстановленные с помощью интерполяции, удовлетворяющие заданному условию. Однако мощность результирующего отношения во многих случаях будет настолько
Электронный журнал «Исследовано в России» 1022 http://zhurnal.ape.relarn.ru/articles/2004/090.pdf
большой, что такой результат сам по себе представляет небольшой интерес. Поэтому имеет смысл использовать оператор INTERPOLATE не как самостоятельный оператор, а как часть цепочки операторов INTERPOLATE ^ a ^ ^ PACK, где a - реляционный оператор выборки, nT - оператор проекции по календарному атрибуту. Будем обозначать такую цепочку операторов символом a : a*© (R, F) = PACKET (a© (INTERPOLATE(R, F))), T).
Пример 13. Пусть R1 и R2 содержат показания датчиков. Необходимо получить все показания первого датчика за периоды времени, в течение которых значения параметра, регистрируемого вторым датчиком (атрибут X), превышало 75. Запрос будет иметь следующий вид:
a1 (R1, calendar(R1) n calendar(a X> 75 (R2, F))). □
Физическая реализация оператора a является отдельной проблемой. Для его поддержки была разработана специальная индексная структура, основанная на IP-индексе [19, 20], однако ее описание выходит за рамки данной статьи.
Темпоральное агрегирование. Группировка данных по времени требует задания взаимосвязей различных размерностей времени. Целесообразно описывать в базе данных взаимосвязи используемых размерностей времени, а в операторе агрегирования просто указывать, какую размерность должны иметь метки времени результата.
Пусть R - хронологическая последовательность с заголовком (T:TЛ, X1:T1, X2:T2, ..., X„:T„), T - ее календарный атрибут размерности л, и пусть C -некоторый календарь размерности п, П отлична от л. Оператор темпорального агрегирования (y') имеет следующий вид: Y (R, C, Faep),
где Fагр - агрегатная функция, для любой подпоследовательности кортежей последовательности UNPACK(R, T) возвращающая единственное значение из множества T1xT2x.xT„. Результатом данного оператора является хронологическая последовательность с заголовком (T:Tn, X1:T1, X2:T2, ..., X„:T„), где Tn - тип меток времени размерности п Результирующая хронологическая последовательность состоит из всех кортежей вида (T:t, X1:x1, X2:x2, ..., X„:x„), таких что t е C, а (x1, x2, ..., x„) есть результат применения функции F^ к подпоследовательности кортежей последовательности UNPACK(R, T), метки времени которых входят в метку времени t.
Пример 14. Пусть на некотором предприятии осуществляется круглосуточное дежурство операторов сменами по 8 часов. Всего имеется 4 группы операторов, дежурящих по одной смене по очереди. Пусть в хронологической последовательности R содержатся показания некоторого датчика. Необходимо получить усредненные показания датчика за каждую смену, в которую дежурила вторая группа операторов.
Для выполнения такого запроса необходимо описать используемые размерности времени:
смены = group(1, 1, часы, 8);
циклы дежурства = group(1, 1, смены, 4).
После этого требуемый запрос формулируется очень просто: Y(R, pattern(циклы дежурства:смены, *:{2}, смены), ^гр), где Гагр - это, в данном случае, агрегатная функция усреднения. □
Соединение по времени. Для выполнения соединения по времени используются отношения сравнения меток времени. Пусть R1 - хронологическая последовательность с календарным атрибутом T1 размерности л, R2 - хронологическая последовательность с календарным атрибутом T2 размерности п, причем л и п могут не совпадать. Оператор соединения по времени имеет следующий вид:
R1 MfR1.T1 ® R2T2 R2,
где ® - одно из отношений между метками времени: "раньше", "позже", "входит в", "пересекается с", "равно". Причем равенство допускается, только если размерности л и п совпадают.
Электронный журнал «Исследовано в России» 1023 http://zhurnal.ape.relarn.ru/articles/2004/090.pdf
Этот оператор есть суперпозиция оператора иЫРАСК и реляционных операторов декартового произведения и выборки:
Я1 И ® я2 .г2 Я2 = а 0 я2.г2 (иКРАСК(Я1, Г{) х ШРАСК^, Т2)).
Пример 15. Пусть суточная выработка электроэнергии сохраняется в хронологической последовательности Я1 с календарным атрибутом Г1 размерности часы. При этом дневной план по выработке обновляется ежемесячно, и хранится в хронологической последовательности Я2 с календарным атрибутом Г2 размерности месяцы. Для получения отчета, содержащего для каждого дня планируемую и фактическую выработку, достаточно выполнить следующий запрос: Я1 ^ ^ с ^ г Я2. □
Соединение по невременным атрибутам. Как и в случае выборки, при соединении важно учитывать значения хронологических последовательностей, восстановимые с помощью интерполяции. Оператор соединения по невременным атрибутам вводится аналогично выборке по невременным атрибутам.
Пусть Я1 и Я2 - хронологические последовательности, Г1 и Г2 - их календарные атрибуты, имеющие тип меток времени одной и той же размерности, ¥1 и ¥2 - функции интерполяции для последовательностей Я1 и Я2, 0 - условие соединения, использующее невременные атрибуты последовательностей Я1 и Я2. Тогда оператор соединения по
невременным атрибутам, учитывающий интерполяцию (И*®), вводится следующим образом:
И*® (Я1, Я2, ¥ь ¥2) =
РАСК(пТ (1ЫТЕЯРОЬАТЕ(Я1, ¥1) И {КТ = Я Т )&0 1ЫТЕЯРОЬАТЕ(Я2, ¥2)), Т1).
Пример 16. Пусть Я1 и Я2 содержат показания датчиков (в атрибуте Х). Необходимо найти интервалы времени, в течение которых показание первого датчика превышало показание второго датчика, с учетом значений, получаемых при помощи функции
интерполяции ¥. Запрос будет иметь следующий вид:
*
И
Я
1.Х >Я2.Х (ЯЬ Я2, ¥, ¥). П
4. ВЫВОДЫ
• Средств реляционной модели данных не хватает для БД в промышленных ИС. Существующие разработки в области темпоральных БД также не позволяют решить все проблемы.
• Предложен новый математический аппарат для описания размерностей времени, шкал и календарей.
• Предложена хронологическая модель данных, являющаяся расширением реляционной модели. Она учитывает специфику БД, предназначенных для промышленных ИС, позволяя:
о формулировать запросы, используя календари для выборки данных, и взаимосвязи
между различными размерностями времени для агрегирования; о при выполнении запросов учитывать данные, отсутствующие в БД в явном виде, но восстановимые с помощью интерполяции.
Список литературы
1. Гуляев А.И. Временные ряды в динамических базах данных. — М.: Радио и связь, 1989
— 128 с.
2. Дейт К.Дж. Введение в системы баз данных, 7-е издание: Пер. с англ. — М.: Издательский дом "Вильямс", 2001 — 1072 с.
3. Жук В.И., Малашинин И.И. Идентификация объектов в базах данных информационно-измерительных систем автоматизации физических экспериментов. //Прикладная информатика /Под ред. В.М. Савинкова. — Вып. 2. — М.: Финансы и статистика, 1982
— С. 29-48.
4. Марков Б. Л. Организация данных в системах мониторинга. //Высокопроизводительные вычислительные системы и микропроцессоры. — Сборник научных трудов ИМВС РАН
— Москва, 2000.
5. Маслов Д.В. Некоторые вопросы функциональности и производительности WinCC версии 5.1 //Промышленные АСУ и контроллеры. — 2003. — №6 — С. 45-46.
6. Прохоров А. Использование объектно-реляционных СУБД для хранения и анализа временных рядов. //КомпьютерПресс. — 2001. — №6.
7. Смирнов В. Системы хранения данных - тенденции, решения, перспективы. //Корпоративные системы. — 2002. — №3 — C. 24-29.
8. Bettini C., Dyreson C.E., Evans W.S., Snodgrass R.T., Wang X.S. A Glossary
of Time Granularity Concepts. — Temporal Databases: Research and Practice, Eds. Etzion O., Jajodia S., Sripada S., Springer-Verlag, 1998.
9. Bettini C., De Sibi R. Symbolic Representation of User-defined Time Granularities. — Annals of Mathematics and Artificial Intelligence, 2000, Vol. 30, No. 1-4, pp. 53-92.
10. Bettini C., Wang X.S., Bertino E., Jajodia S. Semantic Assumptions and Query Evaluation in Temporal Databases. — ACM SIGMOD Conference, 1995, pp. 257-268.
11. Bettini C., Wang X.S., Jajodia S. A General Framework for Time Granularity and Its Application to Temporal Reasoning. — Annals of Mathematics and Artificial Intelligence, 1998, Vol. 22, No. 1-2, pp. 29-58.
12. Bonnet P., Gehrke J., Seshadri P. Towards Sensor Database Systems. — Proceedings of the Second International Conference on Mobile Data Management, 2001, pp. 3-14.
13. Clifford J., Warren D.S. Formal semantics for time in databases. — ACM Transactions on Database Systems, 1983, Vol. 8 , No. 2, pp. 214-254.
14. Chandra R., Segev A. Managing Temporal Financial Data in an Extensible Database. — Proceedings of the 19th Conference on Very Large Databases, 1993, pp. 302-313.
15. Date C.J., Darwen H., Lorentzos N. Temporal Data & the Relational Model (1st edition). — Morgan Kaufmann, 2002, 480 pages.
16. Dreyer W., Dittrich A.K., Schmidt D. An Object-Oriented Data Model for a Time Series Management System. — Proceedings of the 7th International Working Conference on Scientific and Statistical Database Management, 1994, pp. 186-195.
17. Dyreson C.E., Evans W.S., Lin H., Snodgrass R.T. Efficiently Supported Temporal Granularities. — IEEE Transactions on Knowledge and Data Engineering, 2000, Vol. 12, No. 4, pp. 568-587.
18. Leban B., McDonald D., Forster D. A Representation for Collection of Temporal Intervals.
— Proceedings of the AAAI-1986, 5th International Conference on Artificial Intelligence, 1986, pp. 367-371.
19. Lin L., Risch T., Skold M., Badal D. Indexing Values of Time Sequences — Proceedings of the 5th International Conference on Information and Knowledge Management, 1996, pp. 223232.
20. Lin L., Risch T. Quering Continuous Time Sequences — Proceedings of the 24th International Conference on Very Large Databases, 1998, pp. 170-181.
Электронный журнал «Исследовано в России» 1025 http://zhurnal.ape.relarn.ru/articles/2004/090.pdf
21. Niezette M., Stevenne J. An Efficient Symbolic Representation of Periodic Time. — Proceedings of the International Conference on Information and Knowledge Management, Lecture Notes in Computer Science, 1993, Vol. 752, pp. 161-168.
22. Ning P., Wang X.S., Jajodia S. An Algebraic Representation of Calendars — Annals of Mathematics and Artificial Intelligence, 2002, Vol. 36, No. 1-2, pp. 5-38.
23. Ramakrishnan R., Donjerkovic D., Ranganathan A., Beyer K.S., Krishnaprasad M. SRQL: Sorted Relational Query Language. — Proceedings of the 10th International Conference on Scientific and Statistical Database Management, 1998, pp. 84-95.
24. Richardson J. Supporting Lists in a Data Model (A Timely Approach). — Proceedings of the 18th International Conference on Very Large Databases, 1992, pp. 127-138.
25. Segev A., Shoshani A. A Temporal Data Model Based on Time Sequences. — Temporal Databases - Theory, Design and Implementation, Eds. Tansel A.U. et al., The Benjamin/Cummings Publishing Company, 1993, pp. 248-269.
26. Segev A., Shoshani A. Logical Modeling of Temporal Data. — Proceedings of ACM SIGMOD Conference, 1987, pp. 454-466.
27. Seshadri P. Management of Sequence Data. — Ph.D. Thesis, University of Wisconsin, Computer Science Department, 1996.
28. Seshadri P., Livny M., Ramakrishnan R. The Design and Implementation of a Sequence Database System. — Proceedings of the 22th International Conference on Very Large Databases, 1996, pp. 99-110.
29. Wang X.S., Bettini C., Brodsky A., Jajodia S. Logical Design for Temporal Databases with Multiple Granularities. — ACM Transactions on Database Systems, 1997, Vol. 22, No. 2, pp. 115-170.