Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Marcação hierárquica em SQL


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.