[firebase-br] chave estrangeira

Rodrigo Arcoverde rodrigo.arcoverde em gmail.com
Seg Mar 6 08:07:48 -03 2017


Quando o banco foi desenvolvido, a aplicação tinha como requisito a
possibilidade ser instalada em clientes. Os bancos do cliente e do nosso
servidor não eram sincronizados em tempo real, o processo era feito
semanalmente ou até mesmo mensalmente por um aplicativo proprietário. Sendo
assim, a chave primária composta das tabelas se tornou necessárias e as
mantemos até hoje,

Em 6 de março de 2017 07:46, joel <big.rid.listas em gmail.com> escreveu:

> 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
>>>>>> 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/pes
>> quisa_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/pes
> quisa_lista.html
>



Mais detalhes sobre a lista de discussão lista