Je l'ai implémenté en utilisant deux colonnes. Je le simplifie un peu ici, car je devais conserver le nom de la balise dans un champ/table séparé car je devais le localiser pour différentes langues :
- balise
- chemin
Regardez ces lignes par exemple :
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.
Utiliser le like
opérateur sur le champ de chemin, vous pouvez facilement obtenir toutes les lignes de balises nécessaires :
SELECT * FROM tags WHERE path LIKE 'database/%'
Il y a quelques détails de mise en œuvre comme lorsque vous déplacez un nœud dans la hiérarchie, vous devez également modifier tous les enfants, etc., mais ce n'est pas difficile.
Assurez-vous également que la longueur de votre chemin est suffisamment longue - dans mon cas, je n'ai pas utilisé le nom de la balise pour le chemin, mais un autre champ pour m'assurer que je n'obtiens pas de chemins trop longs.