GARANTIR DESCONTO

Fórum Foreign Key - Um chave primária Varchar (20) e a outra ..... #58705

21/08/2007

0

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:

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

Jpauloss

Responder

Posts

22/08/2007

Pestana_

[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.

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.


Responder

Gostei + 0

22/08/2007

Gandalf.nho

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)


Responder

Gostei + 0

22/08/2007

Jpauloss

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?


Responder

Gostei + 0

22/08/2007

Jpauloss

A estrutura da tabela agora:


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)
);



Responder

Gostei + 0

23/08/2007

Gandalf.nho

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?


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar