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

Матеріал з testwiki
Версія від 11:43, 16 березня 2025, створена imported>Olexa Riznyk (Скасування редагування № 44826523 користувача Андрій Стойгора (обговорення) спотворення семантики)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

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

Класифікація

Унітемпоральна база даних

Унітемпоральна база даних має тільки одну вісь часу: або діапазон чинності (Шаблон:Lang-en), або діапазон системного часу (Шаблон:Lang-en).

Бітемпоральна база даних

Бітемпоральна база даних має дві осі часу:

  • час чинності;
  • час транзакції або час рішення.

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

Тритемпоральна база даних має три осі часу:

  • час чинності;
  • час транзакції;
  • час рішення.

Цей підхід вводить додаткові складнощі.

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

Можливості

Темпоральні бази даних підтримують керування та доступ до темпоральних даних шляхом надання однієї чи більше наступних можливостей[1][2]:

  • Тип даних періоду часу, включно зі здатністю представляти періоди часу без кінця (нескінченність або вічність)
  • Здатність визначати атрибути та бітемпоральні відношення періодів часу чинності та транзакції
  • Підтримуваний системою час транзакції
  • Темпоральні первинні ключі, включно з обмеженнями періодів, що не перекриваються (Шаблон:Lang-en)
  • Темпоральні обмеження, включно з унікальностями та посилальними цілісностями, що не перекриваються (Шаблон:Lang-en)
  • Оновлення та видалення темпоральних записів із автоматичним розділенням і злиттям періодів часу
  • Темпоральні запити на поточний час, моменти часу в минулому чи майбутньому, чи над тривалостями
  • Предикати для запитування періодів часу, часто засновані на Шаблон:Нп

Типи даних і оператори

Хронологічні дані представляють собою істинні висловлювання із зазначенням інтервалів часу. Інтервалом часу є непорожній відрізок часової шкали, для його позначення використовується спеціальний інтервальний тип даних INTERVAL_DATE. Значення цього типу записується у вигляді [b:e], де b,e — вирази типу DATE, відповідні початковій і кінцевій часовій позиції інтервалу. Під часовими позиціями (позиціями на часовій шкалі) розуміють одиниці часу, що підходять для певної мети (мілісекунди, секунди, доба) і вважаються неподільними.

Припустимо i,i1,i2 — значення інтервального типу, що мають відповідні початкові позиції b,b1,b2 і кінцеві позиції e,e1,e2, p — довільна тимчасова позиція. Для позначення попередньої і наступної часової позиції використовуються вирази вигляду p1 і p+1. Оператор COUNT(i) повертає кількість різних позицій p таких, що pi. Інтервал i є одиничним інтервалом, якщо COUNT(i)=1.

Для перевірки умов, пов'язаних з інтервалами, використовуються оператори Аллена:

  • інтервали рівні: i1=i2(b1=b2)(e1=e2);
  • i1 включає i2: i1i2(b1b2)(e1e2)
  • i1 суворо включає i2: i1i2(i1i2)(i1i2);
  • i1 перед i2: i1BEFOREi2e1<b2;
  • інтервали зустрічаються: i1MEETSi2(b2=e1+1)(b1=e2+1);
  • інтервали перекриваються:: i1OVERLAPSi2(b1e2)(b2e1);
  • інтервали зливаються:i1MERGESi2(i1OVERLAPSi2)(i1MEETSi2).

Крім того, є бінарні оператори над інтервалами, які повертають інтервали:

  • оператор об'єднання i1UNIONi2 повертає [MIN(b1, b2):MAX(e1, e2)], якщо вираз i1MERGESi2 істинно, інакше результат не визначений;
  • оператор перетину i1INTERSECTi2 повертає [MAX(b1, b2): MIN(e1, e2)] , якщо вираз i1OVERLAPSi2 істинно, інакше результат не визначений;
  • оператор різниці i1MINUSi2 повертає [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_ключу і розпаковується при внесенні змін для підтримки несуперечливого стану.

Посилання

Шаблон:Без джерел

  1. Kulkarni, Krishna, and Jan-Eike Michels. "Temporal features in SQL: 2011 Шаблон:Webarchive". ACM SIGMOD Record 41.3 (2012): 34-43.
  2. Шаблон:Cite web