背景
在一些復(fù)雜的業(yè)務(wù)場景中,需要維護多級賬戶矩陣的關(guān)系。即多層級的母子賬戶關(guān)系。此時如果賬戶A1登錄后,他需要查詢到它下面所有的子賬戶列表。此時應(yīng)該如何去做。

賬戶矩陣關(guān)系.png
假設(shè)表結(jié)構(gòu)中,每一條記錄均存儲parentId的字段,那么通過遞歸查詢,那么就可以將全部的數(shù)據(jù)都查詢出來。
如果n層矩陣的話,大約要遞歸查詢n次
select * from tableA where parentId in ()
思路
我們可以在表中維護一個字段 parent_id_path,這個字段的目的就是維護目錄關(guān)系:例如C1的記錄維護的是A1,B1,C1,B1維護的是A1,B1,A1維護的是A1
如果查詢A1的所有子賬戶,那么查詢語句變成了
select * from tableA where parentId like 'A1,%'
通過like查詢的特性,快速將所有命中條件的子賬戶都查詢出來。
缺點:因為每一層均維護了目錄樹的鏈路,當(dāng)矩陣發(fā)生替換后,發(fā)生替換的每一層節(jié)點都需要做出變更。