Много гъвкав и добре нормализиран начин би бил всеки период на отваряне да се съхранява като един ред в таблица. Периодът на отваряне може да бъде кодиран като деня от седмицата, в който започва, часа от деня, в който започва, и продължителността, в която продължава. Всеки период на отваряне е свързан с ресторант чрез външен ключ.
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 &&));