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

Etiquetado jerárquico en SQL

Lo implementé usando dos columnas. Lo simplifico aquí un poco, porque tuve que mantener el nombre de la etiqueta en un campo/tabla separado porque tuve que localizarlo para diferentes idiomas:

  • etiqueta
  • camino

Mire estas filas, por ejemplo:

tag            path
---            ----
database       database/
mysql          database/mysql/
mysql4         database/mysql/mysql4/
mysql4-1       database/mysql/mysql4-1/
oracle         database/oracle/
sqlserver      database/sqlserver/
sqlserver2005  database/sqlserver/sqlserver2005/
sqlserver2005  database/sqlserver/sqlserver2008/

etc.

Usando el like operador en el campo de ruta puede obtener fácilmente todas las filas de etiquetas necesarias:

SELECT * FROM tags WHERE path LIKE 'database/%'

Hay algunos detalles de implementación, como cuando mueve un nodo en la jerarquía, también tiene que cambiar todos los elementos secundarios, etc., pero no es difícil.

También asegúrese de que la longitud de su ruta sea lo suficientemente larga; en mi caso, no usé el nombre de la etiqueta para la ruta, sino otro campo para asegurarme de que no obtengo rutas demasiado largas.