本人刚开始接触数据仓库建模,需要帮助建模的问题。
让我告诉你事实。我的工作是飞行数据(航空数据),所以我有两个Excel(事实)文件,连接在一起,一个文件是 "订单",另一个是 "服务"。
我已经看到了一些维度(时间,地点,等等......),但是,我想知道如何设计我的数据仓库,因为我知道我有两个事实文件通过orderId连接在一起。然而,我想知道如何设计我的数据仓库,知道我有两个事实文件通过orderId连接在一起。
我想了想,星星和雪花模式在我的情况下是行不通的(因为我有两个事实表),而星系模式要求有共同的维度,但我阻止了它,是我把订单表作为一个维度而不是事实表,或者我应该宁可把服务表作为一个维度,但这些都是事实表。我有点糊涂了。
我该如何设计我的模型?
首先要认识到,在一个 星图 它 连接更多的事实表不是问题。 - 见仁见智 此处.
所以第一次抽签会简单的按照你的 两张事实表与本地提供的尺寸.
订购 在一种情况下是 资料表在其他情况下,a 尺寸表 对于 服务 表。
根据你的预期查询,你会发现有用的是 非正态化 的 秩序 表中 服务 表。因此,服务将定义出发日期、到达日期等维度。
这将在ETL工作的加载时间完成。
我将以某种方式 慎重地将措施非正常化 从 秩序 到 服务 - 这将基本消除整个 秩序 表。
措施不会有问题。收款总额 如果这是一个多余的服务金额的总和 - 你可以安全地摆脱它。
但您需要确定的是 航班数 或 运送人数 - 这些措施在《公约》中得到了更好的界定。秩序 事实表;你不能简单地将它们复制到N行中,为每个 服务.
A 变通办法 是可能的,如果你定义一个 总务 对于每个 秩序 而这些措施只在这一行中定义--在其他行中,该值为NULL。如果天真地查询,这可能会导致意想不到的结果,例如每个服务的航班数量。
因此,基本上我会从两个事实表开始,并对服务的一些维度进行去标准化,如果这有助于优化查询的话。.
我将从一个事实表开始 服务项目. 这个事实将包括所有你可能会联想到的维度。订购 包括OrderId的退化维度。
一旦这个事实被构建出来,一些信息产品也在消费它,返回到 订购 并重新评估,看看是否有任何报告需求没有得到满足,或有哪些问题难以用 "大数据 "来回答。服务项目 事实。
将两个事实连接在一起总是一个坏主意。 性能很差。 你总是最好把尺寸从,在你的情况下。订购 到 服务项目. 不要忘了在列名中包含维度的上下文,并为这个上下文提供相应的角色扮演维度视图。 如:OrderArrivalCity,OrderDepartureDate,OrderDepartureTime。
你还可以给自己买一本Ralph Kimball的 数据仓库工具包