【问题标题】:Algorthims: hierarchical data - what is this method called?算法:分层数据 - 这种方法叫什么?
【发布时间】:2020-01-06 23:35:19
【问题描述】:

我知道在关系数据库中描述分层数据的几种模型:

  • 自引用父(每条记录都有一个外键指向同一张表的主键,不知道这个叫什么)
  • 邻接列表
  • 嵌套集

我突然想到,还有另一种描述层次结构的方法,它与这些模型有不同的缺点(一件事的高度冗余) - 即维护一个影子表,其中每个表的所有祖先树中的节点以及该节点与其祖先相隔的世代数,例如

 node         ancestor          generations
 ----         --------          -----------
 leaf         parent            1
 leaf         grandparent       2
 leaf         great-grandparent 3
 leaf         root              4
 parent       grandparent       1
 parent       great-grandparent 2
 parent       root              3
 grandparent  great-grandparent 1
 grandparent  root              2
 great-grandparent  root        1

描述层次结构......

 root
  |
  +- great-grandparent
      |
      +- grandparent
          |
          +- parent
              |
              +- leaf

我真诚地怀疑我是否发明了一些新东西 - 但由于搜索引擎返回的噪音,我很难在网络上找到对此的描述。

这已经有名字了吗?

【问题讨论】:

标签: algorithm relational-database


【解决方案1】:

Bill KarwinThis presentation (starting page 40) 调用了一个与您所描述的闭包表 非常相似的结构。结构中的generations 列也被引入为length

StackOverflow 实际上有一个tag 用于这个数据结构。标签信息页面中最重要的参考链接之一是指此答案中链接的演示文稿。

我不确定将这种模式称为闭包表是否有特定的技术原因。 Wikipedia article on transitive closures 可能会有所启发:

在数学中,二元关系 R 在集合上的传递闭包 X 是 X 上包含 R 且可传递的最小关系。

例如,如果 X 是一组机场,而 xRy 表示“有一个 从机场 x 到机场 y 的直飞航班”(对于 X 中的 x 和 y),然后 R 在 X 上的传递闭包是关系 R+ 使得 x R+ y 意思是“可以在一次或多次飞行中从 x 飞到 y”。 非正式地,传递闭包为您提供了所有地点的集合 可以从任何起点到达。

【讨论】:

    猜你喜欢
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2014-03-05
    • 1970-01-01
    • 2012-07-25
    • 2017-09-09
    • 1970-01-01
    相关资源
    最近更新 更多