Como modelar tags no banco de dados?
-
19-09-2019 - |
Pergunta
Eu tenho um webapp existente e deseja adicionar um recurso tag para que os usuários podem marcar objetos existentes. A questão é que eu deveria adicionar uma coluna tag para cada objeto? ou devo normalizá-lo e usar uma tabela tag onde cada objeto terá um conjunto de tags? Estou inclinado para o último porque ele se sente mais limpo, mais fácil de relatório sobre e mais fácil para criar uma nuvem de tags. Mas desde que eu sei que isto tem sido resolvido 1000 vezes que eu queria perguntar e ver se eu estou faltando alguma coisa?
Solução
Você prevê usuários que precisam associar mais de um tag com um objeto?
Se não , adicione o fk TAG_ID à mesa de OBJECT. Caso contrário, você precisa de três mesas no total para corretamente modelar um relacionamento muitos-para-muitos:
OBJECT
- OBJECT_ID (pk)
OBJECT_TAG_XREF
- OBJECT_ID (pk, fk para OBJECT)
- TAG_ID (pk, fk para TAG)
tag
- TAG_ID (pk)
Outras dicas
Sim, você deve normalizar-lo. O 'coluna tag' é ou vai suportar apenas um tag por registro, ou vai ter o desempenho da pesquisa hediondo.
Definitivamente normalize. Uma tabela para tags, uma mesa para seus objetos existentes, e uma tabela de ligações entre eles.