PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie speichere ich die Öffnungszeiten eines Geschäfts in einer SQL-Datenbank?

Ein sehr flexibler und gut normalisierter Weg wäre, jede Öffnungsperiode als eine Zeile in einer Tabelle zu speichern. Eine Öffnungsperiode kann als Wochentag, an dem sie beginnt, als Tageszeit, an der sie beginnt, und als Dauer, die sie dauert, codiert werden. Jeder Öffnungszeitraum ist über einen Fremdschlüssel mit einem Restaurant verknüpft.

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