Темпоральна база даних

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Темпоральна база данихбаза даних, що містить історичні (хронологічні) дані, тобто дані, що відносяться до минулого і, можливо, до майбутнього періоду часу. Звичайна, нехронологічна база даних містить тільки поточні дані.

Типи даних і оператори[ред. | ред. код]

Хронологічні дані представляють собою істинні висловлювання із зазначенням інтервалів часу. Інтервалом часу є непорожній відрізок часової шкали, для його позначення використовується спеціальний інтервальний тип даних 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
D
[d06:d09]
[d04:d08]
[d05:d10]
[d01:d01]
Rx
D
[d01:d01]
[d04:d04]
[d05:d05]
[d06:d06]
[d07:d07]
[d08:d08]
[d09:d09]
[d10:d10]
Rc
D
[d01:d01]
[d04:d10]

Розгорнутою формою відношення R є відношення Rx, що містить всі кортежі з одиничним інтервалом [p:p], де p – позиція в деякому інтервалі деякого кортежу відношення R. Стислою формою відношення R є таке відношення Rc, де: відношення R і Rc мають одну і ту ж розгорнуту форму; ніякі два різних кортежі відносно Rc не містять інтервали i1 і i2 такі, що i1 MERGES i2 є істиною.

Оператор PACK і UNPACK приймають в якості операндів відношення і атрибут інтервального типу, що належить цьому відношенню, і повертає відношення того ж типу, відповідно згорнуте по вказаному атрибуту з угрупованням по іншим атрибутам, і розгорнуте по вказаному атрибуту.

Приклад використання операторів PACK і UNPACK:

R

A

D
A2 [d02:d04]
A2 [d03:d05]
A4 [d02:d05]
A4 [d04:d06]
A4 [d09:d10]
PACK R ON D
A D
A2 [d02:d05]
A4 [d02:d06]
A4 [d09:d10]
UNPACK R ON D
A D
A2 [d02:d02]
A2 [d03:d03]
A2 [d04:d04]
A2 [d05:d05]
A4 [d02:d02]
A4 [d03:d03]
A4 [d04:d04]
A4 [d05:d05]
A4 [d06:d06]
A4 [d09:d09]
A4 [d10:d10]

Упакувати відношення 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:

R1
D
[d02:d05]
R2
D
[d03:d03]
результат
D
[d02:d02]
[d04:d05]

Декомпозиція[ред. | ред. код]

Зберігання поточної інформації в одних змінних відношення, а історичної інформації — в інших називається горизонтальною декомпозицією. Зберігання історичної інформації у вигляді безлічі окремих змінних відношення (кожна з яких містить один атрибут інтервального типу і один атрибут іншого типу) називається вертикальною декомпозицією.

Припустимо, змінна відношення R має атрибут інтервального типу D та атрибути інших типів A1, A2, ..., An. При зміні атрибутів A1, A2, ..., An незалежно один від одного у часі в змінну відношення необхідно вносити складний ряд оновлень для подання інформації про значення атрибута протягом визначеного періоду часу може знадобитися більше одного кортежу. Тому доцільно розподілити інформацію по змінним відношення R1, R2, ..., Rn, які будуть мати атрибути D і A1, D A2, ..., D і An відповідно.

Приклад вертикальної декомпозиції
R
A1 A2 D
10 BB+ [d01:d03]
15 BB+ [d04:d05]
15 AA- [d06:d08]
R1
A1 D
10 [d01:d03]
15 [d04:d08]
R2
A2 D
BB+ [d01:d05]
AA- [d06:d08]

Дане відношення після виконання декомпозиції знаходиться в шостій нормальній формі.

Обмеження цілісності[ред. | ред. код]

Входження атрибута D інтервального типу до складу потенційного ключа не вирішує проблему надмірності і протиріччя. Відношення може мати два кортежі з інтервалами, що перекриваються і співпадаючими значеннями інших атрибутів. При цьому присутня надмірність інформації, дані за деякі часові інтервали, зазначаються двічі. Крім того, існує проблема багатослів'я, коли два кортежі мають інтервали, слідуючи безпосередньо один за одним при співпадаючих значеннях інших атрибутів. У цьому випадку, хоча інформація і не дублюється, але її можна представити у вигляді одного кортежу. Для усунення проблеми надмірності і багатослів'я необхідно, щоб змінна відношення постійно була упакована по атрибуту D.

Крім того, відношення може містити два кортежі з інтервалами, що перекриваються, але з різними значеннями інших неключових атрибутів, в результаті чого інформація буде суперечливою. Для усунення суперечності необхідно, щоб змінна відношення була постійно розпакована по атрибуту D.

Для задоволення цих вимог вводяться U_ключі. Змінна відношення підтримується упакованою по U_ключу і розпаковується при внесенні змін для підтримки несуперечливого стану.

Посилання[ред. | ред. код]