Du kan använda en Nested Set Model eftersom det ger mycket effektiva frågor. Kolla in Hantera hierarkisk data i MySQL och läs avsnittet som heter Nested Set Model .
Om du använder en ORM som Doctrine, är den innehåller kapslade uppsättningsfunktioner .
Det kan vara svårt för vissa att förstå de kapslade uppsättningsbegreppen vänster och höger. Jag har märkt att genom att använda dessa siffror som en analogi för radnumren för öppna/stäng-taggar i ett XML-dokument, tycker folk att det är lättare att förstå.
Ta till exempel dataexemplet från MySQL-länken ovan:
+-------------+----------------------+-----+-----+
| category_id | name | lft | rgt |
+-------------+----------------------+-----+-----+
| 1 | ELECTRONICS | 1 | 20 |
| 2 | TELEVISIONS | 2 | 9 |
| 3 | TUBE | 3 | 4 |
| 4 | LCD | 5 | 6 |
| 5 | PLASMA | 7 | 8 |
| 6 | PORTABLE ELECTRONICS | 10 | 19 |
| 7 | MP3 PLAYERS | 11 | 14 |
| 8 | FLASH | 12 | 13 |
| 9 | CD PLAYERS | 15 | 16 |
| 10 | 2 WAY RADIOS | 17 | 18 |
+-------------+----------------------+-----+-----+
Om du tar lft , rgt fält och använda dem som radnummer för ett XML-dokument får du:
1. <electronics>
2. <televisions>
3. <tube>
4. </tube>
5. <lcd>
6. </lcd>
7. <plasma>
8. </plasma>
9. </televisions>
10. <portable electronics>
11. <mp3 players>
12. <flash>
13. </flash>
14. </mp3 players>
15. <cd players>
16. </cd players>
17. <2 way radios>
18. </2 way radios>
19. </portable electronics>
20. </electronics>
Att se det på detta sätt kan göra det mycket lättare för vissa att visualisera den resulterande kapslade uppsättningshierarkin. Det gör det också tydligare varför detta tillvägagångssätt förbättrar effektiviteten eftersom det gör det möjligt att välja hela noder utan behov av flera frågor eller sammanfogningar.