Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

php/Mysql melhor estrutura de árvore


Você pode usar um Modelo de conjunto aninhado pois produz consultas muito eficientes. Confira Gerenciando dados hierárquicos no MySQL e leia a seção chamada Modelo de conjunto aninhado .

Se você estiver usando um ORM como o Doctrine, ele inclui recursos de conjunto aninhado .

Pode ser difícil para alguns entender os conceitos de conjuntos aninhados de esquerda e certo. Descobri que usando esses números como uma analogia para os números de linha de tags open/close em um documento XML, as pessoas acham mais fácil de entender.

Por exemplo, pegue o exemplo de dados do link MySQL acima:
+-------------+----------------------+-----+-----+
| 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 |
+-------------+----------------------+-----+-----+

Se você fizer o lft , rgt campos e usá-los como números de linha para um documento XML, você obtém:
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>

Ver dessa forma pode tornar muito mais fácil para alguns visualizar a hierarquia de conjuntos aninhados resultante. Também deixa mais claro por que essa abordagem melhora a eficiência, pois permite selecionar nós inteiros sem a necessidade de várias consultas ou junções.