Como outros já sugeriram, o relacionamento muitos-para-muitos é representado no modelo físico por uma tabela de junção. Vou fazer o trabalho de perna e ilustrar isso para você:
O CATEGORY_ITEM é a tabela de junção. Possui um PK composto que consiste em FKs migrados das outras duas tabelas. Dados de exemplo...
CATEGORIA:
CATEGORY_ID CATEGORY
----------- --------
1 Apple
2 Orange
ARTIGO:
ITEM_ID NAME
------- ----
1 Foo
2 Bar
CATEGORY_ITEM:
CATEGORY_ID ITEM_ID
----------- -------
1 1
2 1
1 2
O acima significa:"Foo é Apple e Orange, Bar é apenas Apple" .
O PK garante que qualquer combinação de categoria e item não possa existir mais de uma vez. A categoria está conectada ao item ou não está - ela não pode ser conectada várias vezes.
Como você deseja pesquisar itens de determinada categoria, a ordem dos campos no PK é {CATEGORY_ID, ITEM_ID} para que o índice subjacente possa atender a essa consulta. A explicação exata do motivo está além deste escopo - se você estiver interessado, recomendo a leitura de Use The Index, Luke ! .
E como InnoDB usa clustering , isso também armazenará itens pertencentes à mesma categoria fisicamente próximos, o que pode ser bastante benéfico para E/S da consulta acima.
(Se você quiser consultar as categorias de um determinado item, precisará inverter a ordem dos campos no índice.)