В результате ошибки потеряны ваши (и мои!) сообщения за 16 июня. Во время бета периода shit happens. Надеюсь, вы нафлудите еще очень много полезного и прятного нацпола.

С уважением, crypt.

  • cvs-255
    link
    fedilink
    arrow-up
    0
    ·
    4 years ago

    Например это может быть организовано так:

    1. таблица с полями id:текст:версия - в нее можно только добавлять новое
    2. таблица с полями id:[<список версий>]

    Таблица 2 строится на основе таблицы 1, т.е. восстанавливаемая, и в нее можно и нужно делать UPDATE.

    Когда добавляется новое сообщение, то ему присваивается версия 0, и автоматом в таблице 2 создается запись с id:[0]

    Когда сообщение исправляется, то сперва смотрим в таблицу 2 и берем максимальную версию из списка. Делаем insert в таблицу 1 с версией увеличенной на 1 и записываем новую версию в список версий в таблице 2: id:[0,1]

    Таким образом от ошибок кода самого сервера, который может потереть сообщения, защитит отсутствие UPDATE или DELETE в коде в отношении таблицы 1, а от ошибок самого SQL сервера защитит наличие резервного SQL сервера, куда параллельно все будет писаться