MSSQL创建父子表设置外键时报被引用表无主键或候选键问题
报错原因
- 外键约束的核心要求是:被引用的列必须是对应表的主键或唯一候选键。你当前
WEATHER_FORECASTS表的主键是WEATHER_ID和TOWN_ID组成的联合主键,单独的WEATHER_ID、TOWN_ID既不是主键也没有设置唯一约束,自然无法被其他表作为外键引用。 - 你当前的表关联逻辑完全倒置:业务逻辑里
WEATHER(天气类型表)、TOWNS(城镇表)属于基础主表,WEATHER_FORECASTS(天气预报表)是关联两个主表的业务子表,应该是子表引用主表的主键,而非主表反过来引用子表的字段。
修复方案
调整建表顺序和外键关联方向,先创建两个基础主表,再创建天气预报关联表,修正后的SQL如下:
-- 1. 创建天气类型主表 CREATE TABLE WEATHER( WEATHER_ID tinyint NOT NULL, WEATHER_TYPE varchar(20) NOT NULL, PRIMARY KEY(WEATHER_ID) ); -- 2. 创建城镇主表 CREATE TABLE TOWNS( TOWN_ID char(2) NOT NULL, TOWN_NAME varchar(20) NOT NULL, PRIMARY KEY(TOWN_ID) ); -- 3. 创建天气预报关联表,关联两个主表的主键 CREATE TABLE WEATHER_FORECASTS( WEATHER_ID tinyint NOT NULL, TOWN_ID char(2) NOT NULL, PRIMARY KEY(WEATHER_ID, TOWN_ID), FOREIGN KEY (WEATHER_ID) REFERENCES WEATHER(WEATHER_ID), FOREIGN KEY (TOWN_ID) REFERENCES TOWNS(TOWN_ID) );
内容的提问来源于stack exchange,提问作者user11848802
相关产品推荐
相关产品推荐

