Eu implementei usando duas colunas. Eu simplifico um pouco aqui, porque tive que manter o nome da tag em um campo/tabela separado porque tive que localizá-lo para diferentes idiomas:
- marcar
- caminho
Veja essas linhas por exemplo:
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 o
like
operador no campo de caminho, você pode obter facilmente todas as linhas de tags necessárias:SELECT * FROM tags WHERE path LIKE 'database/%'
Existem alguns detalhes de implementação, como quando você move um nó na hierarquia, você também precisa alterar todos os filhos etc., mas não é difícil.
Certifique-se também de que o comprimento do seu caminho seja longo o suficiente - no meu caso, não usei o nome da tag para o caminho, mas outro campo para garantir que não obtenha caminhos muito longos.