Pular para o conteúdo
  • Este tópico contém 2 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 5 meses atrás por Marcio68Almeida.
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #90043
    jacksonsw
    Participante

      Pessoal,
      Aqui na empresa onde trabalho o nosso sistema opera com o banco de dados Oracle e PostgreSQL. Eu administro parte física e o pessoal do desenvolvimento abriu uma enquete de dúvida do por que no Oracle quando é criado uma foreign key não se pode usar a clausula “on update”. Isso no postgresql é permitido.
      Agradeço desde já.

      #90047
      fsitja
      Participante

        É uma questão de design do Oracle. Conceitualmente é considerado que primary keys sejam imutáveis e que disparar um “on update cascade” alterando as chaves primárias em outras tabelas seja errado do ponto de vista de projeto de banco de dados.

        O Tom Kyte no site dele tem algumas opiniões e workarounds para fazer um on update cascade “bacalhau” no Oracle:
        http://asktom.oracle.com/pls/asktom/f?p … 3459616034

        Fica feio… na minha opinião com ou sem workaround, fazer on update cascade seria só em caso de última opção.

        #90077
        Marcio68Almeida
        Participante

          Eu particularmente sou contra esta opção.
          Alterar as chaves de forma cascateada, é extremamente perigoso.
          Em uma situação que passei em uma empresa deixa isso bem simples.
          Digamos que todos os registros de uma determinada cidade (id=x) foram alterados para id=y, porém já existiam registros de id=y.
          Traduzindo, nunca mais poderíamos saber quais os originais e quais os migrados. Como não queriam mudar para “y” e sim para “z”, tivemos que voltar backup de todas as tabelas envolvidas e fazer um trabalho de formiguinha para restaurar tudo.
          É claro que agora existem ferramentas que facilitam este trabalho de recuperação, mas é algo que a maioria dos usuários e desenvolvedores não estão aptos a utilizar…

        Visualizando 3 posts - 1 até 3 (de 3 do total)
        • Você deve fazer login para responder a este tópico.