Você precisa de três tabelas:
- Uma tabela para
articles
- Uma tabela para
categories
- Uma tabela vinculando artigos a categorias, podemos chamá-la de
categories_per_article
. Essa tabela geralmente é chamada de tabela de junção ou tabela de associação .
Dados de exemplo:
ARTICLES
ID | Name | Description
1 | Fuzz | A fuzzy three
2 | Bizz | A five that means bizznezz
CATEGORIES
ID | Name
1 | Prime numbers
2 | Multiples of five
3 | Smaller than four
CATEGORIES_PER_ARTICLE
ID | ARTICLE_ID | CATEGORY_ID
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 1
Você verá que o artigo 1 (Fuzz) tem três categorias e o artigo 2 (Bizz) tem apenas a categoria 1. Chamamos isso de relação muitos-para-muitos (ou n-para-n, por exemplo em ER ou UML), porque o artigo 1 tem várias categorias e a categoria 1 é usada por vários artigos.
Você pode fazer todas as consultas possíveis usando este esquema - sinta-se à vontade para pedir nos comentários exemplos específicos (como
How do I get all articles which have categories 1 and 3 but not 2
).