2016-04-27 57 views
0

我在創建夏令營的數據庫方面遇到了一些困難,特別是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 

有多個表(明顯),我可以提供用於創建語句,如果需要的話。

+0

「Campers」中的'REFERENCES People(PID)'是你想要的FK,而不是'人'中的FOREIGN KEY(PID)REFERENCES Campers(CamperID)'。如果在列定義中有'REFERENCES',那麼在表級別不需要單獨的'FOREIGN KEY'。 –

+0

太好了,我不知道!謝謝@ muistooshort。 – rachel

+0

哪個聲明確切地拋出該錯誤? –

回答

0

你真的應該從這裏開始:Foreign key

在關係數據庫中的情況下,外鍵是唯一標識的 另一個表中的行的一個表中的字段(字段或 集合)。

您在腳本中要做的是在人員,營員和顧問之間創建一個循環鏈接。使主鍵字段也是外鍵要求所有引用表中的ID是相同的。

...並創建一個外鍵所引用的表必須已經存在於數據庫中。因此,您應該從沒有任何外鍵的表開始,並創建僅引用先前創建的表的表。或者,您可以創建沒有外鍵的所有表,並在所有表存在時添加它們。

...並回答這個問題,外鍵從來沒有必要,但它們可能會有所幫助。

相關問題