एक बहुत ही लचीला और अच्छी तरह से सामान्यीकृत तरीका प्रत्येक उद्घाटन अवधि को एक तालिका में एक पंक्ति के रूप में संग्रहीत करना होगा। एक उद्घाटन अवधि को शुरू होने वाले सप्ताह के दिन के रूप में एन्कोड किया जा सकता है, जिस दिन यह शुरू होता है और जिस अवधि तक यह रहता है। प्रत्येक उद्घाटन अवधि एक विदेशी कुंजी के माध्यम से एक रेस्तरां से जुड़ी होती है।
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 &&));