我需要为事件跟踪系统建模,跟踪的项目是分层的(这是一个相对复杂的层次结构,但我会为这篇文章简化它)。在最低级别跟踪进度,然后当所有子级达到给定状态时,父级被标记为已完成。
这不是教育,但这是说明这一点的好方法,我们假设我们有两个层次:
学生选修一个由许多模块构成的课程,所以当完成所有模块后,课程就完成了(测试后),学生就会收到证书。容易。
用户可能想要问的一些问题包括:
有一些属性只存在于学习层次的不同层面......但不是很多。例如,已完成的课程会生成一个证书,该证书在模块级别并不存在,因此需要根据该记录进行。
所以我们知道以下内容:
所以目前我在脑海里有这种安排......
这里的思考过程是模块和类是单独的实体,需要是不同的维度才能正确描述驻留在不同粒度的事实表的内容。我没有100%通过两者之间的关系思考,但它确实以某种身份存在,因为这些类相互汇总...所以这基本上是类似于AdventureWorks Product>的后代表。 ProductSubCategory> ProductCategory,我不认为它可以作为单个表维护,因为需要不同粒度的事实表吗?
我已经考虑过的另一种机制,现在我输入它可能更灵活(我会想,并且稍后通过编辑对此进行限定)可能就是这样......
我认为也可以将父子弹出更多的“邻接列表”样式设计,但我不确定此时是否需要维护更多或更少的工作。 ..?
我写这篇文章的时候我刚才想到的是,如果一个模块需要成为多个类的一部分会发生什么......也许一个邻接列表会更适合那个点?此时,它开始变成更多的“网络”而不是层次结构......