@Maloy123

Как правильно реализовать механизм сохранения устаревшей версии поста (вести историю изменений поста/публикации)?

Всем доброго времени суток!
Есть сайт, на котором публикуются некоторые записи другими пользователями. И появилась задача сохранять предыдущие версии этих записей, что бы можно было их просматривать.
Сами посты хранятся в базе в нескольких таблицах:
1. Таблица с постами
id | title | post | user | date | date_change | status
date - дата создания
date_change - дата последнего изменения
status - код статуса поста, пост может быть на модерации, активен, скрыт и т.д.

2. Таблица с файлами к постам
id | post_id | name | path
name - имя файла
path - путь до файла на сервере

3. Таблица для тэгов к посту
post_id | tag

Как правильно сделать механизм сохранения предыдущей версии поста?
Изменения файлов и тэгов так же должны сохраняться т.е. если какой-то файл удалили, то он так и должен остаться для устаревшей версии поста, но в новой его быть не должно.
Серверная часть реализована на PHP, при желании можно изменить структуру таблиц.
P.S. это краткая структура таблиц, там есть еще поля с информацией к постам.
  • Вопрос задан
  • 278 просмотров
Пригласить эксперта
Ответы на вопрос 3
В таблицу с постами добавить столбцы даты и состояния публикации. Первый для сортировки предыдущих версий, второй для определения, опубликован ли пост или является архивным. Ну и все архивные считать той самой устаревшей версией. При сохранении поста вместо изменения добавлять новую запись в таблицу, а предыдущей присваивать статус архивной.
Ответ написан
streetflush
@streetflush
Я бы ввел в таблицу с постами post_id - можно приравнять к id при создании поста и post_date - дата создания\изменения поста
Все остальные таблицы имеют связь так же id как и сейчас...
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
1. Или сделать таблицы "истории" со структурой идентичной таблицам 1-3 + поле даты-времени или номера версии и при изменениях - перемещать туда изменяемые посты.

2. Ввести в таблицы признак "историчности" и при изменениях постов - добавлять их как новые, а у старых взводить флаг. Соответственно в отображении постов - фильтровать посты без флага

Выбор варианта зависит от возможности трогать исходные таблицы. Вариант 1 - может оказаться наиболее удобным, если хочется минимально вмешаться - достаточно просто поставить триггеры на update
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы