Particularmente eu valido se existe antes de inserir, acho mais fácil 
tomar a decisão (informa que ja existe ou envia um email para trocar a senha) é 
mais fácil e acertivo que tratar o erro do BD.

        Para tornar esse processo mais rápido eu crio um campo do tipo binary 
16 bytes e gravo o md5 (binario sem hexadecimal) do email e utilizo ele para 
consulta.

        Algo assim:  select id from users where email_md5 = md5('fulano@bla') 
and email = 'fulano@bla';

        Onde somente o campo email_md5 tem index e você tem certeza que ele 
sempre terá 16 bytes, se você tiver 1 milhão de usuários essa consulta terá um 
custo risório. A segunda comparação é somente para evitar colisões de md5 e o 
index é feito somente no campo email_md5.


Em 14/09/2013, às 12:06, Solli Honorio <shono...@gmail.com> escreveu:

> Pessoal
> 
> Estou escrevendo um cadastro que tem o campo email com unique index. O meu 
> primeiro impulso é fazer uma pesquisa no cadastro para verificar se o email 
> já não existe, mas me dei conta que se eu tentar criar o registro e o email 
> já existir, vou receber um erro informando isto.
> 
> O que vocês acham disto ? É feio jogar com o erro (mesmo tratando o erro de 
> maneira correta) ? Ou é melhor deixar de viver perigosamente e fazer o search 
> antes do create.
> 
> E porquê estou com está dúvida ? Não medi, mas teoricamente gravar e tratar o 
> erro deve (ou deveria) ser mais rápido (pq eu faço "apenas uma operação de 
> IO").
> 
> Abraços,
> 
> Solli Honorio
> 
> -- 
> "o animal satisfeito dorme". - Guimarães Rosa
> =begin disclaimer
>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
> SaoPaulo-pm mailing list: SaoPaulo-pm@pm.org
> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer

=begin disclaimer
   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
 SaoPaulo-pm mailing list: SaoPaulo-pm@pm.org
 L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
=end disclaimer

Responder a