SQL 服务器 2005。
在我们的应用程序中,我们有一个带有父表和几个子表的实体。我们希望跟踪对此实体所做的修订。来来回回之后,我们将其范围缩小到两种可供选择的方法。
有一个实体的历史表。在 sproc 更新表之前,从父表和所有子表中检索实体的整个当前状态。将其 XML 化并作为 XML 数据类型粘贴到历史表中。包括一些要查询的列,以及修订号/创建日期。
对于每个表,创建一个具有相同列的匹配历史表。还有一个修订号/创建日期。在 sproc 更新单个表之前,检索该表的记录的现有状态,并将其复制到历史表中。所以,它有点像SVN。如果我想获取修订版 Y 的实体,我需要获取每个表中的历史记录,其最大修订号不大于 Y。一个实体可能在一个表中有 50 个修订记录,但在一个表中只有 3 个修订记录一个子表等。我可能希望将整个实体的修订计数器保留在某个地方。
这两种方法似乎都让人头疼,但我仍然更喜欢解决方案#2而不是解决方案#1。这是一个已经很大的数据库,并且已经存在性能问题。在每次修订时都使用 XML blob 使其膨胀(并且会有很多)似乎是一种可怕的方式。为所有内容创建历史表是我愿意付出的代价,只要没有更好的方法来做到这一点。
有什么建议么?
谢谢,泰德兹