Em SQL, o conceito de chaves estrangeiras é importante e pode ser encontrado em todos os bancos de dados utilizados na indústria. A ideia principal é impedir que seu banco de dados PostgreSQL armazene dados inconsistentes, aplicando restrições garantindo a correção de suas tabelas (pelo menos no que diz respeito às relações entre objetos). A integridade referencial é, portanto, um dos conceitos mais importantes já inventados nela.

no entanto, chaves estrangeiras introduzirão alguns problemas que você deve cuidar ao escrever aplicativos. Se não houver chaves estrangeiras, você pode inserir dados em qualquer tabela em qualquer ordem. PostgreSQL não se importa. No entanto, se uma chave estrangeira estiver em vigor, a ordem começa a importar (pelo menos em um cenário típico, mas mais sobre isso mais tarde).

chaves Estrangeiras e a ordem

Para mostrar a importância da ordem, temos de criar um modelo de dados de primeira:

queremos armazenar moedas, produtos, bem como descrições dos produtos. Basicamente, é um modelo de dados muito simples. Vamos ver se por acaso inserimos na tabela do produto:

logicamente, a primeira inserção falhará porque a moeda número 1 ainda não existe. Se quisermos inserir, temos que usar um valor nulo (= moeda desconhecida). Em ordem de palavras: temos que preencher a tabela de moeda primeiro, depois inserir locais e assim por diante. A ordem importa no caso padrão.

determinar a ordem de inserção correta para chaves estrangeiras

se você tiver que começar a usar um modelo de dados existente, pode ser um pouco difícil envolver sua cabeça em torno deste material. Preencher um modelo de dados vazio pode ser um pouco complicado. Então, por que não escrever uma consulta nos dizendo a ordem em que devemos inserir dados?

bem, aqui está aquela consulta mágica…

a consulta não é trivial de ler, mas fiz o meu melhor para documentá-la um pouco. Basicamente, as tabelas do sistema PostgreSQL têm todas as informações necessárias para determinar a ordem correta. Aqui está a saída:

 table_name | level-----------------+------- t_currency | 1 t_location | 1 t_product | 2 t_product_desc | 3 t_product_stock | 3(5 rows)

como você pode ver, a consulta nos deu corretamente as tabelas na ordem desejada. Primeiro, temos que inserir em todas as tabelas no nível um e assim por diante. Se mantivermos essa ordem, a integridade referencial sempre será garantida (assumindo que os dados estão corretos).

fazendo uso de restrições “inicialmente diferidas”

em alguns casos, a ordem de inserção pode ser uma coisa desagradável para lidar. E se tivéssemos os meios para dizer ao PostgreSQL para ignorar o pedido e verificar a integridade no commit? Isso é exatamente o que “inicialmente diferido” faz. Aqui está como funciona:

neste caso, podemos modificar os dados em qualquer ordem que quisermos. Contanto que a integridade esteja intacta no final da transação, o PostgreSQL está perfeitamente bem. O PostgreSQL adiará a verificação de restrição e tirará algum fardo do desenvolvedor.

Finalmente …

Se você quiser saber mais sobre SQL avançado, você pode querer dar uma olhada no meu blog sobre algumas mais avançadas de windowing functions (com laços). Então coloque sua gravata e Leia para saber mais.

Deixe uma resposta

O seu endereço de email não será publicado.