Список вопросов
Как зайти в Даркнет?!
25th January, 01:11
4
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
892
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4380
0
Помогите пожалуйста решить задачи
24th November, 23:53
6084
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4308
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2598
0
Модель базы данных с историей изменений?
Просмотров: 311
 
Ответов: 6
Требуется разработать модель базы данных (или хранилища данных), в которой бы хранилось не только актуальное состояние, как в обычных оперативных базах данных, но и вся история изменений любых атрибутов любой сущности по времени, чтобы знать все на любом временном срезе, как это делается с агрегированными данными в хранилищах данных. Но если атрибуты текстовые и агрегировать нечего, непонятно как строить такую модель. Что-то близкое к тому, что мне нужно, наверное, темпоральные базы данных. Хотелось бы узнать ссылки на книги, научные статьи, открытые проекты по этой тематике.
Можно сделать следующим образом, на самом верху абстракции сделать слой данных который будет скрывать всю работу с версиями. Таким образом Вы сможете работать с данными использую стандартные операции не заботясь о версиях.
Далее у нас остается только сущность (для простоты пусть будет одна и простая) и она может изменяться. Мы можем выбрать хранить копии или только изменения и при запросы вычислять нужное состояние.
В первом случае нам нужно хранить копии сущностей и вести учет версий, для этого достаточно в самой сущности определить такие данные и помечать последнюю версию, как итоговую.
Во втором случае будет нужен механизм вычисления изменений между версиями и собственно применения их к сущности, при запросе.
Самый простой сценарий. Взять последнюю версию сущности А, изменить и сохранить:
1) обращаемся к слою сервиса (ничего не знает о версиях) с запросом взять сущность А,
2) слой данных запрашивает сущность А и добавляет к запросу пункт о последней версии,
3) получает сущность и отдает сервису, который отдает её нам,
4) изменяем сущность и просим слой сервиса сохранить её,
5) слой данных помечает новую версию как последнюю, а со старой этот статус снимается.
6) сохраняются две сущности, но для нас это будет выглядеть как одна сущность, т.к. мы будем оперировать только одной сущностью.
Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться