【发布时间】:2017-07-19 11:03:10
【问题描述】:
我正在尝试为报告系统设计 DWH,并想向专业人士询问他们对最佳设计的看法。
它更复杂,但为了简单起见,假设以下场景:
- 每个客户都有“汽车组”
- 有“一组待办事项”要与每个客户核对,并且
- 可能有与每个客户相关的“电话”
在我们的数据库中,每个主题(客户 - 汽车 - 待办事项 - 电话)的数据都存储在一个表中。 Customer 表与(汽车 - 待办事项 - 呼叫)表具有一对多关系,如图所示
我正在考虑让报告系统设置以下维度和事实表: - DIM_Customer - DIM_Car - DIM_To-do - DIM_Call - Fact_ALL
正如我提到的,它更复杂 无论如何,我现在被卡住了,因为不清楚如何聚合我的事实表 --> 因为有一组汽车和一组待办事项和多个电话
DIM_Customer_ID DIM_Car_ID DIM_To-do_ID DIM_Call_ID Cars_Count To-dos_Count Calls_Count
Q1:在每个(汽车、待办事项、呼叫)维度和事实表之间使用桥接表 --> 其粒度是“每个客户每组汽车每组待办事项”每组呼叫的dos,对吗?还有其他更简单或更好的解决方案吗?如何解决这样的基数?
Q2:在 Db 中,每个 Customer 都有一个唯一的 ID --> 是否可以使用这个 customer_ID 来连接维度表和事实表?或者不建议这样做,因为 dim 和事实表现在没有(PK-FK)连接(customer_ID 仅作为 DIM_customer 中的 PK,但作为其他 DIM 中的 FK)......我只是想让它尽可能简单
- Q3:有没有更好或更多定位的 DWH 设计
这是我的第一个 DWH 设计,如果有任何愚蠢的想法,请见谅 :)
谢谢
【问题讨论】:
-
您是否有特定的理由只创建一个事实表?调用和待办事项可能适合同一个事实表,但它们只是微弱相关,对于汽车来说,快照类型的事实表更合适。此外,汽车是否会随着时间的推移在群体(和客户)之间移动?
-
不,他们没有。此外,用户 x 仅被视为一次 --> 用户 x 只能拥有一次一组汽车 - 下次将其视为新用户。也许多个事实表不是一个坏主意,然后将它们全部加入,但是真的有必要吗?
-
“全部”事实听起来不正确。事实应该是对某些业务流程或关系的度量,而不仅仅是一个中心表。如果包含事实使其变得更加复杂,那么您的报告系统最好保持原样,而不是将其更改为伪维度。我想,电话和待办事项本身可能就是事实,而且你可以有一个事实来模拟人与汽车之间的关系。
标签: etl data-warehouse