Mysql
 sql >> Database >  >> RDS >> Mysql

Tagging gerarchico in SQL

L'ho implementato usando due colonne. Semplifico qui un po', perché dovevo mantenere il nome del tag in un campo/tabella separata perché dovevo localizzarlo per lingue diverse:

  • tag
  • percorso

Guarda ad esempio queste righe:

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/

ecc.

Usando il like operatore sul campo del percorso puoi facilmente ottenere tutte le righe di tag necessarie:

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

Ci sono alcuni dettagli di implementazione come quando sposti un nodo nella gerarchia devi cambiare anche tutti i figli ecc., ma non è difficile.

Assicurati anche che la lunghezza del tuo percorso sia sufficientemente lunga - nel mio caso non ho usato il nome del tag per il percorso, ma un altro campo per assicurarmi di non ottenere percorsi troppo lunghi.