Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como atribuir vários ids a uma linha no MySQL?


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.)