【发布时间】:2022-01-07 15:00:59
【问题描述】:
我正在创建 3 个表(1 个父表和 2 个子表)并尝试设置外键,但出现此错误:
引用的表中没有主键或候选键。
CREATE TABLE WEATHER_FORECASTS(
WEATHER_ID tinyint NOT NULL,
TOWN_ID char(2) NOT NULL,
PRIMARY KEY(WEATHER_ID, TOWN_ID)
);
CREATE TABLE WEATHER(
WEATHER_ID tinyint NOT NULL REFERENCES WEATHER_FORECASTS(WEATHER_ID),
WEATHER_TYPE varchar(20) NOT NULL
PRIMARY KEY(WEATHER_ID)
);
CREATE TABLE TOWNS(
TOWN_ID char(2) NOT NULL REFERENCES WEATHER_FORECASTS(TOWN_ID),
TOWN_NAME varchar(20) NOT NULL
);
【问题讨论】:
-
您的“主键”是
WEATHER_ID和TOWN_ID的复合词,请参阅此了解更多信息:stackoverflow.com/questions/17879735/… -
您似乎误解了外键约束在哪一端。这是引用的一面,而不是被引用的一面!所以大概你想在
weather_forecasts中放置两个(不同的)外键约束,引用weather或towns。 (但是towns也仍然错过了一个(主)键。可能你在那里忘记了town_id上的主键约束。)如果这不是你对概念的误解,你需要详细说明你真正想要的实现(在逻辑层面上,而不是非工作解决方案),因为那时还不清楚。
标签: sql sql-server tsql