【发布时间】:2016-04-27 00:41:10
【问题描述】:
我为夏令营创建的数据库遇到了一些困难,特别是在 PK 和 FK 约束方面。当我声明 FK 约束(例如 FOREIGN KEY(PID) 引用 Campers(CamperID))时,我通过 pgAdmin 运行我的代码时遇到错误(我正在使用 PostgreSQL)。我知道,例如,尚未创建 Campers 表,这很可能是部分/全部障碍,但我觉得我的 FK 仍然以某种方式出错。据我了解,FK 是另一个表中的 PK - 但我觉得我的表之间存在一些冗余或断开连接。
我将一些 CREATE 语句的语法放在下面。我不确定我是否会因为我的(有点模糊)问题的质量而受到谴责,但我感到有点失落,并希望得到任何帮助或建议。提前谢谢!
DROP TABLE IF EXISTS People;
CREATE TABLE People (
PID VARCHAR(10) NOT NULL UNIQUE,
FName TEXT NOT NULL,
LName TEXT NOT NULL,
DOB DATE NOT NULL,
ArrivalDate DATE NOT NULL DEFAULT CURRENT_DATE,
DepartureDate DATE,
US_PhoneNum VARCHAR(11) NOT NULL,
StreetAddress VARCHAR(200) NOT NULL,
Sex GENDER NOT NULL,
ZIP VARCHAR(10) NOT NULL,
PRIMARY KEY(PID),
FOREIGN KEY(PID) REFERENCES Campers(CamperID),
FOREIGN KEY(PID) REFERENCES Counselors(CounselorID),
FOREIGN KEY(ZIP) REFERENCES Zip(ZIP)
);
DROP TABLE IF EXISTS Zip;
CREATE TABLE Zip (
ZIP VARCHAR(10) NOT NULL,
City TEXT NOT NULL,
State VARCHAR(2) NOT NULL,
PRIMARY KEY(ZIP)
);
DROP TABLE IF EXISTS Campers;
CREATE TABLE Campers (
CamperID VARCHAR(10) NOT NULL REFERENCES People(PID),
AgeGroup AGES NOT NULL,
CabinID VARCHAR(2) NOT NULL,
Bed BEDTYPES NOT NULL,
GroupID VARCHAR(3) NOT NULL,
PRIMARY KEY(CamperID),
FOREIGN KEY(CamperID) REFERENCES People(PID),
FOREIGN KEY(CabinID) REFERENCES Cabins(CabinID),
FOREIGN KEY(Bed) REFERENCES Beds(Bed),
FOREIGN KEY(GroupID) REFERENCES Groups(GroupID)
);
DROP TABLE IF EXISTS Counselors;
CREATE TABLE Counselors (
CounselorID VARCHAR(10) NOT NULL REFERENCES People(PID),
GroupID VARCHAR(3) NOT NULL,
CabinID VARCHAR(2) NOT NULL,
PRIMARY KEY(CounselorID),
FOREIGN KEY(GroupID) REFERENCES Groups(GroupID),
FOREIGN KEY(CabinID) REFERENCES Cabins(CabinID)
);
用于进一步说明的错误消息:
ERROR: relation "campers" does not exist
********** Error **********
ERROR: relation "campers" does not exist
SQL state: 42P01
如果需要,我可以提供更多表(显然),我可以为其提供创建语句。
【问题讨论】:
-
Campers中的REFERENCES People(PID)是您想要的 FK,而不是people中的外键 (PID) REFERENCES Campers(CamperID)`。如果您在列定义中有REFERENCES,那么您不需要在表级别使用单独的FOREIGN KEY。 -
太好了,我不知道!谢谢@muistooshort。
-
哪个语句会引发该错误?
标签: sql postgresql ddl create-table