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

Muitos-para-muitos na mesma mesa


Se o relacionamento que você está descrevendo for simétrico, como em "Bob é amigo de Joe" significa "Joe também é amigo de Bob", então você pode ter certeza em seu código que o menor dos 2 IDs de usuário vai no primeira coluna, e o maior vai para a segunda coluna. Essa restrição praticamente garante que os registros em sua tabela de pesquisa sejam exclusivos. Isso também significa que, quando você está realizando uma pesquisa, geralmente precisa pesquisar nas duas colunas.

Por exemplo, se você estivesse tentando obter todos os amigos de Bob, teria que consultar os registros que tivessem o ID de Bob em qualquer coluna. Isso leva a um pouco mais de código e possivelmente a um impacto no desempenho.

Se a relação pode ser assimétrica, como em "Bob é amigo de Joe" não significa necessariamente "Joe também é amigo de Bob", então você precisa de 2 entradas para cada par de usuários:Bob - Joe e Joe - Bob. Isso significa que sua tabela de pesquisa conterá o dobro de entradas e também que seu site é muito amigável para perseguidores :D Claro, você ainda pode optar por aplicar esse sistema mesmo que seu relacionamento seja simétrico.

Usando este método, se você deseja obter todos os amigos de Bob, basta selecionar os registros com o ID de Bob na primeira coluna. É possível que isso signifique pesquisas mais rápidas e menos código para você escrever, mas, novamente, significa que você está ocupando mais espaço em seu banco de dados.