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.