Задача грубо: для ORM реализовать хранение истории версий некоторых объектов.
Задача в лоб: ввести в БД доп. поле version. Вместо поиска объекта по первичному ключу ID=<value> запрашивать WHERE ID=<value> ORDER BY version DESC LIMIT 1.
Плюс - простота реализации.
Минусы - архив малонужных версий лежит в общей куче, жрёт место и ресуры
- Тяжелеют запросы
- Теряется общая прозрачность системы.
Другой вариант: Заведение параллельной таблицы для версий. Всё то же самое, но version добавляется лишь к альтернативной таблице, куда и сваливается архив.
Плюс - нет потери производительности.
Минусы - придётся вводить новые сущности в виде архивных объектов.
- Снижается общая наглядность.
- Для каждого версионного объекта требуется лишняя таблица.
Третий вариант - одна таблица из полей типа `original_class_name`, `original_id`, `version`, `original_field`, `original_value`.
Т.е. каждое поле версионного объекта лежит в отдельной таблице общей записью.
Плюсы - можно реализовать единый интерфейс бэкапа объектов.
- Нужна только одна лишняя таблица.
Минусы - уродливая таблица
- Усложнение структуры запросов.
...
Есть ещё какие-то мысли?
Как такое во «взрослых системах» делают? :)
Похожие темы
- Форум erp, orm, мысли (2010)
- Форум Реализация подвижных объектов (2013)
- Форум [Mono][сайтостроение] Реализация собственной ORM (2011)
- Форум загрузка объектов + метаданные реализация? (2021)
- Форум Внутреннее представление объекта зависит от реализации ??? (2019)
- Форум В django orm вытащить объект вместе с последним объектом по внешнему ключу (2016)
- Форум AMD vs Intel, ночные мысли на этот счет (2020)
- Форум Векторная реализация resize для объектов в контейнере (2011)
- Форум Ваши мысли на счёт идеи сервиса кооперации через Hackathon (2015)
- Форум Виды бэкапов и способы их реализации. Мысли вслух. (2018)