sql-server - 具有外键的快照表与具有实际值的快照表

标签 sql-server database tsql data-modeling

在我们客户的一个数据库中,有一些快照表汇总了许多其他表中的有用信息(例如,每个客户在每个时期的状态等)。

然而,快照表主要包含原始表的外键。因此,为了获得有关快照的有用信息,我们必须多次将它们连接到它们对应的表中。这些连接通常需要很长时间。另一方面,将索引添加到数据库中的所有 FL 列(或至少在查询中的 WHERE 子句中的列)会显着降低数据库速度。

所以我的问题是,使用具有真实值而不是外键的快照表不是更好吗?如果答案是否定的,如果原始表被更新(例如,如果一个被称为“Candle”而现在“Lamp”当然是快照保持一致但它真的是快照吗?案例?)

最佳答案

出于您提到的原因,我倾向于存储实际数据而不是 FK 值。也就是说,更好的解决方案可能是重新定位此历史数据以及相关属性(IE 维度)并重组它以供分析。 Data warehousing这当然是一个解决方案,尽管这些项目可能是非常大规模的项目,因此您需要适本地了解它的值(value)和范围。然而,即使是针对他们试图捕获的特定事件的轻量级星型模式也可能是比与基于事务的表有关系的大型历史表更好的解决方案(特别是如果针对相关表的查询逻辑很复杂) .

关于sql-server - 具有外键的快照表与具有实际值的快照表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38120854/

相关文章:

sql - 在成员(member)每月购买超过 6 个单位的情况下需要帮助拉行

sql - 如果表没有任何意义,我应该使用主键 id 吗?

php - 显示某些 MySQL 表

mysql - 数据库中行之间的平均时间差

sql - SQL 中每一天的 MAX - MIN

sql - 如何从T-SQL中的排序表中获取从M行开始的N行

sql - 从 SQL 中的另一个表更新表给出了意外结果

sql-server - SQL查询的执行顺序

php - mysql 特定的 select with order

sql - 在 SQL 中右对齐数字的最佳实践