[firebase-br] Chave Primaria e Chave Secundária Compostas
Forrest®
fernando.bg em gmail.com
Qua Jan 18 13:37:05 -03 2012
Em 18/01/2012 09:34, welder escreveu:
> *alter table PEDIDOS_ITENS add constraint FK_PEDIDOS_ITENS_1 foreign key
> (PED_CODIGO, EMP_CODIGO) references PEDIDOS(CODIGO,EMP_CODIGO);*
>
> Agora vc pode tentar fazer a chave estrangeira dessa forma não sei se o FB
> vai permitir não testei.
>
> *alter table PEDIDOS_ITENS add constraint FK_PEDIDOS_ITENS_1 foreign key
> (PED_CODIGO) references PEDIDOS(CODIGO);*
> Mas não seria mas necessário isso aqui porque você já fez no script anterio
Isso mesmo no anterior eu coloquei como fazer a chave estrangeira da maneira correta utilizando os dois campos como chave.
Só demonstrei o que talvez poderia tentar fazer se não tiver o campo EMP_CODIGO na tabela de itens entendeu agora, mas o correto é ter esse campo e
colocar a chave completa, como disse não sei se o FB iria permitir uma FK com parte da chave só.
> Mas mesmo que permita vejo um problema nisso, caso você tenha dois pedidos
> com o mesmo número ele vai trazer os itens dos dois pedidos independente da
> empresas. Ah note que incluí o código da empresa na chave primária da
> tabela de itens.
> *Mas criando a chave estrangeira incluindo o EMP_CODIGO não irá trazer
> somente os pedidos de uma empresa?*
Na verdade a chave estrangeira contendo o EMP_CODIGO vai garantir a integridade de que aquele item pertence a tal empresa e tal pedido.
Talvez você esteja fazendo confusão por pensar na consulta para trazer os resultados. Se precisar na sua consulta trazer todos os pedidos
independentes de empresas você consegue fazer. Se não colocar o campo da empresa nos itens quando fazer uma consulta não tem como saber de que empresa
pertence tal item vou tentar dar um exemplo.
Vamos supor que tem os seguintes pedidos.
Pedidos empresa itens descrição
1 1 1 item 1 emp 1 ped 1
1 1 2 item 2 emp 1 ped 1
2 1 1 item 1 emp 1 ped 2
1 2 1 item 1 emp 2 ped 1
1 3 1 item 1 emp 3 ped 1
Se eu faço o select
SELECT PEDIDO, EMPRESA, ITEM, DESCRIÇAO
FROM ITENS
WHERE (CODPEDIDO = 1) AND (CODEMPRESA = 1)
O resultado seria :
Pedidos empresa itens descrição
1 1 1 item 1 emp 1 ped 1
1 1 2 item 2 emp 1 ped 1
caso não tenha a amarração da chave do campo empresa como você saberia a qual empresa pertence o item. um select ficaria assim.
SELECT PEDIDO, EMPRESA, ITEM, DESCRIÇAO
FROM ITENS
WHERE (CODPEDIDO = 1)
O resultado seria :
Pedidos empresa itens descrição
1 1 1 item 1 emp 1 ped 1
1 1 2 item 2 emp 1 ped 1
1 2 1 item 1 emp 2 ped 1
1 3 1 item 1 emp 3 ped 1
Bom espero ter conseguido explicar o que pensei mais do que complicado, qualquer coisa é só chamar.
T++++++++++++++
Mais detalhes sobre a lista de discussão lista