Я работаю над веб-проектом, который включает в себя редактируемый пользователем контент, и я хотел бы иметь возможность отслеживать версию реального контента, который находится в базе данных. По сути, я хочу реализовать историю изменений в вики-стиле.
Проводя некоторые фоновые исследования, я вижу много документации о том, как создать версию вашей схемы базы данных (моя фактически уже контролируется), но любые существующие стратегии о том, как отслеживать изменения содержимого вашей базы данных , теряются в лавине вещей контроля версий схемы, по крайней мере, в моих поисках.
Я могу придумать несколько способов реализовать собственное отслеживание изменений, но все они кажутся довольно грубыми:
- Сохраняйте всю строку при каждом изменении, связывайте строку с идентификатором источника с помощью первичного ключа (то, к чему я сейчас склоняюсь, это самое простое). Однако, множество небольших изменений может привести к большому раздутию таблицы.
- сохранить до / после / пользователя / временную метку для каждого изменения с именем столбца, чтобы связать изменение с соответствующим столбцом.
- сохранить до / после / пользователя / отметку времени с таблицей для каждого столбца (приведет к слишком большому количеству таблиц).
- сохраняйте diffs / user / timestamp для каждого изменения со столбцом (это будет означать, что вам придется пройти всю промежуточную историю изменений, чтобы вернуться к определенной дате).
Каков наилучший подход здесь? Похоже, я переворачиваю свою собственную (лучшую) кодовую базу.
Бонусные баллы для PostgreSQL.