私はサマーキャンプのために、特にPKとFKの制約で作成しているデータベースではいくつかの問題があります。私がFK制約(例えばFOREIGN KEY(PID)がCampers(CamperID)を参照しているなど)を宣言すると、pgAdmin(私はPostgreSQLを使用しています)でコードを実行する際にエラーが発生します。たとえば、Campersテーブルはまだ作成されていませんが、これはおそらくロードブロッキングの一部または全部ですが、私のFKは何とか間違っているように感じられます。私の理解では、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'の' People(PID) 'の参照は、あなたが望むFKであり、' people'のFOREIGN KEY(PID)REFERENCES Campers(CamperID)ではありません。列定義に 'REFERENCES'がある場合は、テーブルレベルで別の' FOREIGN KEY'を必要としません。 –
偉大な、私はそれを知らなかった!ありがとう@muistooshort。 – rachel
次のステートメントは正確にそのエラーをスローしますか? –