【发布时间】:2015-07-11 20:41:07
【问题描述】:
我有一张桌子showtime 和一张桌子ticket。
CREATE TABLE showtime (
showtime_id SERIAL PRIMARY KEY,
theatre_id INT REFERENCES theatre(theatre_id),
showroom_id INT REFERENCES showroom(showroom_id),
movie_id INT REFERENCES movie(movie_id),
start_time TIME,
end_time TIME,
show_date DATE
);
CREATE TABLE ticket (
showtime_id INT REFERENCES showtime(showtime_id),
seat_number SERIAL UNIQUE,
price NUMERIC(1000, 2) NOT NULL,
time_bought TIME,
date_bought DATE,
wasUsed BOOLEAN,
PRIMARY KEY (showtime_id, seat_number)
);
如您所见,showtime 中的每一行都有一个唯一的showtime_id。我想要发生的是当添加一个新的ticket 时,seat_number 应该从与showtime_id 绑定的最后一个值自动递增:
ticket
showtime_id | seat_number | instead_of |
1 | 1 | 1 |
1 | 2 | 2 |
1 | 3 | 3 |
1 | 4 | 4 |
2 | 1 | 5 |
2 | 2 | 6 |
3 | 1 | 7 |
4 | 1 | 8 |
这在 PostgreSQL 中可行吗?
【问题讨论】:
-
并非没有一些软锁定:每次插入票证时,您都会先锁定相应的
showtime行,并且可以安全地执行此操作。否则,您可以在运行时使用窗口函数来执行此操作,因为该数据很容易检索。