Я занимаюсь разработкой системы, в которой хранятся сущности и их отношения с течением времени.Вершина отношений с PHP в базе данных PostgreSQL
Каждый объект имеет свойства, каждое свойство должно быть версией, поэтому, когда свойство объекта изменяется, добавляется новое состояние истории. Сложность связана с тем, что мне также необходимо изменить отношения между отдельными entites. Например: когда объект A
перемещается от родителя X
к родительскому Y
, отношение обоих объектов также получает новое состояние истории.
Я ищу советы о том, как это сделать на более низком уровне - существуют ли какие-либо шаблоны дизайна для такого рода вещей или любые другие передовые методы/проверенные методы?
Я строил это на PHP с помощью базы данных PostgreSQL, опционально используя Doctrine как ORM/DBAL.
Я всегда строил такие вещи с помощью триггеров. Вам нужно очень много думать о проблемах параллелизма, но вам нужно сделать это независимо от того, на каком уровне вы работаете. Часто вам нужно нечетное 'SELECT .. FOR SHARE' на родительском, прежде чем вы поймете вещи о родительских и дочерних объектах. –
Посмотрите здесь: https://github.com/simplethings/EntityAudit – Florian
См .: http://en.wikipedia.org/wiki/Slowly_changing_dimension –