Adicionando chave estrangeira em múltiplas colunas
-
14-11-2019 - |
Pergunta
Estou tentando criar uma chave estrangeira em duas colunas de uma tabela para apontar para a mesma coluna de outra tabela, mas parece que recebo um erro...
Aqui está o que eu faço:
CREATE TABLE test2 (
ID INT NOT NULL AUTO_INCREMENT,
col1 INT NOT NULL,
col2 INT NOT NULL,
PRIMARY KEY (ID),
CONSTRAINT fk FOREIGN KEY (col1, col2)
REFERENCES test1(ID, ID)
ON UPDATE CASCADE
ON DELETE RESTRICT
) ENGINE=InnoDB;
Mas eu entendo
ERROR 1005 (HY000): Can't create table 'DB.test2' (errno: 150)
Se eu tiver apenas uma coluna, entretanto, a tabela será criada corretamente.
Alguém poderia me indicar onde está o erro?
Obrigado n
Solução
Tentei aqui e obtive o mesmo erro.Mas isso funciona:
CREATE TABLE test2 (
ID INT NOT NULL AUTO_INCREMENT,
col1 INT NOT NULL,
col2 INT NOT NULL,
PRIMARY KEY (ID),
CONSTRAINT fk FOREIGN KEY (col1)
REFERENCES test1(ID)
ON UPDATE CASCADE
ON DELETE RESTRICT,
CONSTRAINT fk2 FOREIGN KEY (col2)
REFERENCES test1(ID)
ON UPDATE CASCADE
ON DELETE RESTRICT
) ENGINE=InnoDB
Sim, eu sei - seu roteiro deve trabalho (mesmo que não pareça fazer muito sentido).No entanto, acho que esta nova versão é melhor.
Outras dicas
O problema parece ser que você está especificando a mesma coluna pai duas vezes na mesma chave estrangeira (ou seja, (ID, ID)).O seguinte deve funcionar:
Create Table Test1
(
PK1 int not null
, PK2 int not null
, Primary Key ( PK1, PK2 )
)
Create Table Test2
(
Id int not null Auto_Increment
, PK1 int not null
, PK2 int not null
, Primary Key ( ID )
, Constraint FK_Test2
Foreign Key ( PK1, PK2 )
References Test1( PK1, PK2 )
)
Se for o caso de você desejar duas colunas em uma tabela filho referenciando a mesma coluna da tabela pai, você deverá adicionar duas referências de chave estrangeira, conforme mostrado por rsenna, pois elas representam duas relações independentes.