sql >> Base de Datos >  >> RDS >> Mysql

php/Mysql mejor estructura de árbol

Puede usar un modelo de conjunto anidado ya que produce consultas muy eficientes. Consulte Administración de datos jerárquicos en MySQL y lea la sección llamada Modelo de conjunto anidado .

Si usa un ORM como Doctrine, incluye funciones de conjuntos anidados .

Puede ser difícil para algunos comprender los conceptos de conjuntos anidados de izquierda y derecha. Descubrí que al usar esos números como una analogía de los números de línea de las etiquetas de apertura/cierre en un documento XML, a la gente le resulta más fácil de comprender.

Por ejemplo, tome el ejemplo de datos del enlace MySQL anterior:

+-------------+----------------------+-----+-----+
| 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 |
+-------------+----------------------+-----+-----+

Si tomas el lft , rgt campos y los usa como números de línea para un documento XML, obtiene:

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>

Verlo de esta manera puede hacer que sea mucho más fácil para algunos visualizar la jerarquía de conjuntos anidados resultante. También aclara por qué este enfoque mejora la eficiencia, ya que permite seleccionar nodos completos sin necesidad de múltiples consultas o uniones.