[firebase-br] chave estrangeira

joel big.rid.listas em gmail.com
Seg Mar 6 07:46:34 -03 2017


Em 2000/2001 quando comecei a utilizar o Interbase 6 / Firebird 1.0 
criei várias tabelas com primary key compostas, naturalmente, gerando fk 
compostas, o que gerava linhas extensas nos meus joins.

Hoje 99% das minhas tabelas têm primary key única ( Id ) e quanto quero 
que o banco não aceite digamos "CodigoAluno CodigoAno" repetido, crio um 
indíce único.


Att.


Em 04/03/2017 08:44, Toninho Eleotério escreveu:
> Oi Rodrigo.
> Bom dia
> Tdo bem?
>
> Não sou especialista em firebird, o que tenho é uma experiência de uso ao
> longo dos anos.
> Trabalho ainda com chave estrangeira composta, não sei se o uso é
> incentivado ainda nos anos mais atuais, o que tenho ouvido falar é sobre
> chave cega, mas vamos ao seu problema.
>
> Usando chave composta o que se espera é exatamente o que vc quer, assim: (e
> tenham liberdade para me corrigir, por favor, como disse não sou
> especialista)
>
> Vamos dar um exemplo em linguagem Normal, portugues:
> Tabela  N- Notas com a seguinte chave primaria
> Chave Primaria(CodigoAluno, CodigoAno, Turno, Serie, Turma, CodigoCategoria)
> Chave Estrangeira de N para E(CodigoAluno, CodigoAno, Turno, Serie, Turma,
> CodigoCategoria)
>
> Tabela E - Matriculados
> CodigoAluno, CodigoAno, Turno, Serie, Turma, CodigoCategoria,
> NumAlunoNaTurma
> Chave Primaria(CodigoAluno, CodigoAno, Turno, Serie, Turma,
> CodigoCategoria) e veja que NumAlunoNaTurma não faz parte da chave pois
> poderá mudar ao longo do ano letivo.
>
> Então vamos nós.
> Se tentar inserir um registro em N, com valores para os campos que não
> existem em E, é lançado um erro, garantindo a integridade referencial .
> Se eu tentar inserir um valor nulo, só vai aceitar se no meu banco eu
> estiver permitindo valores nulos, mas como os campos são para chave
> estrangeira, normalmente o banco não aceita nulos.
>
> Com relação a apenas uma parte dos campos serem não nulos, acredito que
> deveria ocorrer um erro, uma vez que a ideia da integridade é a atomicidade
> das informações, no caso a chave composta inteira.
>
> Não sei se te ajudei muito.
> Qualquer dúvida manda aí ok?
>
>
>
>
>
>
> Bom dia
> Tudo bem?
>
>
>
> Favor confirmar recebimento deste email.
>
> Atenciosamente,
> Antonio Marcos Eleotério da Silva
>
> Telefones: (32) 3222-5695
>                  (32) 9 8856-3706
>
>
> Em 3 de março de 2017 09:55, Rodrigo Arcoverde <rodrigo.arcoverde em gmail.com>
> escreveu:
>
>> Pessoal, bom dia.
>>
>> Estou com uma dúvida com relação a criação de chaves estrangeiras
>> compostas. Me ocorre que uma chave estrangeira serve para garantir que um
>> determinado conjunto de campos da tabela A possui uma correspondência exata
>> em uma chave primária (neste caso composta) na tabela B. Se todos os campos
>> da chave estrangeira na tabela A são não nulos, a verificação é feita na
>> chave primária da tabela B. Se todos os campos da chave estrangeira da
>> tabela A são nulos, não ocorre erro, pois não há a necessidade de validação
>> da integridade referencial. No entanto, se apenas uma parte dos campos da
>> chave estrangeira na tabela A for não nulo, como isso funciona no firebird
>> 2.5 e no 3.0? Estava validando um código para alterar o metadado de um
>> banco e poderia jurar que isso não ia funcionar, mas está rodando e não dá
>> erro de validação da chave estrangeira nesta situação. Gostaria de entender
>> melhor este processo para manter a chave estrangeira como proposto pela
>> minha equipe ou se tratamos isso nas triggers. Obrigado.
>>
>> Att,
>> Rodrigo Arcoverde
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://www.firebase.com.br/
>> pesquisa_lista.html
>>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://www.firebase.com.br/pesquisa_lista.html





Mais detalhes sobre a lista de discussão lista