我有一个带有主键 @productid (bigint)、产品编号 (int) 和版本 (int) 的产品表
每当有人仅更改产品记录时,我计划在数据库中插入具有相同产品号和版本号 + 1 的新行。这将为我提供记录所需的历史跟踪,因为我可以看到版本随时间变化。
/* Selecting the current version is simple */
Select top 1 *
from products
where productnumber = @productnumber
order by version desc
但是,我的问题来自外键一对多或多对多关系表。该表指出了许多其他也需要跟踪的(即带有日期范围、产品类别等的产品定价)。
/* Product categories, pricing */
/* Should I use @productnumber here? How do I track changes to these records? */
select name
from productcategories
where productid = @productid
select price
from productpricing
where productid = @productid and
StartDate > @StartDate and
EndDate <@Enddate
因此,现在任何时候有版本更改,我都计划重新插入新的类别和定价记录,并使用生成的新主键产品 ID。这将导致大量重复,尤其是在没有更改的情况下制作这些记录。
问题也随之而来 - 如果删除了一个类别但产品记录没有更改会发生什么?我想看看是谁删除了这个类别。本质上,需要对每张表进行全面审计。
我见过一些不同的例子,但它们中的大多数似乎只处理一个表中的记录,而不是一对多或多对多关系的一部分的记录。我希望这可以在不需要额外表格的情况下完成。
有没有更好的方法或做法?这会是一场表演噩梦吗?