Foreign Key - Um chave primária Varchar (20) e a outra .....
Galera Boa noite,
estou com um problema de iniciante.
Tenho um campo de uma tabele que preciso que ela seja um chave estrangeira(Foreign Key) de outra tablela. o nome desse campo é COD_ORDENADO VarChar (20) PK. Na outra tabela que estou tentando colocar está assim: COD_ORDENADO_M Integer. Quando tento fazer a alteração pelo IBExpert da a seguinte mensagem:
O código de alteração é:
[color=red:39f7c76a6e]Como posso resolver?[/color:39f7c76a6e]
Aí vai minha estrutura da tabela 1.
Vai aí a estrutura da tabela 2:
estou com um problema de iniciante.
Tenho um campo de uma tabele que preciso que ela seja um chave estrangeira(Foreign Key) de outra tablela. o nome desse campo é COD_ORDENADO VarChar (20) PK. Na outra tabela que estou tentando colocar está assim: COD_ORDENADO_M Integer. Quando tento fazer a alteração pelo IBExpert da a seguinte mensagem:
This operation is not defined for system tables. unsuccessful metadata update. could not find UNIQUE INDEX with specified columns.
O código de alteração é:
alter table LANCAMENTO_PROJETO add constraint FK_LANCAMENTO_PROJETO_MATERIAL foreign key (COD_ORDENADO_M) references MATERIAL(COD_ORDENADO)
[color=red:39f7c76a6e]Como posso resolver?[/color:39f7c76a6e]
Aí vai minha estrutura da tabela 1.
CREATE GENERATOR SEQ_MATERIAL_ID; CREATE TABLE MATERIAL ( ID_COD INTEGER NOT NULL, COD_ORDENADO VARCHAR(20), DESCRICAO VARCHAR(70) COLLATE PT_BR, UN VARCHAR(2), PRECO_UNITARIO FLOAT, TIPO_CONTA VARCHAR(1) ); ALTER TABLE MATERIAL ADD CONSTRAINT PK_MATERIAL PRIMARY KEY (COD_ORDENADO, ID_COD);
Vai aí a estrutura da tabela 2:
CREATE GENERATOR SEQ_LANCAMENTO_PROJETO_ID; CREATE TABLE LANCAMENTO_PROJETO ( ID_LANCAMENTO_PROJETO INTEGER NOT NULL, ID_PROJETO INTEGER NOT NULL, COD_ORDENADO_M INTEGER, QUANTIDADE_M VARCHAR(20), TOTAL FLOAT ); ALTER TABLE LANCAMENTO_PROJETO ADD CONSTRAINT PK_LANCAMENTO_PROJETO PRIMARY KEY (ID_LANCAMENTO_PROJETO); ALTER TABLE LANCAMENTO_PROJETO ADD CONSTRAINT FK_LANCAMENTO_PROJETO_PROJETO FOREIGN KEY (ID_PROJETO) REFERENCES PROJETO (ID_PROJETO) USING INDEX FK_LANCAMENTO_PROJETO_1;
Jpauloss
Curtidas 0
Respostas
Pestana_
21/08/2007
[u:c32cc4a7e1]pelo o que eu sei[/u:c32cc4a7e1], não pode-se fazer uma referência a uma outra tabela com tipos de dados diferentes.
você precisa deixar os tipos dados dos campos iguais, para então utilizar o foreign key.
se eu estiver errado, por favor alguem me corrija!
Pestana.
material > Cod_Ordenado Varchar(20);
Lancamento_Projeto > Cod_Ordenado_M Integer;
você precisa deixar os tipos dados dos campos iguais, para então utilizar o foreign key.
se eu estiver errado, por favor alguem me corrija!
Pestana.
GOSTEI 0
Gandalf.nho
21/08/2007
Além de serem do mesmo tipo, o FK deve ter um índice único (PK), o que não é o caso da sua tabela (a PK tem 2 campos, então os 2 campos deveriam estar envolvidos no relacionamento)
GOSTEI 0
Jpauloss
21/08/2007
Além de serem do mesmo tipo, o FK deve ter um índice único (PK), o que não é o caso da sua tabela (a PK tem 2 campos, então os 2 campos deveriam estar envolvidos no relacionamento)
Coloquei do mesmo tipo e fazendo referencia as duas chaves primárias da outra tabela só que ainda está dando erro.
This operation is not defined for system tables. Dynamic SQL Error. SQL error code = -607. Invalid command. FOREIGN KEY column count does not match PRIMARY KEY.
alter table LANCAMENTO_PROJETO add constraint FK_LANCAMENTO_PROJETO_MATERIAL foreign key (COD_ORDENADO_M) references MATERIAL(COD_ORDENADO,ID_COD)
Que faço?
GOSTEI 0
Jpauloss
21/08/2007
A estrutura da tabela agora:
e da outra tabela:
CREATE GENERATOR SEQ_LANCAMENTO_PROJETO_ID; CREATE TABLE LANCAMENTO_PROJETO ( ID_LANCAMENTO_PROJETO INTEGER NOT NULL, ID_PROJETO INTEGER NOT NULL, COD_ORDENADO_M VARCHAR(20), QUANTIDADE_M VARCHAR(20), TOTAL FLOAT );
e da outra tabela:
CREATE GENERATOR SEQ_MATERIAL_ID; CREATE TABLE MATERIAL ( ID_COD INTEGER NOT NULL, COD_ORDENADO VARCHAR(20), DESCRICAO VARCHAR(70) COLLATE PT_BR, UN VARCHAR(2), PRECO_UNITARIO FLOAT, TIPO_CONTA VARCHAR(1) );
GOSTEI 0
Gandalf.nho
21/08/2007
Você não pode relacionar um campo numa tabela com dois campos na outra, sempre tem que ser o mesmo nº de campos. E pq um campo é Integer e o outro varchar?
GOSTEI 0