PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come memorizzare gli orari di apertura di un negozio in un database SQL?

Un modo molto flessibile e ben normalizzato sarebbe memorizzare ogni periodo di apertura come una riga in una tabella. Un periodo di apertura può essere codificato come il giorno della settimana in cui inizia, l'ora del giorno in cui inizia e la durata. Ogni periodo di apertura è collegato a un ristorante tramite una chiave esterna.

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