主要是半加性事实的建模场景

时间:2018-03-01 18:36:49

标签: erd dimensional-modeling star-schema

我正在学习维度建模,我试图创建一个模型。我在考虑一个评价酒店的社交媒体平台。该平台有以下数据:

  • 酒店信息:姓名和地址
  • 用户可以评价酒店(1-5分)
  • 用户可以撰写评论
  • 平台存储评论日期
  • 酒店可以通过评论回答并存储日期
  • 平台存储每个评级等级的总数(即:所有费率为1分,所有费率为2分等)。
  • 平台存储用户的信息:性别,姓名,他/她的总票数和地址

首先,我尝试定义哪些信息属于维度或事实表
(这里我还检查了哪一种是添加剂/半添加剂/非添加剂)

我意识到我的例子很难,因为很难确定它是属于事实表还是维度。

我想听听一些建议。有人会同意我的模特吗?

这就是我建模的方式:

  • 酒店信息 - >酒店维度
  • 用户评分 - >加性事实 - 因为我可以用所有维度聚合它们
  • 用户评论 - >半添加剂? - 因为我可以用日期维度聚合它们(我不知道我的论证是否正确,但我知道我每天都会有新的评论,这对我来说是将其存储在事实表中的理由
  • 回答评论 - >与用户评论相同的处理
  • 评论日期 - >尺寸
  • 所有投票总数(1/2/3/4/5) - >半加性事实 - 聚合它们是没有意义的,因为它已经完全但我会得到平均值
  • 用户信息性别和姓名,地址 - >用户维
  • 用户信息:总票数 - >可能是维度或事实。这取决于它改变的频率。如果它经常变化,我将它存储在一个事实中。如果它不经常,那么维度

我仍然有疑问,希望有人可以帮助我:

我的问题:我应该创建两个日期维度,还是可以将这两种信息存储在一个日期维度中?

第二个问题:每个用户和酒店只有一个地址。是否存在参数,以在自己的层次结构中分离地址维度?我可以创建与用户维度和地址维度的1:1关系吗?

1 个答案:

答案 0 :(得分:1)

对于你的模型,它看起来很好,但这里有一些想法:

用户评论(和评论的答案):它们是一个被捕获的事件(每天都有新的事件,如你所提到的)所以是事实的,具有评论者的维度,评论的类型,日期和度量是至少是一个加法的“计数”。但是你不希望将大文本存储在一个事实中,所以你可以将它放在一个维度中,对于你需要查询注释本身的情况,这个事实是1:1。

如您所说,所有投票总数(1/2/3/4/5)已经汇总,主要是为了表现。原始数据本身应该很容易,所以可能根本不值得存储它们。您还可以考虑使用列进行更新酒店维度(酒店A有5'1'票和4'2'票),您可以随时更新,以便于过滤和分类。

用户信息:总投票数:它是关于用户的事实信息(维度),它取决于您是否总是只想“找出”某个人,或者您是否可能使用它来过滤其他人信息(即向我显示10-20票的用户的所有评论)。在这种情况下,您可以将总数存储在用户维度中(和/或条带,例如“评论范围的数量”,10-20,20-30)。如果需要,您可以经常更新维度,但是你是对的,它仍然可以仅仅作为一个事实。

至于日期维度,如果'grain'是'day',那么你只需要一个维度,你可以从多个事实中引用。

至于地址,你是对的,双方都有争论!许多人将地址分成他们自己的维度,从使用它们的其他维度引用。 Kimball建议您可以在必要时在幕后执行此操作,但更喜欢每个维度都有自己的一组地址列(尽可能一致地建模)。