小编典典

时界层次结构的最佳关系数据库表示形式

sql

每个人都认为SQL中的时间限制层次结构的最佳表示是什么?

我的意思是:
-在任何给定的日期,您都有正常的树层次结构
-该层次结构可以每天变化
-在任何给定的日期,每个孩子仍然只有一个父级

第一天…

Business
 |
 |-Joe
 |  |-Happy
 |  |-Sneezy
 |  |-Doc(*)
 |
 |-Moe
    |-Bashfull
    |-Sleepy

第二天…

Business
 |
 |-Joe
 |  |-Happy
 |  |-Sneezy
 |
 |-Moe
    |-Doc(*)
    |-Bashfull
    |-Sleepy

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

主要考虑因素:

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

我知道我目前是怎么做的,但是对其他人可能会做的事情很感兴趣:)

编辑

我天真地假设了一些考虑因素,因此将更加明确。

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

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


阅读 164

收藏
2021-04-15

共1个答案

小编典典

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

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

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

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

问题多于答案-但我希望这些指示对您有所帮助。

2021-04-15