2016-11-03 2 views
2

Я являюсь участником сети MLM, и я также являюсь разработчиком. Мой вопрос касается структуры базы данных для создания ПО MLM с бесконечными уровнями. Пример:Как хранить и запрашивать базу данных с древовидной структурой

Person 1 (6000 человек его сеть - но только 4 прямой связан с ним)

Как хранить эти данные и запрос, сколько очков делает его сетевой продукции?

Я мог бы сделать это с использованием отношений «многие-ко-многим», но как только у нас будет много пользователей и огромная сеть, это дорого обойдется и запросит эти записи.

ответ

1

В любой базе данных, если каждый элемент «дерева» имеет те же свойства, лучше всего использовать таблицу саморефлексии, особенно если каждое дерево имеет 1 и только 1 прямой родительский элемент.

IE.

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

Обычно большой босс будет иметь значение NULL boss_hr_id

Чтобы запросить такую ​​структуру, в Postgres, вы можете использовать КТР («с рекурсивной» заявление)

Для приведенной выше таблицы, запрос как это будет работать:

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 
) 
Смежные вопросы