を参照:私は何がありますので、これはされていないことを前提とし、参照テーブル「contactnumber」に指定されたキーに一致するユニークな制約がありませんPostgreSQLは、私が連絡先のテーブルを作成しようとすると、私は次のエラー受け付けております
: ERRORを連絡先表のNumberPerContact属性がありますが、1つ持っていません。私は何ができますか?
CREATE TABLE ContactNumber (
ContactID INTEGER NOT NULL,
NumberPerContact INTEGER DEFAULT 0 ,
ContactNumber VARCHAR(20) DEFAULT '',
PRIMARY KEY (ContactID, NumberPerContact),
UNIQUE(CONTACTID,NUMBERPERCONTACT)
);
CREATE TABLE Contact (
EventName VARCHAR(30) UNIQUE NOT NULL,
ContactID INTEGER UNIQUE NOT NULL,
PRIMARY KEY (EventName,ContactID),
FOREIGN KEY (ContactID) REFERENCES ContactNUMBER (CONTACTID),
FOREIGN KEY (CONTACTID) REFERENCES CONTACTMAIL(CONTACTID),
FOREIGN KEY (CONTACTID) REFERENCES CONTACTNAME(CONTACTID),
FOREIGN KEY (CONTACTID) REFERENCES ORGANIZer(CONTACTID)
);
あなたは 'ContactID'フィールドに対する外部キー制約を作成しようとしているが、それは' PRIMARY KEY'ではありません。主キーは 'ContactID、NumberPerContact'と定義されています。 'ContactNumber'テーブルに定義されている方法を変更するか、' Contact'テーブルに 'NumberPerContact'を追加し、それをあなたの' FOREIGN KEY'制約に追加する必要があります。あなたはあなたの質問に1つは望んでいないと言いますが、その2つのフィールドはレコードのフィールドを識別しています*もしそれがあなたが定義したものであれば、両方を使うべきです。 – Siyual
これとは別に、 'PRIMARY KEY'として定義されている2つのフィールドに加えて、' ContactID、NumberPerContact'に対する 'UNIQUE'制約は冗長です。定義上、それらは既に「PRIMARY KEY」を介して一意である。 – Siyual
ContactNumberテーブルの主キーのContactIDだけを残しておくと、両方のテーブルを作成することができました。 ContactIDとNumberPerContactの両方が一意ではなく、一意であることが必要です。 PKからNumberPerContactを削除すると失敗しました。 UNIQUQ(atr1、atr2)が期待通りに動作しない –