2016-11-03 171 views
2

我是傳銷網絡的成員,我也是一名開發人員。我的問題是關於數據庫結構構建一個無限級別的MLM軟件。例如:如何存儲和查詢樹形結構的數據庫

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 
)