Substituindo seqüência com número aleatório
Eu gostaria de substituir algumas das seqüências que eu uso para id's no meu banco de dados postgresql com o meu próprio gerador de ID personalizado. O gerador produziria um número aleatório com um checkdigit no final. Então, é isso:
SELECT nextval('customers')
seria substituído por algo como isto:
SELECT get_new_rand_id('customer')
A função retornaria um valor numérico como:[1-9][0-9]{9}
onde o último dígito é uma soma de verificação.
As preocupações que tenho são:
Como eu faço a coisa atômicaComo evito retornar o mesmo id duas vezes (isso seria capturado ao tentar inseri-lo em uma coluna com restrição exclusiva, mas depois é tarde para eu pensar)Esta é uma boa ideia?Nota 1: Eu não quero usar uuid, uma vez que é para ser comunicada com os clientes e 10 dígitos é muito mais simples de se comunicar do que o uuid de 36 caracteres.
Nota 2: A função raramente seria chamada comSELECT get_new_rand_id()
mas seria atribuído como valor padrão na coluna id em vez denextval()
.
EDITAR: Ok, boa discussão abaixo! Aqui estão algumas explicações paraporque:
Então, por que eu exagero as coisas dessa maneira? O objetivo é ocultar a chave primária dos clientes.
Eu dou a cada novo cliente um customerId exclusivo (número de série gerado no db). Como comunico esse número com o cliente, é uma tarefa bastante simples para meus concorrentes monitorarem meu negócio (há outros números, como fatura nr e order nr, que têm as mesmas propriedades). É esse monitoramento que eu gostaria de tornar um pouco mais difícil (nota: não impossível, mas mais difícil).
Por que o dígito de verificação?
Antes de falarmos sobre esconder o número de série, acrescentei um checkdigit a ordernr, já que havia alguns dedos em alguns pontos da produção, e meu pensamento era que essa seria uma boa prática a ser mantida no futuro.
Depois de ler a discussão, posso certamente ver que a minha abordagem não é a melhor maneira de resolver o meu problema, mas não tenho outra boa ideia de como resolvê-lo, portanto, por favor, ajudem-me aqui.
Devo adicionar uma coluna extra onde coloco o ID que exponho ao cliente e mantenho a serial como chave primária?Como posso gerar o ID para expor de uma maneira sã e eficiente?O checkdigit é necessário?