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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top