sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo almacenar el horario de apertura de una tienda en una base de datos SQL?

Una forma muy flexible y bien normalizada sería almacenar cada período de apertura como una fila en una tabla. Un período de apertura se puede codificar como el día de la semana en que comienza, la hora del día en que comienza y la duración que dura. Cada período de apertura está vinculado a un restaurante a través de una clave externa.

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 &&));