Meu problema atualmente é o seguinte: tenho uma ligação n para n entre 4 tabelas (pessoa, jogo, time, função) e gostaria de saber se existe uma forma mais pratica de implementar.
Estou fazendo um sistema de gerenciar campeonatos focando no ponto de vista da comissão de arbitragem. Nos jogos as equipes possuem jogadores e comissão, esses dois são distinguidos de acordo com uma chave estrangeira para a tabela função onde estão cadastradas as possíveis funções de pessoas nos jogos.
Para incluir jogadores fiz um campo n-n com duplo select onde ele ao gravar fixa o id da função como 1 (jogador). O time e jogo são fixos para o campo (chave primaria da aplicação e específico do campo, respectivamente) então resta uma única variável para o duplo select que é o id da pessoa. Isso torna a lógica do campo simples para o usuário e de fácil implementação.
Acontece que na hora de incluir a comissão eu não tenho como fixar o id da função e seguindo a mesma lógica anterior eu acabo com 2 variáveis a serem escolhidas pelo usuário. O duplo select te da a opção de usar uma única chave primária e a forma de utiliza-lo com um campo aparte não me agrada nem um pouco pois seria confuso pra quem utiliza.
A forma que venho utilizando para contornar esse problema é fazer ‘a mão’ os seguintes passos:
- um campo select com múltiplos valores onde mostro o nome da pessoa concatenado com a função. Esse campo é utilizado para a visualização e para a seleção na hora de excluir. Ele possui como chave primária somente o id da pessoa.
- um botão php excluir colocado junto do select anterior, usando jquery, onde ele apaga os valores selecionados.
- dois campos select de valor único onde o usuário seleciona a pessoa que quer incluir e qual a função dela por este time(fixado) neste jogo(fixado).
- outro botão php(colocado ali mais uma vez com jquery) para incluir a pessoa na função de acordo com os dois campos anteriores.
Isso tudo ainda falta transformar a chave do select de múltiplos valores em uma chave combinada tipo “id_pessoa - id_funcao” e tratar isso na leitura e na exclusão pois da forma atual ele te impede de colocar mais de uma função para a mesma pessoa em um time para o determinado jogo.
É um serviço gigantesco para cada vez que for utilizado, gostaria de saber se não existe uma forma correta para fazer isso sem quebrar tanto a cabeça.
Desde já obrigado a quem conseguiu ler até aqui!