时间绑定层次结构的最佳关系数据库表示

Mat*_*lie 5 sql database reporting hierarchy

大家认为什么是SQL中有时间限制的层次结构的最佳表示?

我的意思是:
- 在任何给定的日期,你有一个普通的树层次结构
- 这个层次结构可以从一天到
另一个变化- 每个孩子在任何给定的日期仍然只有一个父

第1天......

Business
 |
 |-Joe
 |  |-Happy
 |  |-Sneezy
 |  |-Doc(*)
 |
 |-Moe
    |-Bashfull
    |-Sleepy
Run Code Online (Sandbox Code Playgroud)

第2天......

Business
 |
 |-Joe
 |  |-Happy
 |  |-Sneezy
 |
 |-Moe
    |-Doc(*)
    |-Bashfull
    |-Sleepy
Run Code Online (Sandbox Code Playgroud)

孩子可以在任何时候第一次加入层次结构,或者完全离开层次结构.(例如,新员工和退休员工.)

主要考虑因素:

  • 更新层次结构
  • 查看日期范围内的整个层次结构
  • 报告层次结构中的整个子树
  • 报告日期范围内的整个子树

我知道我现在是怎么做的,但我对其他人怎么做可能很感兴趣:)

编辑

我天真地假设了一些考虑,所以会更明确......

  • 每个"团队"或"人员"在其他地方的维度表中都会有唯一的ID
  • 其他事实表将使用这些ID(例如,存储性能指标)
  • 该结构需要促进跨日期范围的历史报告
  • 使用ETL或触发器来维护替代结构是一种选择

通用性质是最重要的(仅形成通用关系模式的一部分),结合易于使用的驱动报告(对于任何日期范围的树的任何部分)以及可靠更新的能力.

Jon*_*ler 8

这里有几本不同的相关书籍 - 一组用于'时态数据库',另一组用于"RDBMS中的层级结构".

在我看来,你问题的棘手部分是:

  • 查看日期范围内的整个层次结构

  • 报告日期范围内的整个子树

其他项目即使不是直截了当,也可以使用书中概述的技术进行管理,并按照其他答案中的建议进行管理.部分问题是理解这两个要点的含义.从某种意义上说,它们是"相同的"; "整体层次结构"只是"整个子树"的一个特例.但更深层次的问题是"你想如何展示 - 可视化,代表 - 层次结构随时间的变化?" 您是想在开始和结束时间比较状态,还是在寻找中间变化?您想如何表示层次结构中个人的行为?

更多的问题而不是答案 - 但我希望指针有所帮助.