数据仓库分层事件

时间:2016-07-05 18:11:32

标签: design-patterns data-modeling data-warehouse

我需要为事件跟踪系统建模,跟踪的项目是分层的(这是一个相对复杂的层次结构,但我会为这篇文章简化它)。在最低级别跟踪进度,然后当所有子级达到给定状态时,父级被标记为已完成。

这不是教育,但这是说明这一点的好方法,我们假设我们有两个层次:

  • 模块

学生选修一个由许多模块构成的课程,所以当完成所有模块后,课程就完成了(测试后),学生就会收到证书。容易。

用户可能想要问的一些问题包括:

  • 哪些学生已经开始,但没有完成课程
  • 哪些学生 x 模块在课程中不完整
  • 有多少学生完成课程的方式超过50%
  • 完成课程需要多长时间(平均)
  • 课程/模块的完成率是多少。
  • 哪些学生取得了证书x(考试后)

有一些属性只存在于学习层次的不同层面......但不是很多。例如,已完成的课程会生成一个证书,该证书在模块级别并不存在,因此需要根据该记录进行。

所以我们知道以下内容:

  1. 需要在模块和类级别跟踪“事物”,因此我们知道每个粒子都需要一个事实表。
  2. 这些级别是分层的,所以我们知道他们之间需要关系。
  3. 事件类型的汇总,但不是数字衡量标准可以汇总的方式
  4. 所以目前我在脑海里有这种安排......

    Fig1

    这里的思考过程是模块和类是单独的实体,需要是不同的维度才能正确描述驻留在不同粒度的事实表的内容。我没有100%通过两者之间的关系思考,但它确实以某种身份存在,因为这些类相互汇总...所以这基本上是类似于AdventureWorks Product>的后代表。 ProductSubCategory> ProductCategory,我不认为它可以作为单个表维护,因为需要不同粒度的事实表吗?

    我已经考虑过的另一种机制,现在我输入它可能更灵活(我会想,并且稍后通过编辑对此进行限定)可能就是这样......

    Fig2

    我认为也可以将父子弹出更多的“邻接列表”样式设计,但我不确定此时是否需要维护更多或更少的工作。 ..?

    我写这篇文章的时候我刚才想到的是,如果一个模块需要成为多个类的一部分会发生什么......也许一个邻接列表会更适合那个点?此时,它开始变成更多的“网络”而不是层次结构......

0 个答案:

没有答案