【发布时间】:2011-01-09 06:09:57
【问题描述】:
我们有一个基于 SQL 数据库构建的 Web 应用程序。几种不同类型的对象可以添加 cmets,其中一些对象需要字段级跟踪,类似于在大多数问题跟踪系统上跟踪字段更改的方式(例如状态、分配、优先级)。我们想显示更改是谁,之前的值是什么,以及新的值是什么。
在纯设计级别,最直接的方法是跟踪通用表中任何对象的每个更改,其中包含对象类型、对象主键、进行更改的用户的主键、字段名称的列,以及旧值和新值。在我们的例子中,如果用户在进行更改时输入了评论,这些也可以有一个评论 ID。
但是,随着这些数据的增长速度如此之快,这是最好的架构吗?将此类功能添加到已经大规模的应用程序中通常采用哪些方法?
[编辑] 我在这个问题上开始赏金主要是因为我想特别找出在处理规模方面最好的架构是什么。 Tom H. 的回答提供了丰富的信息,但推荐的解决方案似乎相当低效(对象的每个新状态都有一个新行,即使许多列没有改变)并且鉴于我们必须是还能够跟踪对用户创建的字段的更改。特别是,我可能会接受一个可以解释常见问题跟踪系统(JIRA 或类似系统)如何实现这一点的答案。
【问题讨论】:
标签: sql architecture scalability change-tracking