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

Responder a