【问题标题】:How to store and query a database with tree structure如何存储和查询具有树结构的数据库
【发布时间】:2016-11-04 03:12:35
【问题描述】:

我是传销网络的成员,也是一名开发人员。我的问题是关于构建具有无限级别的传销软件的数据库结构。示例:

第 1 个人(6000 人是他的网络 - 但只有 4 人直接链接到他)

如何存储该数据并查询他的网络产生了多少点?

我可以使用多对多关系来实现,但是一旦我们拥有大量用户和庞大的网络,查询和循环这些记录的成本就会很高。

【问题讨论】:

    标签: postgresql database-design hierarchical-data


    【解决方案1】:

    在任何数据库中,如果“树”的每个成员都具有相同的属性,最好使用自引用表,尤其是如果每棵树都有 1 个且只有 1 个直接父级。

    IE。

    HR
    ------
    ID
    first_name
    last_name
    department_id
    sal
    boss_hr_id (referneces HR.ID)
    

    通常大老板会有一个 NULL boss_hr_id

    要查询这样的结构,在postgres中,可以使用CTEs(“with recursive”语句)

    对于上面的表格,这样的查询将起作用:

    with recursive ret(id, first_name, last_name, dept_id,boss_hr_id) as
        (
          select * from hr
          where hr.id=**ID_OF_PERSON_YOU_ARE_QUERYING_STRUCTURE**
          union
          select hr.id, hr.first_name, hr.last_name,hr.dept_id,hr.boss_hr_id, lev+1 from hr
          inner join ret on ret.boss_hr_id=hr.hr_id
        ) 
        select * from ret
    ) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 2013-11-23
      相关资源
      最近更新 更多