数据库-软删除或分隔的日志表

时间:2019-03-11 20:04:13

标签: database rest api database-design architecture

我正在构建具有以下端点的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. 添加带有标志的列,以指示是否已将其删除(软删除);
  2. 创建表以记录表修改。

在第一种方法中,我将在类别表中添加一列,以指示记录是否已删除。这样,通过此列和存储最后修改时间戳记的列,我可以检查在给定时间戳记之后是否发生了任何修改。

在第二种方法中,我将添加一个表,该表记录任何表中的最后修改。该表的每一行是系统其他任何表中发生的最后修改。以此方式,当删除类别时,保存有关类别表信息的日志表中的记录将更新,指示最后一个操作是带有操作时间戳的删除。这样,当我必须检查特定时间戳后类别表中是否发生任何更改时,首先我要检查日志表并决定是否要查询类别表。

即使以类别为例,此问题也发生在我的API的其他资源上,解决方案也应以相同的方式使用它们。

你们对提出的解决此问题的方法有何看法?

2 个答案:

答案 0 :(得分:1)

第一种方法不便之处

  • 您将存储不再再次访问的数据 最近发生的修改
  • 如果您有一些限制(例如 唯一)上,您将无法创建新记录 与“被软删除”的文件相撞

在更一般的情况下,“软”删除很少是一个好主意,并且通常可以使用来自域驱动设计的aspx model page with no control方法来解决

答案 1 :(得分:1)

这取决于上次修改的频率和频率。您可以使用第一种方法,将表中已删除的类别保留一周,然后添加后台作业以删除1.5周前左右删除的类别。