Database design 一个或多个事实表

Database design 一个或多个事实表,database-design,data-warehouse,business-intelligence,star-schema,Database Design,Data Warehouse,Business Intelligence,Star Schema,我正在设计一个数据模型,用于报告参加课程的人。我想知道我是否应该使用一个或两个事实表 我需要计算的度量是: -学生总数 -国籍数(并按国籍过滤) -通过课程的学生人数 请注意,仅仅因为学生正在上课,并不意味着他们已经参加了考试,所以他们可能还没有课程成绩 这给了我两组不同粒度的事实数据 课程中所有学生的粒度 完成课程并通过和失败的学生的粒度 在我看来,我的选择是: 两个不同粒度的独立事实表共享几个维度 一个事实表,但对于未通过/未通过的任何学生,他们将链接到DimResult中描述为“尚未获得结

我正在设计一个数据模型,用于报告参加课程的人。我想知道我是否应该使用一个或两个事实表

我需要计算的度量是:

-学生总数

-国籍数(并按国籍过滤)

-通过课程的学生人数

请注意,仅仅因为学生正在上课,并不意味着他们已经参加了考试,所以他们可能还没有课程成绩

这给了我两组不同粒度的事实数据

  • 课程中所有学生的粒度

  • 完成课程并通过和失败的学生的粒度

  • 在我看来,我的选择是:

  • 两个不同粒度的独立事实表共享几个维度

  • 一个事实表,但对于未通过/未通过的任何学生,他们将链接到DimResult中描述为“尚未获得结果”的条目

  • 混合颗粒时是否有一套指导原则,或者这两个答案都有效,由我来决定

    下面显示了使用两个事实表显示计划的模式

    谢谢你的建议


    我看不出两个单独的报名表和成绩表有什么好处,至少在图表中是这样的

    • 很难确保一个学生只在她同时注册的课程中取得成绩

    • 与登记和结果数据相关的查询始终必须在同一复合键上计算两个表

    如果学生在每门注册课程中最多有一个成绩,您可以将成绩和奖励日期添加到注册实体中,这两个可能为空

    如果您的用例中只有部分事实是相关的,那么您可以使用两个数据库视图轻松地模拟两个表场景。与两个表相比,两个视图不会出现一致性问题


    如果一个学生可能有多个结果,可能是通过重复一次失败的考试,那么结果实体应该与注册实体1:n链接。

    我在想,如果这对业务用户可用,那么如果每个事实表只有一个粒度,他们将更容易处理数据透视表中的数据。这样的理由足够吗?我现在知道它需要额外的ETL工作,但这对我来说不是问题。这些用户会直接在数据库表上玩吗?如果是这样,他们应该足够熟练,能够以正确的方式解释数据结构。如果没有,您仍然可以为他们提供一些反映这两种事实之间差异的用户界面。请注意,我补充了关于数据库视图的回答。