База данных - Soft-delete или отдельная таблица журнала - PullRequest
1 голос
/ 11 марта 2019

Я создаю REST API, который имеет следующие конечные точки:

GET /api/v1/categories - Get all categories
DELETE /api/v1/categories/$id - Delete a specific category

Когда клиент запрашивает все категории, сервер должен вернуть все категории с заголовком HTTP Last-Modified .

Как только категория была удалена, и клиент запрашивает все категории с заголовком HTTP If-Modified-Since старше времени удаления, сервер должен вернуть все категории безудаленный, но с заголовком HTTP, показывающим время последнего изменения, даже если это время было временем удаления.

Я думаю о двух подходах для реализации этого:

  1. Добавить столбец с флагом, указывающим, был ли он удален (soft-delete);
  2. Создать таблицу для записи изменений таблиц.

В первом подходе I 'Я добавлю столбец в таблицу категорий, который будет указывать, была ли запись удалена или нет.Таким образом, с помощью этого столбца и столбца, в котором хранится отметка времени последней модификации, я могу проверить, произошли ли какие-либо изменения после данной отметки времени.

Во втором подходе я добавлю таблицу, в которой записаны последниемодификация в любой таблице.Каждая строка этой таблицы является последней модификацией, которая произошла в любой другой таблице системы.Таким образом, когда категория удаляется, запись в таблице журнала, которая содержит информацию о таблице категорий, обновляется, указывая, что последней операцией было удаление с отметкой времени операции.Таким образом, когда мне нужно проверить, произошли ли какие-либо изменения в таблице категорий после определенной временной отметки, сначала я проверяю таблицу журнала и решаю, буду ли я запрашивать таблицу категорий.

Даже если яЕсли в качестве примера использовать категорию, то эта проблема возникает с другими ресурсами моего API, и решение должно использоваться для них таким же образом.

Что вы, ребята, думаете о представленных подходах для решения этой проблемы?

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Зависит от того, как часто и как раньше может идти Last-Modified.Вы можете использовать первый подход и сохранить удаленные категории в своей таблице, скажем, на неделю, и добавить фоновое задание для удаления категорий, удаленных 1,5 недели назад или около того.

1 голос
/ 12 марта 2019

1-й подход имеет несколько неудобств

  • Вы будете хранить данные, к которым больше не будет доступа после того, как произошла более поздняя модификация
  • , если у вас есть какое-то ограничение (например, уникальное)на вашем столе вы не сможете создавать новые записи, которые сталкиваются с «мягко» удаленными

В более общем смысле «мягкое» удаление редко бывает хорошей идеей и часто можетбыть решена с использованием подхода ограниченного контекста , основанного на проектировании, управляемом доменом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...