2016-12-15 97 views
1

我必须为我的大学的课程设计数据仓库模型和ETL过程。我的数据仓库具有存储有关产品的意见/建议,每个记录应包括:建模数据仓库中的多对多关系

  • 注释文本(字符串)
  • 产品评分({0,0.5,...,4.5,5})
  • 评论作者(字符串)
  • 评论日期(日期)
  • 产品推荐({是,否})
  • 评论选票(INT)
  • 评论向下票(INT)
  • 产品的优点(多字符串,例如{价格,设计,经久耐用,...}),其计
  • 产品缺点(许多字符串,例如{声音太大,太重,价格,...})和 其计数

另外数据仓库应该存储有关产品信息:

  • 产品类别
  • 产品品牌
  • 产品型号

我想先创建数据仓库模型,但由于它是多对多关系,因此存储产品优缺点时遇到问题。在正常的关系数据库中,我只是简单地创建关联表,但在这里我不确定如何继续,毕竟我不想规范化事实表。

我在考虑3种方法,第一种,我在下面的图表中提出。我用桥表方法(尽管我不知道是否正确)摆脱了多对多的关系。我不知道它将如何影响查询性能。

ER Model

第二种方法我可以使用布尔是柱法。在PROS和CONS表格中,我可以为每个可能的值创建一个列,但最多可以有100个不同的优点或缺点。还有一些可能的优点或缺点在时间上不是恒定的。作者在他们的评论中可以列出新的优点或缺点(这是它在数据源中的工作原理),但我不能添加新的列(我不应该更改数据仓库中的数据)。

我正在考虑的第三种方法是保留PROS表中的专业人员,但在1列中,值将使用逗号或其他分隔符分隔,例如, “价格,设计,颜色”。它使事情变得简单,但很难分析或切片&骰子。

我应该在这种情况下使用哪种方法?哪个更适合将数据加载到数据仓库中,因为表单数据源我会得到所有的评论,而且我只想加载自上次加载后的新评论?

回答

1

我的想法是,如果我们可以让你的第一个选项稍微修改一下比你在这里所说的更好,那将是我理解的最好的。

在您提供的图片中,使用Pros_Bridge_Detail表格很好。剩下的需要改变。

  • 您可以删除仅包含计数的pros_Bridge表。您实际上可以将该列添加到您在此处的COMMENT事实表中。当涉及到查询而不是在许多表中查询时,这将更加高效和简单。
  • 你说你有很多领域可以给价格,设计,耐​​久性等方面的专业人士。让我们把这些东西放到一个单独的维度。
  • 在您的Pros_Bridge_Detail表中添加一个新列以保存新创建的维的产品专业类型(设计,耐用性等)的ID。 现在,一旦您添加产品专业版,Pros_Bridge_Detail表将为用户提供专业人员,并保持关于通过新维度的ID给予专业人员的价值。
  • 另外,不要忘记将评论ID存储在Pros_Bridge_Detail表中,因为这将成为您的评论事实表的链接(FK)。

同样可以对Cons做同样的事情。

希望你明白我刚刚解释的内容,并希望它有所帮助。让我们知道你是否有任何问题。