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

游戏排行榜SQL表创建遇外键约束错误,求正确关联方案

问题原因

错误提示的核心是:Names表的主键是(name, ip)复合主键,单独的name字段没有唯一约束,而你在Scores里创建的name_fk外键只引用了Names.name,数据库无法找到匹配的唯一约束来保证关联的合法性(同一个name可能对应多个不同的ip)。

修正方案

根据你的需求(每个score关联某IP下的一个name),Scores需要通过复合外键关联Names的复合主键,而不是分开关联name和ip。修改后的SQL如下:

CREATE TABLE IPs(
    ip CIDR NOT NULL,
    PRIMARY KEY(ip)
);
    
CREATE TABLE Names(
    name VARCHAR(25) NOT NULL,
    ip CIDR NOT NULL,
    CONSTRAINT ip_fk FOREIGN KEY(ip) REFERENCES IPs(ip), 
    PRIMARY KEY(name, ip)
);

CREATE TABLE Scores(
    score INT NOT NULL,
    name VARCHAR(25) NOT NULL,
    ip CIDR NOT NULL,
    created_at TIMESTAMP NOT NULL,
    -- 用复合外键关联Names的复合主键,确保关联的是某IP下的特定name
    CONSTRAINT name_ip_fk FOREIGN KEY(name, ip) REFERENCES Names(name, ip),
    PRIMARY KEY(score, name, ip)
);
额外说明
  1. 复合外键(name, ip)完全匹配Names的复合主键,确保Scores里的每一条记录都对应Names中存在的「IP+名称」组合,符合你的业务需求。
  2. 不需要再单独给ip创建外键关联IPs,因为Names已经关联了IPs,Scores通过Names间接关联到IPs,数据一致性已经得到保证。如果确实需要直接关联,也可以保留,但通常没必要。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:40:36