Database Viewer

Browse the SQL that builds any database used across the lessons, without running it.

Loaded: Reservation database (A2 held by Grace) ยท concurrency-reservation-system.database-init-grace-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, '22222222-2222-2222-2222-222222222222', 'H', statement_timestamp() - interval '0 seconds');