PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment stocker les heures d'ouverture d'un magasin dans une base de données SQL ?

Une manière très flexible et bien normalisée consisterait à stocker chaque période d'ouverture sur une ligne dans une table. Une période d'ouverture peut être codée comme le jour de la semaine où elle commence, l'heure de la journée à laquelle elle commence et la durée qu'elle dure. Chaque période d'ouverture est liée à un restaurant via une clé étrangère.

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