2016-04-02 51 views
0

私は、この表に外部キーエラー

CREATE SEQUENCE ticket_id_seq; 
create table Ticket (
    ticket_id INTEGER DEFAULT nextval('ticket_id_seq') NOT NULL, 
    event_id INTEGER NOT NULL, 
    performance_id INTEGER NOT NULL, 
seat_area VARCHAR(30), 
order_id INTEGER, 
FOREIGN KEY (order_id) REFERENCES Order_info (order_id) ON DELETE SET NULL ON    UPDATE CASCADE, 
FOREIGN KEY (performance_id) REFERENCES Performance (performance_id) ON DELETE SET NULL ON UPDATE CASCADE, 
PRIMARY KEY (ticket_id)); 

を作成しようとすると、私はエラーを取得:「ERROR:そこに参照されるテーブルに指定されたキーに一致するユニーク制約ではありません 『パフォーマンス』

は、しかし、これはしませんが、パフォーマンスを参照のテーブルので、私には意味をなさない主キーとして使用していますPERFORMANCE_ID:

CREATE SEQUENCE performance_id_seq; 
create table Performance (
    event_id INTEGER NOT NULL, 
    performance_id INTEGER DEFAULT nextval('performance_id_seq') NOT NULL, 
    event_status VARCHAR(10), 
    performance_date VARCHAR(45), 
    performance_time VARCHAR(20), 
    venue_id INTEGER, 
    nbr_seats INTEGER, 
    purchase_limit INTEGER, 
    posting_date DATE DEFAULT CURRENT_DATE, 
    sale_start_date DATE DEFAULT CURRENT_DATE, 
    minimum_ticket_price VARCHAR(30), 
    maximum_ticket_price VARCHAR(30), 
FOREIGN KEY (event_id) REFERENCES Event (event_id) ON DELETE SET NULL ON UPDATE CASCADE, 
FOREIGN KEY (venue_id) REFERENCES Venue (venue_id) ON DELETE SET NULL ON UPDATE CASCADE, 
PRIMARY KEY (event_id, performance_id)); 

PERFORMANCE_IDがで一意の主キーであると、私はこのエラーを取得していますなぜだから私は本当にわからないんだけどそれ自身のテーブル。

答えて

1

Performanceの主キーは、pai4(event_id, performance_id)の2つの列で構成されています。

あなたの意図はわかりませんが、performance_idはシーケンスの使用のためにユニークです。だから、あなただけ使用することができます。

PRIMARY KEY (performance_id); 

performanceテーブルのために。 event_idがパフォーマンスの属性に過ぎないことを明確にするために、最初の列にもします。

複数の列を使用して主キーを定義する場合は、外部キーを使用して表を参照するときにすべての列を使用する必要があります。

1

performance_idは単独ではありません。主キーの一部です。ペア(event_id, performance_id)はユニークです。 performance_id(ただし、異なるevent_id)の行がいくつかあります。

関連する問題