Database Viewer
Browse the SQL that builds any database used across the lessons, without running it.
Loaded: Reservation database (A2 hold expired) ยท concurrency-reservation-system.database-init-expired-hold
CREATE TABLE "user" (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL
);
CREATE TABLE event (
id UUID PRIMARY KEY DEFAULT uuidv7(),
name TEXT NOT NULL,
seat_number INTEGER NOT NULL
);
CREATE TABLE seat (
id SERIAL PRIMARY KEY,
event_id UUID NOT NULL REFERENCES event (id),
label TEXT NOT NULL
);
CREATE TABLE reservation (
event_id UUID NOT NULL REFERENCES event (id),
seat_id INTEGER NOT NULL REFERENCES seat (id),
user_id UUID NOT NULL REFERENCES "user" (id),
status CHAR(1) NOT NULL CHECK (status IN ('H', 'R')),
holding_date TIMESTAMPTZ,
reservation_date TIMESTAMPTZ,
PRIMARY KEY (event_id, seat_id)
);
CREATE INDEX reservation_live_hold_lookup
ON reservation (event_id, user_id, holding_date)
WHERE status = 'H';
INSERT INTO "user" (id, name)
VALUES
('11111111-1111-1111-1111-111111111111', 'Ada'),
('22222222-2222-2222-2222-222222222222', 'Grace'),
('44444444-4444-4444-4444-444444444444', 'Bob');
INSERT INTO event (id, name, seat_number)
VALUES ('33333333-3333-3333-3333-333333333333', 'Concert Night', 3);
INSERT INTO seat (event_id, label)
VALUES
('33333333-3333-3333-3333-333333333333', 'A1'),
('33333333-3333-3333-3333-333333333333', 'A2'),
('33333333-3333-3333-3333-333333333333', 'A3');
INSERT INTO reservation (event_id, seat_id, user_id, status, holding_date)
VALUES ('33333333-3333-3333-3333-333333333333', 2, '11111111-1111-1111-1111-111111111111', 'H', statement_timestamp() - interval '60 seconds');