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

Database design 在表中表示多维数据的最佳实践是什么?,database-design,Database Design,我有调查统计数据——对于每个答案(有任意数量的答案)——我需要知道年龄组和收入组。(例如,回答“a”的有23名年龄在30岁到35岁之间的人,11名收入水平在10000到15000之间的人。7名年龄在30岁到35岁之间收入水平在10000到15000之间的人(这可以通过前两个要求推断出来。这些组是预定义的)。这实际上是一个“立方体”使用:第一维度-答案id,第二维度-年龄组,第三维度-收入组。 我应该如何在数据库中表示它(使用表格)?您能对我需要3维以上数据的情况进行概括吗? 提前谢谢大家。可能就

我有调查统计数据——对于每个答案(有任意数量的答案)——我需要知道年龄组和收入组。(例如,回答“a”的有23名年龄在30岁到35岁之间的人,11名收入水平在10000到15000之间的人。7名年龄在30岁到35岁之间收入水平在10000到15000之间的人(这可以通过前两个要求推断出来。这些组是预定义的)。
这实际上是一个“立方体”使用:
第一维度-答案id,第二维度-年龄组,第三维度-收入组。
我应该如何在数据库中表示它(使用表格)?您能对我需要3维以上数据的情况进行概括吗?


提前谢谢大家。

可能就是您想要的。

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


一般来说,n列表格是表示n个不同维度信息的关系方式。

该示例有五个维度:
用户
问题
答案
调查
,和
人口统计
。这里的
人口统计
表格用于冻结当前的收入水平和年龄组调查时间——用户可以随时间改变收入和年龄。
user
表中的
CurrentDemographicID
在调查前预先计算,然后复制到
UserQA
表的
DemographicKey

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 ;


另外,看看

很有可能否决devnull答案的人在工业数据建模方面经验不足,或者只在简单的练习方面有经验

一般来说,要使多维分析有效,您需要两个层次的数据建模

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

最终,它要求我们编写自己的数据挖掘应用程序——因为使软件工作的混乱程度,尽管效率低下,但等于创建一个有效工作的软件所需的努力程度。甚至当我们将抽象多维数据集的切片输入SAS/Insight时,它的工作异常出色软件构建立方体需要一个小时,有时需要24小时,我们需要在5分钟内构建立方体,通常在15秒钟内构建立方体——这是因为有效的基板数据建模能够高效地对数据进行切片来构建立方体

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

我们需要有正确的时间-相位关联。假设一个教堂有一个特定福音派集会的每晚统计数据,如“获救”人数、“重新奉献”人数、“捐款$”人数、“捐款总额$”人数、出席人数-集会的10个晚上

然后教会统计志愿者分发的土地数量,每个志愿者分配的地点,广播和电视广告以及谷歌广告。因此,教会统计人员需要从每个皈依者和$contributor处收集信息-居住地点,何时何地收到土地,何时何地收到土地遇到了广告。如果他们能从每个参加集会的人和告诉他们集会的人那里收集这些信息,以及告诉他们集会的人在何时何地收到了一张牌或遇到了一则广告。有了这些信息,统计员就能够更真实地匹配多维立方体,让他们观看教会领袖决定如何有效地组织他们未来的集会前外展活动

数据模型优化对于教堂来说可能是不可能的,但对于一个满是设备、机器人和训练有素的操作员的工厂来说却是非常可能的。获得相位相关数据来治疗流行病非常有帮助

EAV模型是必要的,因为可收集的参数数量和属性数量因设备、工艺和疾病而异。我们无法为每组参数提供一个表格。通常,一个工艺或一件设备收集不同的参数集,具体取决于在正在加工的产品上

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

此外,我们还需要对我们的数据集进行版本化。假设我们为2004年设计了一个实验。2006年,我们发现我们需要加入新的维度,并丢弃一些无用的维度,因此我们创建了一个新的实验版本。然后,当我们分析2002年至2008年间实验的性能时,我们需要提供在生物实验和社会行为调查中,版本变化会更频繁


我这里有一个属性和参数的可变维度关系模型:。不完全是EAV,但给出了工业多维数据建模需要的概念。

下次,不要使用

而是使用2个空格和[Enter]换行;)@Nick:++谢谢你的提示,为什么这很重要?就因为它更容易?