Хронологическая база данных: различия между версиями
[непроверенная версия] | [непроверенная версия] |
м Викификация |
Гриня12 (обсуждение | вклад) →Литература: + шаблон {{t|Базы данных}} |
||
(не показано 5 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
'''Хронологическая база данных''' |
'''Хронологическая база данных''' — [[база данных]], содержащая исторические (хронологические) данные, то есть данные, относящиеся к прошлым и, возможно, к будущим периодам времени. Обычная, нехронологическая база данных содержит только текущие данные. |
||
== Типы данных и операторы == |
== Типы данных и операторы == |
||
Хронологические данные представляют собой истинные высказывания с указанием интервалов времени. Интервалом времени является непустой отрезок временной шкалы, для его обозначения используется специальный интервальный [[тип данных]] INTERVAL_DATE. Значения этого типа записываются в виде [b:e], где b |
Хронологические данные представляют собой истинные высказывания с указанием интервалов времени. Интервалом времени является непустой отрезок временной шкалы, для его обозначения используется специальный интервальный [[тип данных]] INTERVAL_DATE. Значения этого типа записываются в виде <math>[b:e]</math>, где <math>b, e</math> — выражения типа DATE, соответствующие начальной и конечной временной позиции интервала. Под временными позициями (позициями на временной шкале) понимают единицы времени, подходящие для определённой цели (миллисекунды, секунды, сутки) и считающиеся неделимыми. |
||
Допустим i, |
Допустим <math>i, i_1, i_2</math> — значения интервального типа, имеющие соответственно начальные позиции <math>b, b_1, b_2</math> и конечные позиции <math>e, e_1, e_2</math>, <math>p</math> — произвольная временная позиция. Для обозначения предшествующей и последующей временной позиции используются выражения вида |
||
<math>p-1</math> и <math>p+1</math>. Оператор <math>\text{COUNT}(i)</math> возвращает количество различных позиций <math>p</math> таких, что <math>p \in i</math>. Интервал <math>i</math> является единичным интервалом, если <math>\text{COUNT}(i)=1</math>. |
|||
Для проверки условий, связанных с интервалами используются операторы Аллена: |
Для проверки условий, связанных с интервалами, используются операторы Аллена: |
||
* интервалы равны: <math> |
* интервалы равны: <math>i_1=i_2\Leftrightarrow(b_1=b_2)\wedge(e_1=e_2)</math>; |
||
* |
* <math>i_1</math> включает <math>i_2</math>: <math>i_1\supseteq i_2\Leftrightarrow(b_1\le b_2)\wedge(e_1\ge e_2)</math> |
||
* |
* <math>i_1</math> строго включает <math>i_2</math>: <math>i_1\supset i_2\Leftrightarrow(i_1\supseteq i_2)\wedge(i_1\ne i_2)</math>; |
||
* |
* <math>i_1</math> перед <math>i_2</math>: <math>i_1 ~\text{BEFORE}~ i_2 \Leftrightarrow e_1 < b_2</math>; |
||
* интервалы встречаются: |
* интервалы встречаются: <math>i_1~\text{MEETS}~i_2 \Leftrightarrow (b_2 = e_1+1) \vee (b_1 = e_2+1)</math>; |
||
* интервалы перекрываются: |
* интервалы перекрываются: <math>i_1~\text{OVERLAPS}~i_2 \Leftrightarrow (b_1 \le e_2) \wedge (b_2 \le e_1)</math>; |
||
* интервалы сливаются: |
* интервалы сливаются: <math>i_1~\text{MERGES}~i_2 \Leftrightarrow (i_1 ~\text{OVERLAPS}~ i_2) \vee (i_1 ~\text{MEETS}~ i_2)</math>. |
||
Кроме того, имеются бинарные операторы над интервалами, которые возвращают интервалы: |
Кроме того, имеются бинарные операторы над интервалами, которые возвращают интервалы: |
||
* оператор объединения |
* оператор объединения <math>i_1~\text{UNION}~i_2</math> возвращает [MIN(b1, b2):MAX(e1, e2)], если выражение <math>i_1~\text{MERGES}~i_2</math> истинно, в противном случае результат не определён; |
||
* оператор пересечения |
* оператор пересечения <math>i_1~\text{INTERSECT}~i_2</math> возвращает [MAX(b1, b2): MIN(e1, e2)], если выражение <math>i_1~\text{OVERLAPS}~i_2</math> истинно, в противном случае результат не определён; |
||
* оператор разности |
* оператор разности <math>i_1~\text{MINUS}~i_2</math> возвращает [b1:MIN(b2-1,e1)], если b1 < b2 и e1 ≤ e2 и возвращает [MAX(e2+1,b1), e1], если b1 ≥ b2 и e1 > e2, в противном случае результат не определён. |
||
Операторы EXPAND и COLLAPSE принимают в качестве операнда унарное [[Отношение ( |
Операторы EXPAND и COLLAPSE принимают в качестве операнда унарное [[Отношение (реляционная модель)|отношение]], [[Кортеж (информатика)|кортежи]] которого содержат интервалы и возвращают отношение того же типа, являющееся соответственно развёрнутой и сжатой формой исходного отношения. |
||
⚫ | |||
{| |
{| |
||
|+ |
|||
⚫ | |||
| |
| |
||
| valign="top"| |
| valign="top"| |
||
Строка 72: | Строка 74: | ||
|} |
|} |
||
Развёрнутой формой отношения R является отношение Rx, содержащее все кортежи с единичным интервалом [p:p], где p |
Развёрнутой формой отношения R является отношение Rx, содержащее все кортежи с единичным интервалом [p: p], где p — позиция в некотором интервале некоторого кортежа отношения R. Сжатой формой отношения R является такое отношение Rc, что: отношения R и Rc имеют одну и ту же развёрнутую форму; никакие два разных кортежа в отношении Rc не содержат интервалы i1 и i2 такие, что i1 MERGES i2 является истиной. |
||
Оператор PACK и UNPACK принимают в качестве операндов отношение и атрибут интервального типа, принадлежащий этому отношению, и возвращает отношение того же типа, соответственно свёрнутое по указанному атрибуту с группировкой по остальным атрибутам, и развёрнутое по указанному атрибуту. |
Оператор PACK и UNPACK принимают в качестве операндов отношение и атрибут интервального типа, принадлежащий этому отношению, и возвращает отношение того же типа, соответственно свёрнутое по указанному атрибуту с группировкой по остальным атрибутам, и развёрнутое по указанному атрибуту. |
||
⚫ | |||
{| |
{| |
||
|+ |
|||
⚫ | |||
| valign="top"| |
| valign="top"| |
||
{| class="wikitable" |
{| class="wikitable" |
||
Строка 139: | Строка 142: | ||
Для всех обычных реляционных операторов определены аналогичные им U_операторы, которые распаковывают отношение по указанным атрибутам, выполняют соответствующую операцию и упаковывают полученный результат. Например, операторы U_MINUS, U_INTERSECT, U_UNION, U_JOIN соответствуют операторам MINUS, INTERSECT, UNION, JOIN. U_OPERATOR определяется как: |
Для всех обычных реляционных операторов определены аналогичные им U_операторы, которые распаковывают отношение по указанным атрибутам, выполняют соответствующую операцию и упаковывают полученный результат. Например, операторы U_MINUS, U_INTERSECT, U_UNION, U_JOIN соответствуют операторам MINUS, INTERSECT, UNION, JOIN. U_OPERATOR определяется как: |
||
:PACK ((UNPACK R1 ON D) OPERATOR (UNPACK R2 ON D)) ON D |
: PACK ((UNPACK R1 ON D) OPERATOR (UNPACK R2 ON D)) ON D |
||
Операция распаковки при использовании длинных интервалов с большой степенью детализации может потребовать слишком большого объёма памяти для своего выполнения. Использование U_операторов позволяет оптимизатору выбрать реализацию, которая требует минимального количества промежуточных результатов. |
Операция распаковки при использовании длинных интервалов с большой степенью детализации может потребовать слишком большого объёма памяти для своего выполнения. Использование U_операторов позволяет оптимизатору выбрать реализацию, которая требует минимального количества промежуточных результатов. |
||
⚫ | |||
{| |
{| |
||
|+ |
|||
⚫ | |||
| valign="top"| |
| valign="top"| |
||
{| class="wikitable" |
{| class="wikitable" |
||
Строка 173: | Строка 177: | ||
== Декомпозиция == |
== Декомпозиция == |
||
Хранение текущей информации в одних переменных отношения, а исторической информации |
Хранение текущей информации в одних переменных отношения, а исторической информации — в других называется горизонтальной декомпозицией. Хранение исторической информации в виде множества отдельных переменных отношения (каждая из которых содержит один атрибут интервального типа и один атрибут другого типа) называется вертикальной декомпозицией. |
||
Предположим, переменная отношения R имеет атрибут интервального типа D и атрибуты других типов A1, A2, …, An. При изменении атрибутов A1, A2, …, An независимо друг от друга во времени в переменную отношения необходимо вносить сложный ряд обновлений, для представления информации о значении атрибута в течение определённого интервала времени может потребоваться более одного кортежа. Поэтому целесообразно распределить информацию по переменным отношения R1, R2, …, Rn, которые будут иметь атрибуты D и A1, D и A2, …, D и An соответственно. |
Предположим, переменная отношения R имеет атрибут интервального типа D и атрибуты других типов A1, A2, …, An. При изменении атрибутов A1, A2, …, An независимо друг от друга во времени в переменную отношения необходимо вносить сложный ряд обновлений, для представления информации о значении атрибута в течение определённого интервала времени может потребоваться более одного кортежа. Поэтому целесообразно распределить информацию по переменным отношения R1, R2, …, Rn, которые будут иметь атрибуты D и A1, D и A2, …, D и An соответственно. |
||
Строка 212: | Строка 216: | ||
|} |
|} |
||
Данное отношение |
Данное отношение после выполнения декомпозиции находится в [[Шестая нормальная форма|шестой нормальной форме]]. |
||
== Ограничения целостности == |
== Ограничения целостности == |
||
Строка 236: | Строка 240: | ||
}} |
}} |
||
[[Категория: |
{{Базы данных}} |
||
[[Категория:Базы данных]] |
Текущая версия от 14:28, 31 октября 2024
Хронологическая база данных — база данных, содержащая исторические (хронологические) данные, то есть данные, относящиеся к прошлым и, возможно, к будущим периодам времени. Обычная, нехронологическая база данных содержит только текущие данные.
Типы данных и операторы
[править | править код]Хронологические данные представляют собой истинные высказывания с указанием интервалов времени. Интервалом времени является непустой отрезок временной шкалы, для его обозначения используется специальный интервальный тип данных INTERVAL_DATE. Значения этого типа записываются в виде , где — выражения типа DATE, соответствующие начальной и конечной временной позиции интервала. Под временными позициями (позициями на временной шкале) понимают единицы времени, подходящие для определённой цели (миллисекунды, секунды, сутки) и считающиеся неделимыми.
Допустим — значения интервального типа, имеющие соответственно начальные позиции и конечные позиции , — произвольная временная позиция. Для обозначения предшествующей и последующей временной позиции используются выражения вида и . Оператор возвращает количество различных позиций таких, что . Интервал является единичным интервалом, если .
Для проверки условий, связанных с интервалами, используются операторы Аллена:
- интервалы равны: ;
- включает :
- строго включает : ;
- перед : ;
- интервалы встречаются: ;
- интервалы перекрываются: ;
- интервалы сливаются: .
Кроме того, имеются бинарные операторы над интервалами, которые возвращают интервалы:
- оператор объединения возвращает [MIN(b1, b2):MAX(e1, e2)], если выражение истинно, в противном случае результат не определён;
- оператор пересечения возвращает [MAX(b1, b2): MIN(e1, e2)], если выражение истинно, в противном случае результат не определён;
- оператор разности возвращает [b1:MIN(b2-1,e1)], если b1 < b2 и e1 ≤ e2 и возвращает [MAX(e2+1,b1), e1], если b1 ≥ b2 и e1 > e2, в противном случае результат не определён.
Операторы EXPAND и COLLAPSE принимают в качестве операнда унарное отношение, кортежи которого содержат интервалы и возвращают отношение того же типа, являющееся соответственно развёрнутой и сжатой формой исходного отношения.
Пример использования операторов EXPAND и COLLAPSE:
|
|
|
Развёрнутой формой отношения R является отношение Rx, содержащее все кортежи с единичным интервалом [p: p], где p — позиция в некотором интервале некоторого кортежа отношения R. Сжатой формой отношения R является такое отношение Rc, что: отношения R и Rc имеют одну и ту же развёрнутую форму; никакие два разных кортежа в отношении Rc не содержат интервалы i1 и i2 такие, что i1 MERGES i2 является истиной.
Оператор PACK и UNPACK принимают в качестве операндов отношение и атрибут интервального типа, принадлежащий этому отношению, и возвращает отношение того же типа, соответственно свёрнутое по указанному атрибуту с группировкой по остальным атрибутам, и развёрнутое по указанному атрибуту.
Пример использования операторов PACK и UNPACK:
|
|
|
Упаковать отношение R по нескольким атрибутам D1, D2, …, Dn можно распаковав R по всем указанным атрибутам, а затем упаковать полученный результат по атрибуту D1, результат упаковки упаковать по атрибуту D2, …, результат упаковки упаковать по атрибуту Dn.
Для всех обычных реляционных операторов определены аналогичные им U_операторы, которые распаковывают отношение по указанным атрибутам, выполняют соответствующую операцию и упаковывают полученный результат. Например, операторы U_MINUS, U_INTERSECT, U_UNION, U_JOIN соответствуют операторам MINUS, INTERSECT, UNION, JOIN. U_OPERATOR определяется как:
- PACK ((UNPACK R1 ON D) OPERATOR (UNPACK R2 ON D)) ON D
Операция распаковки при использовании длинных интервалов с большой степенью детализации может потребовать слишком большого объёма памяти для своего выполнения. Использование U_операторов позволяет оптимизатору выбрать реализацию, которая требует минимального количества промежуточных результатов.
Пример использования оператора U_MINUS:
|
|
|
Декомпозиция
[править | править код]Хранение текущей информации в одних переменных отношения, а исторической информации — в других называется горизонтальной декомпозицией. Хранение исторической информации в виде множества отдельных переменных отношения (каждая из которых содержит один атрибут интервального типа и один атрибут другого типа) называется вертикальной декомпозицией.
Предположим, переменная отношения R имеет атрибут интервального типа D и атрибуты других типов A1, A2, …, An. При изменении атрибутов A1, A2, …, An независимо друг от друга во времени в переменную отношения необходимо вносить сложный ряд обновлений, для представления информации о значении атрибута в течение определённого интервала времени может потребоваться более одного кортежа. Поэтому целесообразно распределить информацию по переменным отношения R1, R2, …, Rn, которые будут иметь атрибуты D и A1, D и A2, …, D и An соответственно.
|
|
|
Данное отношение после выполнения декомпозиции находится в шестой нормальной форме.
Ограничения целостности
[править | править код]Вхождение атрибута D интервального типа в состав потенциального ключа не решает проблему избыточности и противоречия. Отношение может иметь два кортежа с перекрывающимися интервалами и совпадающими значениями остальных атрибутов. При этом имеется избыточность информации, данные за некоторые временные интервалы, указываются дважды. Кроме того, существует проблема многословия, когда два кортежа имеют интервалы следующие непосредственно друг за другом при совпадающих значениях остальных атрибутов. В этом случае, хотя информация и не дублируется, но её можно представить в виде одного кортежа. Для устранения проблемы избыточности и многословия необходимо, чтобы переменная отношения постоянно была упакована по атрибуту D.
Кроме того, отношение может содержать два кортежа с перекрывающимися интервалами, но с различными значениями других неключевых атрибутов, в результате чего информация будет противоречивой. Для устранения противоречия необходимо, чтобы переменная отношения была постоянно распакована по атрибуту D.
Для удовлетворения этих требований вводятся U_ключи. Переменная отношения поддерживается упакованной по U_ключу и распаковывается при внесении изменений для поддержания непротиворечивого состояния.
Литература
[править | править код]- Дейт К. Дж. Введение в системы баз данных = Introduction to Database Systems. — 8-е изд. — М.: Вильямс, 2005. — 1328 с. — ISBN 5-8459-0788-8 (рус.) ISBN 0-321-19784-4 (англ.).