一个或多个事实表
Posted
技术标签:
【中文标题】一个或多个事实表【英文标题】:One or multiple fact tables 【发布时间】:2016-03-30 17:52:01 【问题描述】:我正在设计一个数据模型,用于报告参加课程的人。我想弄清楚我是否应该使用一个或两个事实表。
我需要计算的措施是:
-学生总数
-国籍数量(并按国籍过滤)
-通过课程的学生人数
请注意,学生参加课程并不意味着他们参加了考试,因此他们可能还没有课程成绩。
这给了我两组不同粒度的事实数据。
课程中所有学生的粒度。
已完成课程并通过和失败的学生的粒度。
我的选择是:
两个不同粒度的独立事实表共享几个维度。
一个事实表,但对于任何未通过/未通过的学生,它们将链接到 DimResult 中描述为“No Result Yet”的条目。
在混合粒度时是否有一套使用指南,或者是否两种答案都有效且由我决定?
下面显示了包含两个事实表的计划。
感谢您的建议
【问题讨论】:
【参考方案1】:我看不出有两个单独的表格用于注册和结果,至少在您的图表中显示的方式上没有任何优势。
很难确保学生只获得她也注册的课程的结果。
与注册和结果数据相关的查询将始终必须在同一个复合键上评估两个表。
如果学生每门课程最多有一个结果,您可以将结果和奖励日期添加到注册实体,这两个可能为空。
如果您有只有部分事实相关的用例,您可以使用两个数据库视图轻松模拟两个表场景。与两个表相比,两个视图不会出现一致性问题
如果学生可能获得多个结果,可能是通过重复未通过的考试,则结果实体应与注册实体 1:n 链接。
【讨论】:
我在想如果这对业务用户可用,如果每个事实表只有一个粒度,他们将更容易使用数据透视表中的数据。这样的理由就够了吗?我现在需要额外的 ETL 工作,但这对我来说不是问题。 这些用户会直接在数据库表上玩吗?如果是这样,他们应该足够精通以正确的方式解释数据结构。如果没有,您仍然可以为他们提供一些反映这两种事实之间差异的用户界面。请注意我对有关数据库视图的答案的补充。以上是关于一个或多个事实表的主要内容,如果未能解决你的问题,请参考以下文章