Fórum Campo Autoincremento fora de sequência #613904
27/01/2021
0
Deixa eu perguntar: Eu verifiquei que em todos os meus sistemas, o campo ID não obedece uma sequência lógica (1,2,3,4...). Na minha base o campo ID está definido como "IDENTITY(1,1) NOT NULL," e PK. Na primeira inserção, começa certinho no número 1 e vai obedecendo a sequência normalmente. De repente, num dia qualquer, eu faço uma nova inserção e qdo vou verificar já não está mais sequência. Por exemplo: num dia anterior a ultima inserção era 336 e no outro dia quando faço uma nova inserção o numero já pulou para 1321. Porque acontece isso? Como posso resolver isso?
Leodevir Mauricio
Curtir tópico
+ 0
Responder
Post mais votado
27/01/2021
esse tipo de campo não deve ser 'controlado'.
normalmente ele sequer é apresentado e serve somente para identificar um registro na tabela. assim evita chaves estrangeiras compostas, melhorando a performance ao relacionar registros entre tabelas.
de qualquer modo, acredito que dependa da forma como você implementou a inclusão.
se ao incluir um registro (antes de qualquer confirmação do usuário) o procedimento já esteja sendo efetuado diretamente no banco de dados, o ID será incrementado, porque o SGBDR precisa prevenir uma gravação simultânea, então já incrementa o registro para que não haja duplicidade.
o problema é que dessa forma, se o usuário cancelar a inclusão, o ID será 'perdido' e, ao efetuar uma nova inclusão, será obtido o número seguinte àquele perdido.
o ideal é que a inclusão no software seja apenas 'lógica'. assim, somente ao confirmar a gravação (post, commit) o banco fará o incremento do ID. o problema disto é que você só conhecerá o ID após efetivar a gravação.
não sei se me fiz entender...
normalmente ele sequer é apresentado e serve somente para identificar um registro na tabela. assim evita chaves estrangeiras compostas, melhorando a performance ao relacionar registros entre tabelas.
de qualquer modo, acredito que dependa da forma como você implementou a inclusão.
se ao incluir um registro (antes de qualquer confirmação do usuário) o procedimento já esteja sendo efetuado diretamente no banco de dados, o ID será incrementado, porque o SGBDR precisa prevenir uma gravação simultânea, então já incrementa o registro para que não haja duplicidade.
o problema é que dessa forma, se o usuário cancelar a inclusão, o ID será 'perdido' e, ao efetuar uma nova inclusão, será obtido o número seguinte àquele perdido.
o ideal é que a inclusão no software seja apenas 'lógica'. assim, somente ao confirmar a gravação (post, commit) o banco fará o incremento do ID. o problema disto é que você só conhecerá o ID após efetivar a gravação.
não sei se me fiz entender...
Emerson Nascimento
Responder
Gostei + 2
Mais Posts
11/02/2021
Leodevir Mauricio
esse tipo de campo não deve ser ''controlado''.
normalmente ele sequer é apresentado e serve somente para identificar um registro na tabela. assim evita chaves estrangeiras compostas, melhorando a performance ao relacionar registros entre tabelas.
de qualquer modo, acredito que dependa da forma como você implementou a inclusão.
se ao incluir um registro (antes de qualquer confirmação do usuário) o procedimento já esteja sendo efetuado diretamente no banco de dados, o ID será incrementado, porque o SGBDR precisa prevenir uma gravação simultânea, então já incrementa o registro para que não haja duplicidade.
o problema é que dessa forma, se o usuário cancelar a inclusão, o ID será ''perdido'' e, ao efetuar uma nova inclusão, será obtido o número seguinte àquele perdido.
o ideal é que a inclusão no software seja apenas ''lógica''. assim, somente ao confirmar a gravação (post, commit) o banco fará o incremento do ID. o problema disto é que você só conhecerá o ID após efetivar a gravação.
não sei se me fiz entender...
normalmente ele sequer é apresentado e serve somente para identificar um registro na tabela. assim evita chaves estrangeiras compostas, melhorando a performance ao relacionar registros entre tabelas.
de qualquer modo, acredito que dependa da forma como você implementou a inclusão.
se ao incluir um registro (antes de qualquer confirmação do usuário) o procedimento já esteja sendo efetuado diretamente no banco de dados, o ID será incrementado, porque o SGBDR precisa prevenir uma gravação simultânea, então já incrementa o registro para que não haja duplicidade.
o problema é que dessa forma, se o usuário cancelar a inclusão, o ID será ''perdido'' e, ao efetuar uma nova inclusão, será obtido o número seguinte àquele perdido.
o ideal é que a inclusão no software seja apenas ''lógica''. assim, somente ao confirmar a gravação (post, commit) o banco fará o incremento do ID. o problema disto é que você só conhecerá o ID após efetivar a gravação.
não sei se me fiz entender...
Obrigado queridão, entendi sim! Vou mudar o modo de tratamento no meu banco antes de fazer a inserção.
Valeu!
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)