如何使用树结构存储和查询数据库

时间:2016-11-03 17:56:12

标签: postgresql database-design hierarchical-data

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

第1人(6000人是他的网络 - 但只有4人直接与他联系)

如何存储该数据并查询其网络产生的点数?

我可能会使用多对多关系,但是一旦我们拥有大量用户和庞大的网络,查询和循环这些记录就会花费很多。

1 个答案:

答案 0 :(得分:1)

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

IE。

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

通常大老板会有一个NULL boss_hr_id

要查询这样的结构,在postgres中,您可以使用CTE(“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
)