PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como armazenar o horário de funcionamento de uma loja em um banco de dados SQL?


Uma maneira muito flexível e bem normalizada seria armazenar cada período de abertura como uma linha em uma tabela. Um período de abertura pode ser codificado como o dia da semana em que começa, a hora do dia em que começa e a duração que dura. Cada período de abertura está vinculado a um restaurante por meio de uma chave estrangeira.
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 &&));