Foreign Key...
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
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
Curtidas 0
Respostas
Midas
14/07/2003
O NOME QUE ESTA USANDO PARA A TABELA É UM NOME INTERNO DO INTERBASE .. TENTE MUDA-LO
GOSTEI 0
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
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