Isso provavelmente é de conhecimento comum para DBAs, mas no meu banco de dados estou lutando com um simples cadastro de clientes.
Os clientes podem se inscrever usando um formulário (usamos typeform ), o que significa que criamos registros de clientes sem um formulário de registro real.
O que fazer se os clientes se registrarem duas vezes? Ou quando clientes diferentes (talvez parceiros) se registram com o mesmo endereço de e-mail?
É sensato impor UNIQUE
restrições, por exemplo, no endereço de e-mail, para evitar registros duplicados? Parece a melhor coisa a fazer, mas posso imaginar que isso causará problemas no futuro.
O principal motivo seria o envio de um formulário com um endereço de e-mail já no banco de dados. Se eu obtiver uma duplicata, provavelmente quero substituir os dados do formulário antigo pela resposta mais recente. No entanto, aqui corro o risco de envios "falsos" que substituem dados antigos por dados falsos. Se eu não substituir o registro antigo, posso perder as informações mais recentes.
Talvez eu esteja pensando demais na questão, mas acho difícil fazer uma escolha decisiva.
Se eu não aplicar a restrição de e-mail, há uma chance de ocorrerem registros duplicados quando o mesmo cliente preencher o formulário duas vezes (isso acontece ocasionalmente). Isso é super chato, pois agora a equipe tem que lidar com dois registros e não sabe qual é o correto.
Existe uma boa maneira de lidar com esse problema? Ou é melhor simplesmente escolher um e lidar com as consequências?
A identificação via endereço de e-mail normalmente também envolve autenticação por endereço de e-mail (por exemplo, enviar um e-mail para o endereço solicitado e registrar-se somente após a resposta a esse e-mail). Depois desse ponto (quando o registro for feito), o "design cauteloso" exigirá que você não permita a substituição do registro existente com muita facilidade ou leveza, significando essencialmente: apenas permitido pelo mesmo usuário que se autenticou corretamente mais uma vez . Ou trabalhando com e-mails de confirmação onde qualquer alteração só é efetivada após o recebimento da confirmação.