You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

外键约束FK_Pedido_4索引报错求助:SQL语法问题排查

问题分析与修正方案:FK_Pedido_4的外键错误

核心错误点

你在创建FK_Pedido_4时,试图用Pedido表的三个字段(Codigo_Cozinheiro、Codigo_Atendente、Codigo_Entregador)同时关联Funcionarios表的同一个Registro字段,这不符合SQL外键规则:

  • 复合外键要求父表存在对应的复合唯一约束/主键,但Funcionarios的主键是单个字段Registro,不满足复合外键的关联条件。
  • 从业务逻辑看,这三个字段分别对应不同的员工角色(厨师、接待员、配送员),应该各自独立关联员工表的主键,而不是作为一组复合外键关联同一个字段。

修正后的代码

删除原来的FK_Pedido_4语句,替换为三个独立的外键约束:

-- 为厨师字段创建外键
ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_Cozinheiro
    FOREIGN KEY (Codigo_Cozinheiro)
    REFERENCES Funcionarios (Registro)
    ON DELETE CASCADE;

-- 为接待员字段创建外键
ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_Atendente
    FOREIGN KEY (Codigo_Atendente)
    REFERENCES Funcionarios (Registro)
    ON DELETE CASCADE;

-- 为配送员字段创建外键
ALTER TABLE Pedido ADD CONSTRAINT FK_Pedido_Entregador
    FOREIGN KEY (Codigo_Entregador)
    REFERENCES Funcionarios (Registro)
    ON DELETE CASCADE;

额外优化建议

除了外键问题,你的表结构还有一些可以优化的地方:

  • Cliente表的CPF、Contato字段用REAL类型不合适,浮点型会丢失精度,建议改用VARCHAR(14)(CPF带分隔符)或CHAR(11)(纯数字),电话号码同理用字符串类型。
  • Pizza表的Sabores、Ingredientes字段用CHAR类型长度默认只有1,完全不够存储内容,建议改成VARCHAR(255)。
  • Funcionarios表的Carteira_Trabalho、CNH字段同样不适合用REAL,改用字符串类型更合理。

内容的提问来源于stack exchange,提问作者Marcos Felicio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:05:47