none
Como substituir o código que foi apagado RRS feed

  • Pergunta

  • Se tenho três cadastros no banco de dados:

    1 João

    2 Maria

    3 Carlos

    quando apago o segundo, fica o seguinte:

    1 João

    3 Carlos

    Minha dúvida: Como faço para que o terceiro fique com a posição 2:

    1 João

    2 Carlos

    Sei que pode ser uma pergunta muito tosca, mas sou novato e não achei nada que me ajudasse.

    Obrigado!

    domingo, 7 de outubro de 2012 03:33

Respostas

  • Kjuzin,

    Sua lógica tem sentido mas vamos para para pensar em alguns pontos:

    1. Não teremos sempre uma tabela com apenas alguns registros. Pense numa tabela com pelo menos uns 10.000 registros. Se eu apagar o registro de código 50, eu teria que ler todos os próximos 9.550 registros e alterá-los. Considerando que no meio do caminho eu possa ainda ter outros gaps e teria que seguir o mesmo procedimento de atualização.

    2. Outro problema ainda mais grave. Considere que seu campo código seja um Chave Primária e tenha relacionamentos com outras tabelas. Todas as tabelas relacionadas teriam que ter seus código alterados pois, onde eu tinha um código 51 agora vai ser 50 e todas as referências tem que ser alteradas, caso contrário, teria registros "orfãos" e estaríamos quebrando a integridade referencial da base.

    Se você estiver trabalhando com a propriedade IDENTITY, há uma maneira de atualizar o registro, mas é pouco utilizada pelos pontos que citei acima.

    Em resumo, não é prático realizar este tipo de atividade e quando um registro é apagado, deixamos a sequência com um "buraco" mesmo e seguimos em frente.

    Espero ter ajudado.


    Erickson Ricci
    Microsoft MCITP 2008 Admin, MCTS SQL Server 2005, 2008
    Visite o meu blog: http://ericksonricci.wordpress.com
    Me siga no twitter: @EricksonRicci
    LinkedIN: http://br.linkedin.com/in/ericksonricci
    e-mail: ericksonfabricio@gmail.com
    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.**

    domingo, 7 de outubro de 2012 17:34

Todas as Respostas

  • Kjuzin,

    Sua lógica tem sentido mas vamos para para pensar em alguns pontos:

    1. Não teremos sempre uma tabela com apenas alguns registros. Pense numa tabela com pelo menos uns 10.000 registros. Se eu apagar o registro de código 50, eu teria que ler todos os próximos 9.550 registros e alterá-los. Considerando que no meio do caminho eu possa ainda ter outros gaps e teria que seguir o mesmo procedimento de atualização.

    2. Outro problema ainda mais grave. Considere que seu campo código seja um Chave Primária e tenha relacionamentos com outras tabelas. Todas as tabelas relacionadas teriam que ter seus código alterados pois, onde eu tinha um código 51 agora vai ser 50 e todas as referências tem que ser alteradas, caso contrário, teria registros "orfãos" e estaríamos quebrando a integridade referencial da base.

    Se você estiver trabalhando com a propriedade IDENTITY, há uma maneira de atualizar o registro, mas é pouco utilizada pelos pontos que citei acima.

    Em resumo, não é prático realizar este tipo de atividade e quando um registro é apagado, deixamos a sequência com um "buraco" mesmo e seguimos em frente.

    Espero ter ajudado.


    Erickson Ricci
    Microsoft MCITP 2008 Admin, MCTS SQL Server 2005, 2008
    Visite o meu blog: http://ericksonricci.wordpress.com
    Me siga no twitter: @EricksonRicci
    LinkedIN: http://br.linkedin.com/in/ericksonricci
    e-mail: ericksonfabricio@gmail.com
    **Ajude a melhorar o sistema de busca do fórum.Marque a(s) resposta(s) que foram úteis**
    **Se esta resposta solucionou a questão, então, por favor, marque-a como resposta.**

    domingo, 7 de outubro de 2012 17:34
  • Alem do que o Erickson disse, talvez no futuro voce possa precisar de um historico dos cadastros que tinha, ao inves de apagar não sei melhor criar um campo flag de ativo/inativo, assim voce manteria o historico e não ficaria com os buracos no seu campo sequencial.

    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    segunda-feira, 8 de outubro de 2012 13:38
  • Alexandre,

    Poxa vida, uma boa ideia isso mesmo, outra possibilidade que poderíamos pensar neste caso, seria ter uma tabela de histórico mesmo, fazer o arquivamento dos dados que estão sendo manipulados, eu já tive esta necessidade em um projeto onde as linhas manipuladas erram arquivadas em outra tabela.

    Além disso, um cenário parecido foi utilizar o CDC para este tipo histórico.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    segunda-feira, 8 de outubro de 2012 13:50
  • Obrigado Erickson, era o que eu precisava saber.
    terça-feira, 9 de outubro de 2012 00:14