Mysql
 sql >> Base de données >  >> RDS >> Mysql

Balisage hiérarchique en SQL

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.