Темпоральные базы данных: как построить машину...
DESCRIPTION
Открытый семинар для студентов в компании CUSTIS (24 апреля 2014). Лектор: Максим Зинченко, ведущий разработчик Java/Oracle. Аннотация: На этом семинаре мы рассмотрим, как работают учетно-аналитические системы и системы поддержки принятия решений, в которых необходимы виртуальные перемещения во времени. Мы структурируем знания о проектировании темпоральных систем и необходимости таких хранилищ для бизнеса, рассмотрим самые распространенные проблемы реализации и шаблоны их решений, а также сделаем обзор последних достижений в этой области от гигантов индустрии. Видеозапись семинара: https://vimeo.com/93000420.TRANSCRIPT
![Page 1: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/1.jpg)
24 апреля 2014 года
Темпоральные базы данных:
как построить машину времени
Максим Зинченко
Oracle/Java-разработчик
![Page 2: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/2.jpg)
Ему бы только деньги,
деньги, деньги…
Кто я? Что я здесь делаю?
Окончил МИФИ
В IT работаю 13 лет
Программирую 20 лет
QBasic, C++, Pascal, С, Delphi, TSQL,
PL/SQL, Java 1.3, C#, Java 1.7…
Работаю в CUSTIS 5 лет.
Автоматизация банков
2/ 111
![Page 3: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/3.jpg)
За что я люблю CUSTIS
Зарплата
Бесплатные плюшки, чай, кофе…
Корпоративы, пятничные посиделки…
Расположение офиса
Можно работать удаленно
Нормальные рабочие места
3/ 111
![Page 4: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/4.jpg)
За что я люблю CUSTIS
♥ Есть у кого поучиться
♥ Свобода творчества
♥ Руководитель – ваш друг
♥ Прозрачность и рефлексия
4/ 111
![Page 5: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/5.jpg)
План
Философия времени
5/ 111
![Page 6: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/6.jpg)
План
Философия времени
Модели машин времени
6/ 111
![Page 7: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/7.jpg)
План
Философия времени
Модели машин времени
Реализация
7/ 111
![Page 8: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/8.jpg)
Суть времени
8/ 111
![Page 9: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/9.jpg)
Почувствуй время
Простые определения всегда идут
от ощущений
Что нужно, чтобы почувствовать время?
9/ 111
![Page 10: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/10.jpg)
Роль памяти
Без памяти невозможно ощутить время
Память хранит прошлое
Мы помним события, в которых
не участвовали
Память хранит и будущее
10/ 111
![Page 11: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/11.jpg)
Классическое представление
Бесконечность
Детерминированность
Непрерывность
Равномерность
Объективность
11/ 111
![Page 12: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/12.jpg)
Альтернативные модели
Ограниченность (начало и конец времен)
Недетерминированность (случайности)
Квантование (минимальная единица)
Неравномерность
Субъективность
12/ 111
![Page 13: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/13.jpg)
Какая же будет модель у нас?
Ограниченная по времени
Недетерминированная (открытая)
Квантованная
Равномерная
Объективная
13/ 111
![Page 14: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/14.jpg)
Причины и следствия
Причины всегда в прошлом
Асимметрия времени: следствие
не определяет причины
Меняя причины, можем получить другое
следствие
14/ 111
![Page 15: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/15.jpg)
Машина времени
С сутью времени вроде понятно
Что такое машина времени?
15/ 111
![Page 16: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/16.jpg)
Что умеет машина времени?
1. Наблюдение за прошлым и будущим
2. Изменение прошлого и будущего
3. ???
4. PROFIT!
16/ 111
![Page 17: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/17.jpg)
Можно ли ее построить?
В реальном мире – видимо, нет
В виртуальном – можно, но сложно
Зачем же она тогда нужна такая?
17/ 111
![Page 18: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/18.jpg)
Зачем нужна машина времени
18/ 111
![Page 19: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/19.jpg)
Предпосылки
Информационный бум
Новые возможности/потребности
Слияние виртуального и реального миров
19/ 111
![Page 20: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/20.jpg)
Необходимость наблюдений
Разборки по факту проблем
Анализ активности в прошлом
Анализ «что если?»
Принятие решений на основании будущего
20/ 111
![Page 21: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/21.jpg)
Необходимость изменений
Ошибки в прошлом
Запаздывание получения информации
Осуществление действий в точное время
(планирование)
21/ 111
![Page 22: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/22.jpg)
Парадоксы
Изменения в прошлом и будущем рождают
«парадоксы»
На самом деле это просто коллизии
причин и следствий
Парадоксы виртуального мира работают
так же, как и в реальном
22/ 111
![Page 23: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/23.jpg)
Решения парадоксов
Все они сводятся к решению «парадокса
дедушки»
Многочисленные фантасты давно все
написали
23/ 111
![Page 24: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/24.jpg)
Решения парадокса дедушки
Ветвление вселенной
Эффект бабочки
24/ 111
![Page 25: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/25.jpg)
Решения парадокса дедушки
Слияние линий времени
(эластичность/упругость)
Принцип запрета
25/ 111
![Page 26: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/26.jpg)
Решения парадоксов дедушки
Замещение
Довольно сурово, зато просто
26/ 111
![Page 27: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/27.jpg)
Что дальше?
«Парадоксы» можно решать
Пора приступать к реализации нашего
мира…
27/ 111
![Page 28: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/28.jpg)
Терминология
Для начала введем
несколько терминов …
28/ 111
![Page 29: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/29.jpg)
Основные термины
Период действия
Линии времени
Сущности
Факты
Агрегаты
29/ 111
![Page 30: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/30.jpg)
Периоды действия
Гранулярность/квантование/единица
Непрерывные и непересекающиеся
30/ 111
![Page 31: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/31.jpg)
Периоды действия
Гранулярность/квантование/единица
Непрерывные и непересекающиеся
Открытость краев
Можно использовать закрытые края как открытые
Вместо 13.03.2014 00:00 - 02.05.2014 00:00
Используем 13.03.2014 00:00 - 02.05.2014 23:59
Нет ли здесь проблемы?
Имеем дырку 02.05.2014 23:59 - 03.05.2014 00:00
Окончание периода
стало как бы открыто
Дырка
в 1 минуту
31/ 111
![Page 32: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/32.jpg)
Периоды действия
Гранулярность/квантование/единица
Непрерывные и непересекающиеся
Открытость краев
Можно использовать закрытые края как открытые
Вместо 13.03.2014 00:00 - 02.05.2014 00:00
Используем 13.03.2014 00:00 - 02.05.2014 23:59
Имеем дырку 02.05.2014 23:59 - 03.05.2014 00:00
Полная определенность на всем времени
Нужны константы для начала и конца времен32/ 111
![Page 33: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/33.jpg)
Линии времени
Линий (осей) времени может быть
несколькоДам кредит
Хочу денег
33/ 111
![Page 34: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/34.jpg)
Линии времени
Линий (осей) времени может быть
несколько График погашения:
Янв 100
Фев 100
Мар 100
Апр 100
Май 100
…
Давай
34/ 111
![Page 35: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/35.jpg)
Линии времени
Линий (осей) времени может быть
несколько
100
Январь
35/ 111
![Page 36: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/36.jpg)
Линии времени
Линий (осей) времени может быть
несколько
100
Февраль
36/ 111
![Page 37: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/37.jpg)
Линии времени
Линий (осей) времени может быть
несколько
100
Март
37/ 111
![Page 38: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/38.jpg)
Линии времени
Линий (осей) времени может быть
несколько
200
Апрель
38/ 111
![Page 39: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/39.jpg)
Линии времени
Линий (осей) времени может быть
несколько
График погашения:
…
Мар 100
Апр 200
Май 95
Июнь 95
Июль 95
…
39/ 111
![Page 40: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/40.jpg)
Линии времени
Получаем графики
То есть одна ось времени у нас в графике
А вторая – ось реального времени
Янв–Мар:
Янв 100
Фев 100
Мар 100
Апр 100
Май 100
Июнь 100
…
Апр–???:
…
Мар 100
Апр 200
Май 95
Июнь 95
Июль 95
…
40/ 111
![Page 41: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/41.jpg)
Линии времени
Парадокс в будущем здесь мы разрулили
через ветвление
Можно было бы разрулить через слияние
Янв 100 Фев 100 Мар 100 Апр 100 Май 100 Июнь 100
Апр 200 Май 95 Июнь 95
Янв 100 Фев 100 Мар 100 Апр 100 Май 100 Июнь 100
Апр 200
41/ 111
![Page 42: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/42.jpg)
Линии времени
Фантастическое объяснение битемпоральности
Путешественник
во времени
Одно время
Другое время
42/ 111
![Page 43: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/43.jpg)
Битемпоральность и ветвление
Реальное время Апрельская ветка
Январь
Февраль
Март
Апрель
Май
Июнь
Янв Фев Мар Апр Май Июнь
Янв 100 Фев 100 Мар 100 Апр 100 Май 100 Июнь 100
Янв 100 Фев 100 Мар 100 Апр 100 Май 100 Июнь 100
Янв 100 Фев 100 Мар 100 Апр 200 Май 95 Июнь 95
Янв 100 Фев 100 Мар 100 Апр 100 Май 100 Июнь 100
Янв 100 Фев 100 Мар 100 Апр 200 Май 95 Июнь 95
Время внутри
плана платежей
43/ 111
![Page 44: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/44.jpg)
Названия осей времени
Зависят от области применения
Обычно одна из осей соответствует
реальному времени
Системное
Астрономическое
Реальное
Транзакционное
Эта ось отличается тем, что для нее
значения времени задаются автоматом
44/ 111
![Page 45: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/45.jpg)
Названия осей времени
Прочие оси называют по-разному
Для обобщения их можно называть:
Бизнес-ось
Модельная ось
Ось валидности
Здесь больше свободы с указанием
периодов
45/ 111
![Page 46: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/46.jpg)
Сущность
Идентификация (неизменность сути)
Человек сменил паспорт
У торта отрезали кусок
Документ породил документ
Отделимость
100 рублей наличными и на счету
Дырка от бублика
Протяженность во времени
46/ 111
![Page 47: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/47.jpg)
Факт
Соответствуют понятию Transaction fact
в DWH
Сущность, у которой отобрали период
Часто изменения сущностей регистрируют
как факт
47/ 111
![Page 48: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/48.jpg)
Агрегат
Копят результаты фактов в разрезе
измерений
Искусственная вещь
Обычно нет ссылок на агрегат
Появляются и исчезают
48/ 111
![Page 49: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/49.jpg)
Темпоральные атрибуты
Изменяемые/неизменяемые атрибуты
Темпоральность
Нетемпоральные можно рассматривать
как действующие бесконечно
49/ 111
![Page 50: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/50.jpg)
А где же код наконец?
Когда уже сделаем что-то?
50/ 111
![Page 51: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/51.jpg)
Создадим модель…
Используем наш пример про кредит
Янв 100 Фев 100 Мар 100 Апр 100 Май 100 Июнь 100
Апр 200 Май 95 Июнь 95
51/ 111
![Page 52: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/52.jpg)
Первый шаг
Имеем факт платежа с такими атрибутами:
Сумма – темпоральный
Дата платежа – на бизнес-оси
Период актуальности – на системной
Попробуем нарисовать таблицу…
52/ 111
![Page 53: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/53.jpg)
Первый шаг
pay_date actual_from actual_to summ
Янв Янв 100
Фев Янв … 100
Март Янв … 100
Апр Янв Март 100
Май Янв Март 100
Июнь Янв Март 100
Апр Апр … 200
Май Апр … 95
Июнь Апр … 95
Янв 100 Фев 100 Мар 100 Апр 100 Май 100 Июнь 100
Апр 200 Май 95 Июнь 95
53/ 111
![Page 54: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/54.jpg)
Первый шаг
pay_date actual_from actual_to summ
Янв Янв +∞ 100
Фев Янв +∞ 100
Март Янв +∞ 100
Апр Янв Март 100
Май Янв Март 100
Июнь Янв Март 100
Апр Апр +∞ 200
Май Апр +∞ 95
Июнь Апр +∞ 95
Здесь можно
использовать -∞
54/ 111
![Page 55: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/55.jpg)
Второй шаг
У разных клиентов платежи отдельные
Появляется сущность «Клиент»
Клиент должен быть битемпоральным
Клиент это не факт, а сущность
55/ 111
![Page 56: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/56.jpg)
Второй шаг
Ссылка
на клиента
Период действия
на оси платежей
Период
действия на оси
нашего времени
56/8856/ 111
![Page 57: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/57.jpg)
Второй шаг
pay_date client_id actual_from actual_to summ
Янв 1 Янв +∞ 100
Фев 1 Янв +∞ 100
Март 1 Янв +∞ 100
Апр 1 Янв Март 100
Май 1 Янв Март 100
Июнь 1 Янв Март 100
Апр 1 Апр +∞ 200
Май 1 Апр +∞ 95
Июнь 1 Апр +∞ 95
id name actual_from actual_to business_from business_to
1 Клеент -∞ +∞ -∞ +∞
Платежи
Клиенты
Опечатка
57/ 111
![Page 58: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/58.jpg)
Попробуем исправить опечатку
Мы хотим сохранить любую историю
Получается, что любое изменение
в Клиентах приведет к порождению новой
записи:id name actual_from actual_to business_from business_to
1 Клеент -∞2014-04-
24
17:45:37
-∞ +∞
2 Клиент2014-04-24
17:45:37+∞ -∞ +∞
Третий шаг
Поскольку это опечатка Кто заметил проблему?
58/ 111
![Page 59: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/59.jpg)
Третий шаг
Попробуем исправить опечатку
Мы хотим сохранить любую историю
Получается, что любое изменение
в Клиентах приведет к порождению новой
записи:id name actual_from actual_to business_from business_to
1 Клеент -∞2014-04-24
17:45:37-∞ +∞
2 Клиент2014-04-24
17:45:37+∞ -∞ +∞
Кто заметил проблему?
59/ 111
![Page 60: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/60.jpg)
Третий шаг
id name actual_from actual_to business_from business_to
1 Клеент -∞2014-04-24
17:45:37-∞ +∞
2 Клиент2014-04-24
17:45:37+∞ -∞ +∞
pay_date client_id actual_from actual_to summ
Янв 1 Янв +∞ 100
Фев 1 Янв +∞ 100
Март 1 Янв +∞ 100
Апр 1 Янв Март 100
Май 1 Янв Март 100
Июнь 1 Янв Март 100
Апр 1 Апр +∞ 200
Май 1 Апр +∞ 95
Июнь 1 Апр +∞ 95
Клиенты
Платежи
Мы не можем
сослаться
на все версии
клиента
60/ 111
![Page 61: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/61.jpg)
Третий шаг
Что-то здесь надо
менять
61/ 111
![Page 62: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/62.jpg)
Третий шаг
name
Темпоральные данные
переезжаютАтрибуты периодов
тоже переезжают
Версии
клиентов
62/ 111
![Page 63: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/63.jpg)
Третий шаг
name
Атрибуты периодов
тоже переезжают
Можно оставить здесь
нетемпоральные данные
Версии
клиентов
63/ 111
![Page 64: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/64.jpg)
Третий шаг
client_id name actual_from actual_to business_from business_to
1 Клеент -∞2014-04-24
17:45:37-∞ +∞
1 Клиент2014-04-24
17:45:37+∞ -∞ +∞
pay_date client_id actual_from actual_to summ
Янв 1 Янв +∞ 100
Фев 1 Янв +∞ 100
Март 1 Янв +∞ 100
Апр 1 Янв Март 100
Май 1 Янв Март 100
Июнь 1 Янв Март 100
Апр 1 Апр +∞ 200
Май 1 Апр +∞ 95
Июнь 1 Апр +∞ 95
Анкеты/верcии клиентов
Платежи
id
1
Клиенты
64/ 111
![Page 65: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/65.jpg)
Лишняя таблица
Какая-то странная таблица Клиентов?
Может, удалить ее, ведь в ней нет
полезной информации?
65/ 111
![Page 66: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/66.jpg)
Лишняя таблица
Это можно сделать, если:
Нет ссылок на клиентов
Вы не считаете важными FK
Нет нужды рассматривать клиента как единое
целое
Вы готовы делать ссылки не на клиента,
а на версию клиента
66/ 111
![Page 67: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/67.jpg)
Ссылки на версию/анкету
Немного проще запросы
Сложнее изменения в датах
То есть больше подходит для OLAP
67/ 111
![Page 68: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/68.jpg)
Альтернативы подходу версий
Подход «сущность + версии» –
не единственный
Одна из популярных альтернатив: 6НФ
Посмотрим, что это такое…
68/ 111
![Page 69: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/69.jpg)
Шестая НФ
Пусть у клиента два темпоральных атрибута:
имя и адрес
name address
Иванов Гагарина, 34
Иванов Ленина, 41
Иванов Мира, 12
Адрес меняется, имя остается
69/ 111
![Page 70: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/70.jpg)
Шестая НФ
Имя клиента
в отдельной
таблице
Адрес тоже
в отдельной
таблице
Как и с версиями,
здесь можно
что-то оставить
СРАВНИТЕ
70/ 111
![Page 71: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/71.jpg)
EAV модель
Таблицы атрибутов очень похожи
Можно сделать вот так
71/ 111
![Page 72: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/72.jpg)
Как еще можно…
От EAV до NoSQL один шаг
Можно смешать подходы по-разному
Часто акцентируются на текущих значениях
72/ 111
![Page 73: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/73.jpg)
Но вернемся обратно
Все альтернативы рассмотреть нереально
Вариант с версиями поддерживается
лучше современными СУБД
Поэтому вернемся к нему…
73/ 111
![Page 74: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/74.jpg)
Получение данных
Как же получить данные?
74/ 111
![Page 75: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/75.jpg)
Получение данных
Нужно фиксировать даты по всем осям
Дату системного времени обычно ставят
в +∞ или текущую
Пользователю остается выбрать бизнес-
дату (или бизнес-даты)
75/ 111
![Page 76: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/76.jpg)
Получение данных
Эта часть –
как у обычных запросов
Задаем бизнес-дату
Задаем системную
дату
76/ 111
![Page 77: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/77.jpg)
Контроль ссылок
Не все сущности полностью определены
Нужен контроль допустимости ссылки
Рассмотрим на примере системного
времени…
77/ 111
![Page 78: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/78.jpg)
Системное время
Беспроблемная ссылка
78/ 111
![Page 79: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/79.jpg)
Системное время
Платеж
до создания
клиента
Клиента удалили,
а платеж продолжает жить
79/ 111
![Page 80: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/80.jpg)
Системное время
Допустимая ссылка, но могут
быть проблемы
Допустимая ссылка,
но могут быть проблемы
80/ 111
![Page 81: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/81.jpg)
Контроль уникальности
Периоды не должны пересекаться
для одной сущности
Это условие не так легко понять
при мультитемпоральной модели
81/ 111
![Page 82: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/82.jpg)
Внесение изменений
Ветвление
У новых версий actual_from ставим в текущий
момент
Окончание обычно неизвестно
Укорачиваем при необходимости предыдущую
запись
82/ 111
![Page 83: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/83.jpg)
Внесение изменений
Ветвление
У новых версий actual_from ставим в текущий
момент
Окончание обычно неизвестно
Укорачиваем при необходимости предыдущую
запись
83/ 111
![Page 84: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/84.jpg)
Внесение изменений
Изменения затрагивают бизнес-ось?
Здесь можно произвольно задавать период
Поэтому изменения могут вноситься
в несколько периодов
84/ 111
![Page 85: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/85.jpg)
Внесение изменений
Изменения затрагивают бизнес-ось?
Здесь можно произвольно задавать период
Поэтому изменения могут вноситься
в несколько периодов
85/ 111
![Page 86: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/86.jpg)
Внесение изменений
Изменения затрагивают бизнес-ось?
Здесь можно произвольно задавать период
Поэтому изменения могут вноситься
в несколько периодов
Иногда они могут даже поглощаться
86/ 111
![Page 87: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/87.jpg)
Внесение изменений
Изменения затрагивают бизнес-ось?
Здесь можно произвольно задавать период
Поэтому изменения могут вноситься
в несколько периодов
Иногда они могут даже поглощаться
87/ 111
![Page 88: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/88.jpg)
Внесение изменений
Эффект бабочки
Причинно-следственные связи
Изменение причины часто приводит
к изменению следствия
Меняет фамилию
на Петров
88/ 111
![Page 89: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/89.jpg)
Внесение изменений
Эффект бабочки
Причинно-следственные связи
Изменение причины часто приводит
к изменению следствия
Меняет фамилию
на Петров
89/ 111
![Page 90: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/90.jpg)
Внесение изменений
Эффект бабочки
Причинно-следственные связи
Изменение причины часто приводит
к изменению следствия
Меняет фамилию
на Петров
90/ 111
![Page 91: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/91.jpg)
Агрегаты
Храним общую сумму платежей по годам:
pay_year actual_from actual_to value
2013 -∞ +∞ 10000
2014 -∞ 01.04.2014 20100
2014 01.04.2014 +∞ 20200
Изменение суммы
платежа
Измерение: год
(бизнес-ось)Период действия
(системный)
91/ 111
![Page 92: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/92.jpg)
Агрегаты
Агрегат часто неявно связан с многими
фактами и сущностями
Это затрудняет реализацию эффекта
бабочки
92/ 111
![Page 93: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/93.jpg)
Попытки сделать стандарт
93/ 111
![Page 94: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/94.jpg)
SQL-2011
Родился в декабре 2011
Седьмая версия SQL
Платный сыр
94/ 111
![Page 95: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/95.jpg)
SQL-2011. Бизнес-ось
Создаем табличку
Поля периода
создаем вручную
Говорим, что эти поля
для нашей осиНазвание оси
95/ 111
![Page 96: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/96.jpg)
SQL-2011. Системная ось
Добавляем системное время:
Эти поля – это начало
и конец действия
96/ 111
![Page 97: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/97.jpg)
SQL-2011. Системная ось
Добавляем системное время:
Поля принадлежат системной оси
97/ 111
![Page 98: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/98.jpg)
SQL-2011. Системная ось
Добавляем системное время:
Название
фиксировано
98/ 111
![Page 99: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/99.jpg)
SQL-2011. Системная ось
Добавляем системное время:
Можно сделать PK или UNIQUE
99/ 111
![Page 100: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/100.jpg)
SQL-2011. Системная ось
Добавляем системное время:
Нужна такая специальная фраза
100/ 111
![Page 101: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/101.jpg)
SQL-2011. Факты
Как же сделать факт?
Одинаковые даты
Темпоральная ссылка
К сожалению, скорее
всего, так работать
не будет!
101/ 111
![Page 102: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/102.jpg)
SQL-2011. Запросы
На заданные бизнес и системную дату: Условие пишем
отдельно для каждой
таблички
Предусмотрена фильтрация только одной
оси, вторую приходится самим
102/ 111
![Page 103: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/103.jpg)
SQL-2011. Изменения
По бизнес-оси нужно задавать время
Системное время ставится автоматом
103/ 111
![Page 104: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/104.jpg)
SQL-2011. Проблемы
Многословно
Включительные границы
Нет группировки по периоду
Трудно работать с 2+ количеством осей
Нет поддержки нестандартных типов
периодов
Нет поддержки хранимых агрегатов
104/ 111
![Page 105: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/105.jpg)
Попытки реализовать стандарт
105/ 111
![Page 106: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/106.jpg)
IBM DB2 10+
Создание таблиц, в целом, такое же
Для SYSTEM_TIME нужно вручную
создавать табличку истории и привязывать
Добавили конструкцию
106/ 111
![Page 107: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/107.jpg)
Oracle DBMS 12+
Много мелких отличий от стандарта
Задание даты для системной оси:
Для системной оси ведутся специальные
системные поля с данными об scn
и операции
Требование date_to>date_from
107/ 111
![Page 108: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/108.jpg)
Что еще?
Получение среза связанных данных
на конкретный момент
Агрегаты
Альтернативы анкетам
Транзакционное/модельное время
Ограничения уникальности
Логическое удаление
108/ 111
![Page 109: Темпоральные базы данных: как построить машину времени](https://reader033.vdocuments.mx/reader033/viewer/2022052621/557ed9b3d8b42a57098b4860/html5/thumbnails/109.jpg)
Спасибо!
Вопросы?
109/111