Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 数据库:汇总过期的数据_Sql_Database_Database Design_Data Warehouse_Olap - Fatal编程技术网

Sql 数据库:汇总过期的数据

Sql 数据库:汇总过期的数据,sql,database,database-design,data-warehouse,olap,Sql,Database,Database Design,Data Warehouse,Olap,我正在努力为我的数据找到一种高效灵活的表示方式。我们在两个具有任意生命周期的实体之间存在多对多关系。让我们把它们称为选民和候选人。每一种关系都有一个衡量标准,我们想用不同的方式总结一下。这些是时间戳,并保证在两个相关实体的生命周期内。假设衡量标准是支持率,或者仅仅是评级 一个不寻常的要求是,如果我总结一个没有度量值的周期,我应该替换最新的有效度量值,而不是给出空值 我们目前的解决方案是每天编制一份有效选民和候选人名单,然后制定一个多对多表格,记录最新的有效措施 你的解决方案是什么 这使我可以执

我正在努力为我的数据找到一种高效灵活的表示方式。我们在两个具有任意生命周期的实体之间存在多对多关系。让我们把它们称为
选民
候选人
。每一种关系都有一个衡量标准,我们想用不同的方式总结一下。这些是时间戳,并保证在两个相关实体的生命周期内。假设衡量标准是支持率,或者仅仅是
评级

一个不寻常的要求是,如果我总结一个没有度量值的周期,我应该替换最新的有效度量值,而不是给出空值

我们目前的解决方案是每天编制一份有效选民和候选人名单,然后制定一个多对多表格,记录最新的有效措施

你的解决方案是什么

这使我可以执行单个查询以获得每日摘要:

   select 
       avg(rating), valid_date, candidate_SSN, candidate_DOB
   from 
       daily_rating natural join rating
   group by
       valid_date, candidate_SSN, candidate_DOB

这可能行得通,但在我看来效率很低。我们在重复大量数据,尤其是在某一天没有任何事情发生的情况下。还不清楚如何在不编制更多表格的情况下进行每周/每月总结。由于我们处理的是数百万行(我们并不是真的在谈论选民投票…),我正在寻找一个更有效的解决方案。

我在这里使用了数据仓库技术,因此使用了
dim
事实
表名

dimDate是所谓的日期维度,每个日期一行

DIMCANDABLE包含所有候选数据、新记录和旧记录。在数据仓库术语中,这称为类型2维度。一个候选者可以在此表中有多行,其中只有一行具有
r\u状态
=“当前”

田地

, r_valid_from date
, r_valid_to   date
, r_version    integer -- (1, 2, 3,..)
, r_status     varchar(10) -- (expired, current)
描述记录(行)状态。每次候选状态更改时,都会插入一个新行,并修改前一行的
r\u valid\u to
r\u status

CandidateFullName
是业务(自然)密钥,必须唯一标识候选人。任何两名候选人都不能有相同的
CandidateFullName
。请注意,
CandidateKey
唯一标识表中的一行,而
CandidateFullName
唯一标识候选行

DIMVOCTOR有选民数据、新记录和旧记录——就像DIMCANDABLE一样

dimCampaign描述活动详细信息,这是所谓的类型一维,不保存历史数据

factRating具有评级度量

正常情况下,这就足够了,但需要对一天内缺失的数据进行插值;为此,引入了聚合表aggdailrating。在一天结束时,计划作业会汇总当天的评分。此作业负责数据插值要求。 这样,聚合表中的每个
date-(valid)候选活动组合都有一行。请注意,组合中不包括投票者,而是对所有投票者汇总数据

例如,任何报告都是在聚合表上完成的

--
-- monthy rating for years 2009-2010
-- for candidate john_smith_256
--
select
     CalendarYear
   , MonthNumber  
   , avg(DailyRating) as AverageRating
from aggDailyRating as f
join dimDate        as d on d.DateKey      = f.DateKey
join dimCandidate   as c on c.CandidateKey = f.CandidateKey
where CandidateFullName = 'john_smith_256'
  and CalendarYear between 2009 and 2010
group by CalendarYear, MonthNumber
order by CalendarYear desc, MonthNumber desc ;

是的,这是非常低效和浪费的。它仅仅是一组文件,与一组“表”或“数据库”没有合理的可比性;对it的扩展和增强将加剧重复和效率低下。重复是数据库的对立面。在数据库方面,有更高效、更简单的方法来实现这一点

假设

你的帖子没有提供太多的信息,所以我不得不做出一些假设,但我认为如果其中任何一个是错误的,你可以很容易地更正我提交的内容。否则,请发表评论,我将更正我的提交

  • 选民是一个人;候选人是选民;(候选人=投票人的子集)

  • 竞选活动与候选人有关(与投票活动无关)

  • 民意调查是选民对候选人表现的反应的调查,从设定的日期开始,持续几天,然后在设定的日期完成

  • 在每次民意测验中,都会对许多指标进行调查,例如认可度

  • 所有选民的此类调查的衡量标准在民意调查层面进行汇总

  • 限制

  • 到期要求不明确,所以我不是说我已经实施了。如果模型没有为您提供这些信息(如果不是很明显),请提供详细信息,我将添加到模型中。当前模型为我所理解的到期要求提供了排除/包含功能

  • Poll::Measure没有足够的信息来完全实现;我需要进一步的细节。提交的文件是原始的,在该领域不受限制

  • 同样,尚未实现任何Poll::Campaign关系或约束(“每个Campaign有许多轮询,并且它们始终与Campaign相关”)

  • 目前,子表中键的排列是任意的:如果您确定了最常见的查询,则可以对其进行重新排列,以使大多数查询获得最佳速度

  • 提交

  • 这只是一个关系型(标准化;零重复)数据库,纯IDEF1X,包括考虑到子表将是巨大的:将窄代理键迁移到子表中,避免迁移宽键

  • 它按原样提供“数据仓库”功能。事实上,如果它没有在单个查询中提供任何BI或DSS需求,那只是因为缺少您提供的详细信息;请提供,我将很高兴地更改它。(注意,您的项re“single query”实际上是“single file”;连接在关系数据库中是常见的。)

  • 诸如%Code之类的键是2、3个字符,最多4个字符。这样的钥匙也一样