我在数据仓库的设计阶段苦苦挣扎。这不是您在 MSDN 或所有书籍等上找到的传统销售示例。我的任务是创建一个教育数据仓库,用于跟踪学生随时间的进步。Kimball 的书中也没有与之相匹配的内容。到目前为止,这是我想出的。我正在遵循最佳实践,即在每个表上创建主身份密钥并包括业务密钥,我可能会尝试根据数据质量创建唯一密钥(是否可以保持参照完整性)
昏学生
- 学生DwKey
- 学生商务钥匙
昏暗的主题
- SubjectDwKey
- SubjectBizKey
昏暗的时间或日期
- 日期键
不同格式的日期、季度等。
昏暗学院
- 大学密钥
- 大学商务钥匙
DimTeacher 或导师
- 老师DwKey
- 教师商务钥匙
事实成绩
- FK_StudentDwKey
- FK_SubjectDwKey
- FK_CollegeDwKey
- FK_TeacherDwKey
- 等级
(显然维度表中的字段多了很多,只是为了简单起见)
Student 和 Subject 都具有相同的业务密钥。现在我真的在为事实表苦苦挣扎。由于某种原因,考试成绩存储在 Subject 业务表中。我创建的 ETL 将成绩从主题表中拆分出来,因此 DimSubject 仅包含主题,而 FactGrades 仅包含带有来自其他表的外键的成绩。我遇到的问题是关系以及我是否需要创建多个事实表。还有其他他们想要分析的成绩存储在不同的地方,例如预测成绩或入学考试成绩。那么我应该为每个事实表创建一个事实表,还是尝试将它们全部合并到一个事实表中?此外,如果关系由业务键定义,我不应该在业务键而不是代理键之间创建外键关系吗?简而言之。
- 我是通过新创建的键还是业务键来定义关系?
- 如果它们位于业务数据库的不同部分,我是为每种类型的成绩创建多个事实表,还是将它们全部放在一个表中。
- 我可以将一个维度链接到多个事实表吗,或者这会导致重复问题吗?
- 我如何定义与日期维度的关系,这种关系应该在事实表和我加入的对象之间吗?我有一个考试开始日期和结束日期,但其他年级类型会有不同的日期。
以下是我的回答:
如果您有任何后续问题,请告诉我!