Я думаю, что использование serialize () для кодирования каждой строки в одну строку, а затем сохранение ее в центральной базе данных может быть решением.
У вас будет «живая» база данных с соответствующими таблицами и т. Д., Но когда вы редактируете или создаете что-то (без нажатия кнопки «Опубликовать»), оно вместо сохранения в основной таблице попадает в таблицу типа:
id - PRI INT
date - DATETIME
table - VARCHAR
table_id - INT
type - ENUM('UNPUBLISHED','ARCHIVED','DELETED');
data - TEXT/BLOB
... с типом, установленным в 'неопубликованный', и таблицей и table_id, сохраненными, чтобы он знал, откуда он. Нажатие на публикацию будет затем сериализовать содержимое текущей таблицы, сохранить его в таблице выше с установленным значением «архив», затем прочитать последние изменения (помеченные как неопубликованные) и поместить их в базу данных. То же самое может также относиться к удалению строк - поместите их и пометьте как «удаленные» для потенциальной функциональности восстановления / отката.
Для того, чтобы все это заработало, потребуется немало усилий, но должны быть предусмотрены все возможности публикации / отмены публикации и отката. Правильно интегрированные в пользовательские функции базы данных, также возможно сделать все это прозрачно (с точки зрения SQL).
Я планировал реализовать это как решение той же проблемы, с которой вы, похоже, столкнулись, но с моей точки зрения это все еще теоретически, но я считаю, что идея обоснована.