在数据仓库中建模多对多关系

时间:2016-12-15 14:39:48

标签: etl data-warehouse

我必须在我的大学为班级设计数据仓库模型和ETL过程。我的数据仓库必须存储有关产品的意见/评论,每条记录应包括:

  • 评论文字(字符串)
  • 产品得分({0,0.5,...,4.5,5})
  • 评论作者(字符串)
  • 评论日期(日期)
  • 产品推荐({Yes,No})
  • 评论投票(Int)
  • 评论投票(国际)
  • 产品专业人士(许多字符串,例如{价格,设计,耐​​久性......})及其数量
  • 产品缺点(许多字符串,例如{太大声,太重,价格......})和 它的数量

此外,数据仓库应存储有关产品的信息:

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

我想首先创建数据仓库模型,但我存在产品优缺点的问题,因为它是多对多的关系。在普通的关系数据库中,我只是创建关联表,但在这里我不知道如何继续,毕竟我不想规范化事实表。

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

ER Model

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

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

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

1 个答案:

答案 0 :(得分:0)

我认为,如果我们可以让你的第一个选项稍微修改一下,而不是你在这里所说的,那将是我所理解的最好的选择。

在您提供的图片中,Pros_Bridge_Detail表格正常。其余的需要改变。

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

同样可以对Cons进行。

希望你理解我刚刚解释的内容并希望它有所帮助。如果您有任何问题,请告诉我们。