2016-11-01 17 views
0

を投げています祭りのテーブルから。は、私はそうのような表を作成しているエラー

CREATE TABLE event 
(
    title text, 
    edate date, 
    etime time, 
    FOREIGN KEY (title, edate) REFERENCES festival (title, edate), 
    PRIMARY KEY (title, edate, etime) 
); 

私はエラーが取得しています:私は、私だけが唯一の外国人としてEDATEを渡ししようとした場合、しかし、それは動作しますが、外部キーとしてタイトルを渡ししようとした場合

there is no unique constraint matching given keys for referenced table "festival"

をキーを押すと失敗します(何らかの理由で問題が「edate」になっていることを意味します)。

どうしてですか?

答えて

5

外部キーの関係は、別のテーブルの主キーにリンクする必要があります。だから、あなたは定義でedateを持つべきではありません。彼らは同じことになっている場合、2つの表にedateを繰り返す理由はありません

FOREIGN KEY (title) REFERENCES festival (title), 

festivalに保存し、joinを使用して検索してください。

私はまた、あなたがする祭りを変更することをお勧めします:

ある
CREATE TABLE festival (
    festivalId serial primary key, 
    title text unique, 
    place text, 
    sdate date, 
    edate date 
); 

、外部キー関係のために使用することができる合成キーをご紹介します。一意になるようにtitleを宣言してください。 eventsテーブルのfestivalIdを使用して、タイトルと日付の両方を取得します。

注:これは、festivalのプライマリキーがタイトルのみであることを前提としています。それが(title, edate)にある場合、基本的に同じ論理が成り立ちます。実際には、festivalIdを導入し、festivalに関するすべての情報を参照するだけです。

+0

どうもありがとうございました。私は大学の授業をしていますが、それは間違っています。エデートはフェスティバルテーブルから実際にインポートされていないはずです。外国のキーが実際に使われていることを知っていれば、その情報は本当に役に立ちました。残念ながら、私は祭典のテーブルを私の割り当てで定義されているように変更することはできませんが、私の知識を拡大するだけです。なぜ "タイトル"に "ユニーク"を追加することをお勧めしますか? –

+0

実際には、イベントテーブルに日付と時刻が必要です。 7日間のフェスティバルで1日のイベントを考えてみましょう。 –

+0

@DanBracuk私はそれをしたい、あなたは正しいが、別のテーブルから外部キーとしてインポートするべきではありません。 @KfirCohen。 –

関連する問題