在表中表示多维数据的最佳实践是什么?

时间:2010-09-06 10:26:53

标签: database-design

我有调查统计数据 - 对于每个答案(有一个正确的答案数量) - 我需要知道年龄组和收入组。 (例如 - 答案“a”由23岁30至35岁的人和11位收入水平为10,000至15,000的人以及7位年龄在30至35岁之间的人收取,收入水平为10,000至15,000(这可以是由前两个要求推断。这些组是预定义的。)这实际上是一个“立方体”具有:
第一维 - 答案id,第二维 - 年龄组,第三维 - 收入组。 /> 我应该如何在数据库中表示它(使用表格)?对于我需要超过3维数据的情况,您能否进行推广?

提前谢谢大家。

4 个答案:

答案 0 :(得分:4)

该示例包含五个维度:UserQuestionAnswerSurveyDemographicDemographic表用于冻结调查时的收入水平和年龄组 - 用户可以随时间改变收入和年龄。 CurrentDemographicID表格中的User是在调查之前预先计算的,稍后会复制到DemographicKey表格的UserQA

alt text

select 
      AgeGroup
    , IncomeLevel
    , count(1)   as NumberOfPeople
from UserQA      as f
join Question    as q on q.QuestionID    = f.QuestionID
join Answer      as a on a.AnswerID      = f.AnswerID
join Demographic as d on d.DemographicID = f.DemographicID
join Survey      as s on s.SurveyID      = f.SurveyID
where QuestionFullName = 'specific question here'
  and AnswerFullName   = 'specific answer here'
  and SurveyFullName   = 'specific survey here'
group by AgeGroup, IncomeLevel
order by AgeGroup, IncomeLevel ;

另外,请查看 this question/answer

答案 1 :(得分:1)

如果每个答案始终都有两个维度,那么您可以拥有一个包含三列的表格,这三列是您的三维。

通常,n列表是表示n个不同维度信息的关系方式。

答案 2 :(得分:0)

EAV可能就是你追求的目标。

答案 3 :(得分:0)

很可能无论是谁投了devnull的答案,都没有足够的工业数据建模经验或只有简单的练习经验。

作为概括,要使多维分析有效,您需要两级数据建模。

  • 基板细节捕获
  • 抽象多维数据集

答案确实是EAV作为基板细节捕获。人们可以懒惰,跳过细节基板设计。我被迫(由管理层)评估的每个数据挖掘工具都不充分,因为无法执行时间分析。

最终,它要求我们编写自己的数据挖掘应用程序 - 因为使软件工作的数量虽然无效,但却等于创建一个有效工作的工作量。当我们将抽象立方体的切片输入SAS / Insight时,甚至可以发挥出极大的作用。虽然供应商的软件花了一个小时来构建立方体,有时需要24小时,但我们需要在5分钟内建立立方体,并且经常在15秒内完成 - 由于有效的基板数据建模,可以有效切片数据以构建立方体

在工业实践中,我们可能需要灵活地移动和调整分析的时间窗口,以匹配6个月前发生的情况。或者,我们需要检查上一个财政年度的流程表现。

我们需要有正确的时间相位相关性。让我们说一个教会有一个特定福音派集会的每晚统计数据,因为“保存”的人数,“rededications”的数量,“贡献$”的数量,总贡献$,出席人数 - 超过10晚的集会。

然后教会有关于志愿者分发的小册子数量和每个志愿者分配的位置,广播和电视广告以及谷歌广告的统计数据。因此,教会统计学家需要收集每个转换和$贡献者的信息 - 居住地点,收到地点的时间和地点,遇到广告的时间和地点。如果他们能够从每个出席的人那里收集这些信息,并告诉他们这些信息,以及告诉他们关于集会的人何时何地收到了一条信息或遇到了广告。有了这些信息,统计学家就能够得到一个更加真实匹配的多维立方体,让教会领袖决定如何有效地组织他们未来的预先集会。

教堂可能无法对数据模型进行优化,但对于一个装满设备,机器人和经过培训的操作员的工厂来说,这是非常可能的。获得相位相关数据来治疗流行病是非常有帮助的。

EAV模型是必要的,因为可收集的参数数量和属性数量因设备和工艺以及疾病而异。我们不能为每组参数设置一个表。通常,一个过程或一件设备会收集不同的参数集,具体取决于正在处理的产品。

有时收集的参数数量可达一千。我们不能拥有一千列的表,我们可以吗?我们甚至违反了数据规范化原则,将数据存储在单行或blob中,因为在高度规范化的表中数据访问效率低下。

此外,我们还需要对数据集进行版本控制。让我们说我们为2004年设计了一个实验。2006年,我们发现我们需要包含新的维度并丢弃一些无用的维度,因此我们创建了一个新版本的实验。然后,当我们分析2002年和2008年之间的实验表现时,我们需要对实验中的维度集合的变化提供适当的处理。在生物实验和社会行为调查中,版本变化会更频繁。

我在这里有一个属性和参数的变量维度关系模型:http://appdesign.blessedgeek.com/discrete-flow-resource-management。不完全是EAV,但提供了工业多维数据建模所需的想法。