【发布时间】:2010-10-23 00:59:06
【问题描述】:
我正在努力为我的数据找到一种高效且灵活的表示形式。我们在两个具有任意生命周期的实体之间存在多对多关系。我们称它们为Voter 和Candidate。每个关系都有一个衡量标准,我们想以各种方式对其进行总结。这些带有时间戳,并保证在两个相关实体的生命周期内。假设衡量标准是支持率,或者只是Rating。
一个不寻常的要求是,如果我在总结一个没有测量值的时间段,我应该替换最新的有效测量值,而不是给出 NULL。
我们目前的解决方案是每天编制一份有效选民和候选人名单,然后制定一个多对多表,记录最新的有效措施。
你的解决方案是什么?
这让我可以通过一次查询来获得每日摘要:
select
avg(rating), valid_date, candidate_SSN, candidate_DOB
from
daily_rating natural join rating
group by
valid_date, candidate_SSN, candidate_DOB
这可能工作正常,但对我来说似乎效率低下。我们正在重复大量数据,尤其是在某一天没有发生任何事情的情况下。还不清楚如何在不编译更多表格的情况下进行每周/每月总结。由于我们要处理数百万行(我们实际上并不是在谈论选民投票......)我正在寻找更有效的解决方案。
【问题讨论】:
-
也许发布一些 SQL 来帮助说明您从哪里开始。表格、查询等
-
@p.campbell 我添加了一个图表。我们的真实系统更让人眼花缭乱,所以我想解决这个更简单的系统。
-
也许是一些示例数据,您期望的结果会有所帮助吗?
-
@PerformanceDBA:答案是精心设计的,但没有给出我需要的向下钻取级别。我需要保留每个(有效)选民的历史信息。这是我的问题而不是答案的问题,所以我不确定如何继续。
-
没问题。我意识到这一点。进步取决于互动。请在功能方面发布您现在所做的确切示例,与您当前令人眼花缭乱的系统(伪代码很好)(a)当前值的计算(例如每日)和(b)相同的集合无关,到期后,出于历史目的。
标签: sql database database-design data-warehouse olap