当我尝试创建此表时
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));
我收到错误:"错误:没有唯一约束匹配给定引用表的键#34;性能"
但是这对我来说没有意义,因为引用Performance的表使用了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是其自己的表中唯一的主键。
答案 0 :(得分:1)
Performance
中的主键由两列组成,即pai4(event_id, performance_id
)。
我不确定你的意图是什么,但由于序列的使用,performance_id
是唯一的。所以,你可以使用:
PRIMARY KEY (performance_id);
表示performance
表。我还要把它作为第一列,明确event_id
只是表演的一个属性。
如果使用多列来定义主键,则在使用外键引用表时需要使用所有列。
答案 1 :(得分:1)
performance_id
本身并不是唯一的。它只是主键的一部分;对(event_id, performance_id)
是唯一的。可以有多个行具有相同的performance_id
(但不同的event_id
)。