我是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类似于前面提到的与汇总表相关的考虑。将它们放入单独维度的点。
不管怎样,这都是我的想法。所以,我想答案是;这取决于";。两者都会起作用,这取决于你试图优化的其他因素。如果我想到其他问题,我会尽量修改我的答案。祝你好运!
第二个。
员工是世界卫生组织,部门是地方。