3つのテーブルが必要です:
articles
用の1つのテーブルcategories
用の1つのテーブル- 記事をカテゴリにリンクする1つのテーブル。これを
categories_per_article
と呼ぶ場合があります。 。このテーブルは、多くの場合、ジャンクションテーブルまたはアソシエーションテーブル と呼ばれます。 。
データ例:
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
記事1(Fuzz)には3つのカテゴリがあり、記事2(Bizz)にはカテゴリ1しかないことがわかります。これを多対多の関係 (または、たとえばERやUMLではn-to-n)。記事1には複数のカテゴリがあり、カテゴリ1は複数の記事で使用されているためです。
このスキーマを使用して、考えられるすべてのクエリを実行できます。具体的な例については、コメントでお気軽に質問してください(How do I get all articles which have categories 1 and 3 but not 2
。