Gostaria de saber como faço para reservar um ID no banco de dados ao abrir o cadastro, sendo que esta funcionalidade será aplicada em um sistema em rede.
Pesquisei a respeito e a melhor solução funcional que encontrei foi inserir o registro ao abrir o cadastro e após salvar fazer um update. Pensei também em usar uma transação, mas se não comitar ela não reserva o registro.
Levando essas soluções em consideração, acredito que talvez haja alguma maneira mais confiável de efetuar esta operação, por isso estou aqui solicitando vossa ajuda!
Portanto, existe alguma maneira de fazê-lo de maneira mais confiável? Se sim, poderia exemplificar?
Você quer um ID sequencial e único, usável como uma “surrogate key”? Isso normalmente é feito no MySQL usando-se uma coluna com “auto-increment”. Outra forma é usar uma tabela para conter esses IDs, algo que foi sugerido abaixo:
É exatamente isso que quero, mas talvez não no mesmo contexto.
Por exemplo, há duas máquinas conectadas a um servidor com o sistema rodando, sendo que ambas estão em um cadastro de clientes. A primeira máquina, ao abrir o cadastro, deverá conter o código 1, e a segunda máquina, mesmo que o cadastro da primeira máquina não tenha sido concluído, deverá conter o código 2, pois trata-se de um código que será repassado ao cliente.
Acredito que o ideal seria concluir o cadastro e após isto passar o código ao cliente, mas por solicitação do cliente estou avaliando esta possibilidade de reservar o código ao iniciar o cadastro.
Peço desculpa caso eu não tenha me expressado bem, heheh.
Ah, entendi.
Provavelmente você terá de usar uma tabela com os IDs, até para você não ter de ficar criando casos especiais dentro do seu programa (no seu caso, você teria de criar um campo na sua tabela para indicar se o cadastro foi ou não efetivado, o que é meio desajeitado e sujeito a problemas desagradáveis - cada consulta que você for fazer vai ter de ficar checando esse tal campo para ver se esse é um cliente cadastrado ou então em processo de cadastro.)
Se você criar uma tabela só para gerar IDs (como se fosse uma “sequence” do Oracle), você pode deixar sua solução mais genérica.