如何对数据库中表的记录进行版本控制?

我在数据库中有一个表,用于存储要购买的产品(我们称此表为Product)。有必要跟踪每个产品的变化。我有两个关于版本记录的想法。

首先,通过复制产品并覆盖不同的字段,在产品中创建新记录,并将引用保留在旧版本和新版本的记录中。在这种情况下,“产品”表中的记录是只读的,但指示产品是否已存档的字段除外。

第二个步骤是创建2个表:Product和ArchivisedProduct。产品的记录是可编辑的,但是对于每次更改,都会在ArchivisedProduct中创建一个新记录,其中仅存储差异(因此,除了id外,所有字段都是可空的),并且表的字段相互引用。

您知道有什么工具可以管理该过程并与Node.js,Prisma,PostgreSQL和Apollo很好地配合吗?对于这种用途,为我推荐了winston / papertrail,但是当我阅读文档时,似乎只创建了日志。

示例数据库结构可进一步清除: 第一个例子:

type Product {
  id: Int! @id
  name: String!
  price: Float!
  archived: Boolean!
  productVersionIds: [Product]!
}

第二个示例:

type Product {
  id: Int! @id
  name: String!
  price: Float!
  archivisedProductIds: [ArchivisedProduct]! @relation(name: "ProductToArchiva")
}

type ArchivisedProduct {
  id: Int! @id
  name: String
  price: Float
  product: Product! @relation(name: "ProductToArchiva")
}
ttdrhfiaid 回答:如何对数据库中表的记录进行版本控制?

根据要存储的产品数量,将每个产品版本存储在ProductVersion模型中,然后在{{ 1}}模型。

您将拥有:

Product

对于产品的每次更改,您将存储包含信息的新type ProductVersion { id: Int! version: Int! name: String! price: Float! @@id([id,version]) } type Product { productId: Int! @id headVersion: Int! productVersion: Product! @relation(fields: [productId,headVersion],references: [id,version]) } ,并更新相应的ProductVersion以将headVersion指向新的Product。这将是确保一致性的单个事务的一部分。

要查询产品列表,可以使用ProductVersion对象并加入Product。 如果您存储许多产品并且需要考虑加入问题,则可以考虑在ProductVersion中拥有整个ProductVersion数据的副本,而不是通过Product字段使用关系。 / p>

请注意,这还意味着您将在运行时计算差异,而不将其直接存储在数据库本身中。

本文链接:https://www.f2er.com/2490046.html

大家都在问