键约束中缺少索引



我有一个错误的约束,它是特定的索引fk_Pedido4,最后一段,它将帮助很多,如果有人可以帮助。


CREATE TABLE Cliente (
CPF real PRIMARY KEY,
Nome Varchar (55),
Endereco VARCHAR (55),
Contato real
);
CREATE TABLE Funcionarios (
Registro INT PRIMARY KEY,
Carteira_Trabalho REAL,
Nome varchar(55),
Contato REAL,
CNH REAL,
Tipo_Funcionario INT
);
CREATE TABLE Pizza (
Codigo INT PRIMARY KEY,
Sabores CHAR,
Ingredientes CHAR
);
CREATE TABLE Pedido (
Numero INT,
Observacoes VARCHAR(55),
Cliente real,
Data DATE,
Hora TIME,
Pizza INT,
Codigo_Cozinheiro INT,
Codigo_Atendente INT,
Codigo_Entregador INT,
PRIMARY KEY (Numero, Data)
);

ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_2
FOREIGN KEY (Cliente)
REFERENCES Cliente (CPF)
ON DELETE RESTRICT;

ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_3
FOREIGN KEY (Pizza)
REFERENCES Pizza (Codigo)
ON DELETE RESTRICT;

<sub>ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_4
FOREIGN KEY (Codigo_Cozinheiro, Codigo_Atendente, Codigo_Entregador)
REFERENCES Funcionarios (Registro, Registro, Registro)
ON DELETE CASCADE;</sub>

我只是期待一个语法错误,我没有看到由于缺乏经验的这种语言…

外键表示父表中必须只有一行具有给定键。

ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_4
FOREIGN KEY (Codigo_Cozinheiro, Codigo_Atendente, Codigo_Entregador)
REFERENCES Funcionarios (Registro, Registro, Registro)
ON DELETE CASCADE;

这里你说父表functiononario必须有一行,它的键(Registro, Registro, Registro)匹配Pedido (Codigo_Cozinheiro, Codigo_Atendente, codigo_enterregador)。首先,在functiononario中没有键(Registro, Registro, Registro)。键是单列(Registro)。即使我们创建了这样一个键,也不会有Registro同时匹配Codigo_Cozinheiro、Codigo_Atendente和codigo_enterregador的行。

您希望每个codigo都有一个外键,因此Codigo_Cozinheiro必须在functiononarios中有一个匹配,Codigo_Atendente必须在functiononarios中有一个匹配,codigo_entergador必须在functiononarios中有一个匹配。

ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_4
FOREIGN KEY (Codigo_Cozinheiro)
REFERENCES Funcionarios (Registro)
ON DELETE CASCADE;
ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_5
FOREIGN KEY (Codigo_Atendente)
REFERENCES Funcionarios (Registro)
ON DELETE CASCADE;
ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_6
FOREIGN KEY (Codigo_Entregador)
REFERENCES Funcionarios (Registro)
ON DELETE CASCADE;

最新更新