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.