Cassiano

Chave estrangeira necessária mas não obrigatória, tem como?

3 posts in this topic

Estou migrando as tabelas antigas para o banco PostgreSQL
Ao importar os clientes, alguns não tem o campo órgão emissor preenchido 

Na tabela Pessoa_Fisica tenho o campo fk_id_OrgaoExpedidor_x_Estado q referencia o órgão emissor na tabela correspondente.

Ai da o erro para os clientes q não tem órgão emissor no RG definido.

O q gostaria seria o seguinte, se tem a informação do órgão emissor pega o código e salva se não tem não salva, não ficar obrigatório

V4CtBRv.png

Share this post


Link to post
Share on other sites

Respondendo a mim mesmo, setei na análise pra permitir Null e funcionou.

1 person likes this

Share this post


Link to post
Share on other sites

Bom Dia,

Temos algumas situações. O mecanismo de relacionamento utilizado nos SGBD normalmente contemplam a obrigatoriedade de que TODOS os filhos tenham pais. Isso para manter a consistência das regras. Em sua grande parte funciona que é uma beleza, mas tem algumas situações em que precisamos utilizar de nossa criatividade. A primeira ideia para manter a consistência temos de definir, em caso de alteração da chave o que o SGBD deve providenciar, regravar em todos ou ainda remover os filhos e finalmente em caso de exclusão do pai o que fazer com os filhos. Essa regra denominamos de "INTEGRIDADE RELACIONAL" e muitos confundem com relacionamento de relatório. 

Vamos a para alguns casos práticos. Pedido, Itens e parcelas. Identificando o Pai, PEDIDO, tem seus filhos ITENS e PARCELAS. Se eu remover o pedido, espero que não fique qualquer "lixo" ou seja de nada me adianta eu ter itens de pedidos inexistentes e o mesmo procedimento para com as parcelas. Agora o seu caso prático, documentos de clientes para órgãos emissores. Se remover um órgão emissor, claro que não quero que seus filhos sejam excluídos, então com toda a segurança devo informar ao SGBD que é a regra é RESTRITA, ou seja, se tentar remover e o cara tiver um único filho que o utilize, impeça tal exclusão. E como fazer para aqueles documentos que não tem um orgão emissor ou mesmo que não tenha sido informados? Simples, cria-se um registro pai com a denominação "SEM ÓRGÃO INFORMADO" e antes de colocar as regras, deve-se fazer um select para que todos os registros que tenham NULL no relacionamento documento <-> órgão emissor seja colocado tal informação. Na aplicação essa opção também pode aparecer no "DROP DOWN" e assim atende-se a todas as regras.

Por fim, um comentário acerca da ANÁLISE. Ela serve como dicionário de dados, mas não serve como garantia de INTEGRIDADE RELACIONAL, mesmo para o HFSQL se você quiser aplicar tal regra tem de executar um comando a parte para depois manipular o registro em si. O que na ANÁLISE eu faço é muitas vezes apontar um relacionamento falso, para que a linguagem me facilite o trabalho de alguns componentes em tempo de projeto (podendo até mesmo permanecer para o tempo de execução) pois como falei, se não for explicitamente chamada a verificação de integridade o WD nada fará com essas regras.

 

Abraços

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now