在重新创建CMS时,我想要一种传统的父/子方法的替代方法来管理站点地图/页面层次结构。我记得前一段时间见过嵌套的集合模型,但是不记得它叫什么了。因此,我偶然发现了一种类似的方法,我想评估和比较这些属性,以确保以后不会遇到愚蠢的限制,因为我没有使用耗时考验的方法。因此,请告知是否A)它已经被发明(它叫什么?!),B)属性上有根本的缺陷,或者C)这是一个好方法(请给出充分的理由!)。

考虑以下列表:

  • 主页
  • 关于我们
  • 与我们联系
  • 产品
  • 服装
  • 图书
  • 电子
  • 知识库
  • 其他内容

  • 在嵌套集模型下,我相信您使用深度优先遍历存储每个节点的左/右描述符:
    Home                  1-18
        About Us          2-3
        Contact Us        4-5
        Products          6-13
            Clothing      7-8
            Books         9-10
            Electronics  11-12
        Knowledge Base   14-15
        Other stuff      16-17
    

    这是我开始喜欢的“错误方式”:
    Home                  1-9
        About Us          2-2
        Contact Us        3-3
        Products          4-7
            Clothing      5-5
            Books         6-6
            Electronics   7-7
        Knowledge Base    8-8
        Other stuff       9-9
    

    我存储的是ID和LAST_CONTAINED_ID,而不是左/右对。我发现许多属性是相同的(或非常相似):
  • 根节点的ID为1
  • 对于“叶子”,两个属性相等,而对于分支,它们不是
  • 任何给定节点的“子节点”总数为LAST_CONTAINED_ID-ID
  • 所有包含的节点的ID>容器的ID,但
  • 祖先节点的ID =子ID
  • 深度是祖先节点
  • 的总和

    此外,该ID还提供特定于订单的唯一标识符(没有空格!)。为了简化起见,我发现存储DEPTH和PARENT引用也更加容易,但是从我的理解来看,嵌套集也几乎相同。

    那么,这算作一个嵌套集吗?并且它已经是一种常见的方法了(但是为什么我以前没有听说过……)?我有充分的理由为此使用真正的嵌套集吗?

    我欢迎您的想法。

    最佳答案

    它提供的唯一优势是“无间隙”功能,但是要实现这一点,您必须更改应用于右值的逻辑。在原始模型中,您通过查看所有值6 另一个较小的困扰是,在原始版本中,从12跳到14会突出显示您已更改级别,而在模型中则没有这种视觉提示。
    因此,如果您很乐意使用(

    关于php - 我对任意深度层次数据集: Good or Bad?的嵌套集的替代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8136377/

    10-12 22:53
    查看更多