On Sep 16, 2013, at 3:51 PM, Eden Cardim <[email protected]> wrote: > Consultar antes do insert: > > 1 - é trivial > 2 - é rápido (tanto a implementação quanto a execução, assumindo o uso > de um banco de dados razoável) > 3 - é portável > 4 - é simples de ler (select email from tabela where email = '[email protected]' > é a primeira coisa que se aprende em qualquer curso vagabundo de SQL)
- Não é portável, pois depende do nível de isolamento de transações escolhido - nem todos SGBD implementam todos os níveis do padrão SQL (e por vezes nem de forma semelhante). - Se escolhido um nível de isolamento que não seja o serializável, as chances de colisão por condição de corrida aumentam e então faz-se necessário o tratamento de excessão em relação a restrição de unicidade, e assim terá as mesmas desvantagens da outra solução. Desta forma, a minha conclusão é de que não são soluções mutuamente exclusivas; neste caso de email, a frequência de colisões é baixa (comparada a de nomes de usuários) para requerer uma consulta prévia - uma vez que pode-se ter ferramentas para evitar spam-bots e script-kiddies, sendo útil/necessário para outros formulários em geral; e mesmo optando-se por uma consulta prévia o custo em performance é irrelevante, e assim é boa prática, válida e importante medida. -- Wallace Reis | wreis [email protected] http://wallace.reis.me =begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
