Cara yang sangat fleksibel dan dinormalisasi dengan baik adalah dengan menyimpan setiap periode pembukaan sebagai satu baris dalam sebuah tabel. Periode pembukaan dapat dikodekan sebagai hari kerja dimulai, waktu hari itu dimulai dan durasi berlangsung. Setiap periode pembukaan ditautkan ke restoran melalui kunci asing.
CREATE TABLE opening_period
(restaurant integer,
weekday integer,
time time,
duration interval,
PRIMARY KEY (restaurant,
weekday,
time,
duration),
FOREIGN KEY (restaurant)
REFERENCES restaurant
(id)
ON DELETE CASCADE,
CHECK (weekday >= 0
AND weekday < 7),
-- prevent overlapping opening periods
EXCLUDE USING gist (restaurant WITH =,
tsrange('epoch'::timestamp + time + weekday * INTERVAL '1 days',
'epoch'::timestamp + time + weekday * INTERVAL '1 days' + duration,
'[)') WITH &&));