现在,我正在为一个应用程序开发数据库模式,该应用程序需要对几组不同的数字数据进行版本控制,这些数字数据必须连接在一起才能在视图中使用。该应用程序要求我们能够“回顾”并找到这些多个变量在任意时间点的状态。
我使用子查询构建了一些视图定义,以根据任意连接条件获取各种输入,并根据time_created
字段检查版本。这不是严格的 SCD2 实现,但很接近。
您可以在此处看到与我们的架构类似(尽管已大大简化)的实现:DB Fiddle 链接。真正的模式有 6 个子查询/连接。
这对我的目的非常有效,除了当我们开始将其扩展到数千个“购买”记录时,我们会产生大量的查询成本。针对 2000 多行的查询需要大约 1 秒,这不适合我们的应用程序。
想到的第一个解决方案是创建一个表,它将“购买”连接到它的各种版本化输入表,由应用程序在创建购买时创建。这应该更有效,但需要更多的模式复杂性。
任何人都可以就如何最好地规划我的模式/查询以最适合这种设置提供建议吗?