[firebase-br] Chave Primaria e Chave Secundária Compostas

Forrest® fernando.bg em gmail.com
Qua Jan 18 09:09:05 -03 2012


Em 17/01/2012 19:18, welder escreveu:
> CREATE TABLE PEDIDOS_ITENS (
>      CODIGO INTEGER NOT NULL,
>      PED_CODIGO INTEGER NOT NULL,
>      PROD_CODIGO INTEGER NOT NULL,
>      QTDE DOUBLE PRECISION,
>      VALOR DOUBLE PRECISION);
> alter table PEDIDOS_ITENS
> add constraint PK_PEDIDOS_ITENS
> primary key (CODIGO,PED_CODIGO,PROD_CODIGO);
> *alter table PEDIDOS_ITENS*
> *add constraint FK_PEDIDOS_ITENS_1*
> *foreign key (PED_CODIGO)*
> *references PEDIDOS(CODIGO,EMP_CODIGO);*
>
> Ao rodar o ultimo script (em negrito) ocorre :


Bom dia

Na tabela pedidos itens você terá que ter o campo emp_codigo também pois ele faz parte da chave da tabela pedidos que você está tentando fazer a 
referencia. deveria ficar assim a tabela de itens.


CREATE TABLE PEDIDOS_ITENS (
      CODIGO INTEGER NOT NULL,
      PED_CODIGO INTEGER NOT NULL,
      EMP_CODIGO INTEGER NOT NULL,
      PROD_CODIGO INTEGER NOT NULL,
      QTDE DOUBLE PRECISION,
      VALOR DOUBLE PRECISION);
alter table PEDIDOS_ITENS add constraint PK_PEDIDOS_ITENS primary key (CODIGO,PED_CODIGO, EMP_CODIGO,PROD_CODIGO);
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 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.

T++++++++++++++++







Mais detalhes sobre a lista de discussão lista