Pergunta

Atualmente, estou desenvolvendo meu próprio sistema de blogs. Atualmente, quando você cria uma nova postagem, você tem a opção de arquivar categorias de TI de sua própria escolha.

Atualmente, estou armazenando as categorias como um valor Varchar em um banco de dados MySQL. Como exemplo, o campo conterá 2,4,8 se o usuário tiver escolhido as categorias com ID: 2, 4 e 8.

Para recuperar as postagens do blog para a categoria com ID 4, eu uso:

SELECT col FROM table WHERE LOCATE(',4,', CONCAT(',',col,','))

Disseram-me que os valores separados com uma vírgula decimal são um não-go (muito ruim) quando se trata de boa estrutura de banco de dados!

Alguém pode me fornecer uma boa maneira/técnica para tornar isso a maneira mais eficaz?

desde já, obrigado

Foi útil?

Solução

Uma configuração flexível e robusta, conforme publicado tantas vezes em SO:

POSTS
id
name
text

CATEGORIES
id 
name

POST_CATEGORIES
post_id
category_id

Onde estaria a consulta atual:

SELECT p.id, p.name, p.text
FROM posts p
JOIN post_categories pc
ON pc.post_id = p.id
AND pc.category_id = 4;

Outras dicas

Veja a normalização do banco de dados relacional. Para o seu caso específico, considere criar 2 tabelas, categorias e categorias de blog adicionais, além da tabela de conteúdo do seu blog. As categorias contêm a definição de todas as tags/categorias e nada mais. A tabela de categorias de blogs é uma tabela de referência cruzada muitos para muitos que provavelmente no seu caso contém apenas a referência chave estrangeira à tabela do blog e a referência de chave estrangeira à tabela de categorias. Isso permite que uma entrada no blog seja associada a várias categorias e 1 categoria a ser associada a várias entradas do blog.

A divulgação dos dados não será mais difícil do que uma tabela de 3 unidades na pior das hipóteses e você estará fora do negócio de substring para descobrir nossa lógica de sua empresa.

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