【发布时间】:2016-12-15 14:39:48
【问题描述】:
我必须为我大学的班级设计数据仓库模型和 ETL 流程。我的数据仓库必须存储关于产品的意见/cmets,每条记录应包括:
- 评论文本(字符串)
- 产品评分({0, 0.5, ... , 4.5, 5})
- 评论作者(字符串)
- 评论日期(Date)
- 产品推荐({Yes, No})
- 评论投票(国际)
- 评论否决票 (Int)
- 产品专业人士(许多字符串,例如{价格、设计、耐用性……})及其数量
- 产品缺点(许多字符串,例如 {太大声、太重、价格……})和 它的计数
另外数据仓库应该存储有关产品的信息:
- 产品类别
- 产品品牌
- 产品型号
我想先创建数据仓库模型,但由于是多对多关系,我无法存储产品的优缺点。在普通的关系数据库中,我会简单地创建关联表,但在这里我不确定如何进行,毕竟我不想规范化事实表。
我正在考虑 3 种方法,第一种方法如下图所示。我使用桥接表方法(虽然,我不知道是否正确)来摆脱多对多关系。我不知道它会如何影响查询性能。
我可能使用的第二种方法是布尔列方法。在 PROS 和 CONS 表中,我可以为每个可能的值创建一个列,但最多可以有 100 个不同的优点或缺点。此外,可能的优点或缺点的数量在时间上也不是恒定的。他们的 cmets 中的作者可以列出新的优缺点(这就是它在数据源中的工作方式),但我不能添加新列(我不应该更改数据仓库中的数据)。
我正在考虑的第三种方法是将专业人士保留在 PROS 表中,但在 1 列中,其中值将使用逗号或其他一些分隔符分隔,例如“价格、设计、颜色”。它使事情变得简单,但难以分析或切分。
在这种情况下我应该使用哪种方法?哪个更适合将数据加载到数据仓库中,因为表单数据源我将获取所有 cmets,并且我只想加载自上次加载以来新的 cmets?
【问题讨论】:
标签: etl data-warehouse