将层次结构放在自己单独的维度中,或将其设置为相关维度的一部分



我是the dimensional model数据仓库设计的新手,在第一次设计时遇到了一些困惑。

我采用了一个简单的业务流程(Vacation Request),我想问这两种设计中哪一种是准确的、接近有效和适用的,如果我能得到详细的答案,我将不胜感激?(我的问题主要是尺寸设计)

1- 
Dimension.Employee           Fact.Vacation
[Employee Key]               [Employee Key] FK PK
[_source key]                [Vacation Transaction]PK DD
[Employee Name]              ...
....                         ...
[Campus Code]
[Campus Name]
[Department Code]
[Department Name]
[Section code]
[Section Name]
.... 

2- 
Dimension.Employee           Dimension.Section         Fact.Vacation
[Employee Key]               [Section Key]             [Employee Key] FK PK
[_source key]                [_source key]             [Vacation Transaction]PK DD
[Employee Name]              [Department Code]         [Section Key]FK
....                         [Department Name]         ...
....                         [Campus Code]
[Campus Name]

层次结构如下:

Campus Contains --> 
Many Departments and each department contains --> 
many sections and each section contains many employees

好问题!我自己也遇到过很多次这种情况。恐怕这会让人有点困惑,最终的答案是;取决于";,但这里有一些事情需要考虑。。。

  • 真正的明星计划是什么:虽然人们认为数据仓库是一个报告数据库,但它实际上执行两个功能:数据集成和数据分发。事实证明,用于集成的最佳数据结构并不适合分发(这是我几年前写的一篇关于这一点的博客文章)。星型模式实际上是关于数据分发的——快速而轻松地将数据从系统中取出。对此,最好的数据结构没有联接,即它们类似于平面文件(是的,我意识到有一些DB缓冲方面的考虑可能会影响这一点,但从一般意义上讲,索引平面文件确实避免了所有联接)

星形模式采用该平面文件并对其进行一点规范化,主要是为了节省磁盘空间(当您必须在每条记录上写出每个维度的每个属性时,这是一个巨大的空间浪费)。因此,当人们说恒星模式是非规范化的时,他们部分是不正确的。维度表是非规范化的(雪花模式将其规范化),但事实表是规范化的——它有一堆依赖于唯一主键的属性。

因此,这个概念将指向最小化维度的数量,以最小化需要进行的连接的数量。将它们放入一维的要点。

  • 事实表显示关系:事实表显示其他不相关维度元素之间的关系。例如,在没有销售的情况下,产品和客户之间没有关系。销售创造了这种关系,销售事实记录为其建模。在你的情况下,部门和员工之间存在着自然的关系(至少我认为是这样)。您不需要事实表来建模这种关系,因此,它们都应该在一个维度表中。将它们放入一维的另一点。

  • 员工是否可以同时在多个部门?:如果一名员工可以同时在多个部门,那么您可能确实需要事实表来建模这种关系(否则,每个员工都需要在员工维度表中有两条活动记录)。将它们放入单独维度的点

  • 员工是否经常更换部门?:如果是这样,并且您只有一个维度,那么您最终将不得不不断修改员工维度中的员工记录——如果这是一个缓慢变化的第二类维度(即,您正在跟踪维度元素更改历史的维度),这将导致维度表比所需的更长。将它们放入单独维度的点

  • 你需要按部分汇总吗?:如果您有很多小节,并且经常在小节级别进行报告,则可能需要创建一个在小节级别聚合的事实表。在这种情况下,如果你坚定地相信让DB来加强你的关系(我是),你需要一个可以与事实表相关的部分表。在这种情况下,您需要一个分区表。将它们放入单独维度的点

  • 截面尺寸会被其他事实表使用吗?:当您使用一致的维度(即由多个事实表共享的维度)时,星形模式会出现一种困难的情况。当在维度层次结构的不同级别定义不同的事实表时,就会出现问题。在你的情况下,想象一下有一个不同的事实表,比如一个建模设备的购买,它只在部门而不是员工层面上有意义。在这种情况下,您可能会将截面维度拆分为自己的表,这样它就可以由两个事实表共享,一个是当前的,另一个是未来的设备表。BTW类似于前面提到的与汇总表相关的考虑。将它们放入单独维度的点

不管怎样,这都是我的想法。所以,我想答案是;这取决于";。两者都会起作用,这取决于你试图优化的其他因素。如果我想到其他问题,我会尽量修改我的答案。祝你好运!

第二个。

员工是世界卫生组织,部门是地方。

相关内容

最新更新