我在創建夏令營的數據庫方面遇到了一些困難,特別是PK和FK限制。當我聲明FK約束(例如FOREIGN KEY(PID)引用Campers(CamperID))時,通過pgAdmin(我使用PostgreSQL)運行我的代碼時出現錯誤。我明白,例如,露營者表尚未創建,這很可能是部分/全部的障礙,但我覺得我的FKs仍然錯誤。據我的理解,FK是另一張桌子上的PK - 但我覺得我的桌子之間有些冗餘或斷開。這些FK是必要的 - 它們阻止了我嗎?
我把下面的一些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消息:
ERROR: relation "campers" does not exist
********** Error **********
ERROR: relation "campers" does not exist
SQL state: 42P01
有多個表(明顯),我可以提供用於創建語句,如果需要的話。
「Campers」中的'REFERENCES People(PID)'是你想要的FK,而不是'人'中的FOREIGN KEY(PID)REFERENCES Campers(CamperID)'。如果在列定義中有'REFERENCES',那麼在表級別不需要單獨的'FOREIGN KEY'。 –
太好了,我不知道!謝謝@ muistooshort。 – rachel
哪個聲明確切地拋出該錯誤? –