Foreign Key...

Firebird

14/07/2003

Olá,
Estou começando a programar no interbase e estou com algumas dúvidas...

Gostaria de saber se existe a possibilidade de criar uma chave estrangeira em uma tabela com chave composta conforme a descricao nas tabelas abaixo.

CREATE TABLE AREA
(
COD_AREANTEGER NOT NULL,
DSC_MACROVARCHAR(50) CHARACTER SET WIN1252 NOT NULL,
CONSTRAINT PK_AREA PRIMARY KEY (COD_AREA));

CREATE TABLE MACRO
(
COD_AREAINTEGER NOT NULL,
COD_MACROINTEGER NOT NULL,
DSC_MACROVARCHAR(50) CHARACTER SET WIN1252 NOT NULL,
CONSTRAINT PK_MACRO PRIMARY KEY (COD_AREA, COD_MACRO));
ALTER TABLE MACRO ADD CONSTRAINT FK_MACRO FOREIGN KEY (COD_AREA) REFERENCES AREA (COD_AREA);

CREATE TABLE DESC
(
COD_AREAINTEGER NOT NULL,
COD_MACROINTEGER NOT NULL,
COD_DESCINTEGER NOT NULL,
DSC_DESCVARCHAR(50) CHARACTER SET WIN1252 NOT NULL,
CONSTRAINT PK_MACRO PRIMARY KEY (COD_AREA, COD_MACRO, COD_DESC));
ALTER TABLE DESC ADD CONSTRAINT FK_DESC_AR FOREIGN KEY (COD_AREA) REFERENCES AREA (COD_AREA);
ALTER TABLE DESC ADD CONSTRAINT FK_DESC_MA FOREIGN KEY (COD_MACRO) REFERENCES MACRO (COD_MACRO);

Neste último ocorre um erro dizendo que esta chave não é unica e não gera o índice desejado.

Se alguém puder me dar alguma dica eu agradeço muito...


BetoSerra


Betoserra

Betoserra

Curtidas 0

Respostas

Midas

Midas

14/07/2003

O NOME QUE ESTA USANDO PARA A TABELA É UM NOME INTERNO DO INTERBASE .. TENTE MUDA-LO


GOSTEI 0
Afarias

Afarias

14/07/2003

Se, TABELA MACRO -> PK = (COD_AREA, COD_MACRO)

então:

ALTER TABLE DESC ADD CONSTRAINT FK_DESC FOREIGN KEY (COD_AREA,COD_MACRO) REFERENCES AREA (COD_AREA,COD_MACRO);

ou simplesmente:

ALTER TABLE DESC ADD CONSTRAINT FK_DESC FOREIGN KEY (COD_AREA,COD_MACRO) REFERENCES AREA;


Numa relação (qualquer banco de dados relacional) a CHAVE ESTRANGEIRA (FK) tem q ser exatamente igual a CHAVE PRIMÁRIA (PK)

:idea: más na minha opnião, não é boa prática ter ´tabelas´ com com chave primária composta.


Abraço


GOSTEI 0
POSTAR