Estou projetando uma tabela postgres para registrar os intervalos contidos em uma programação semanal. Ele manteria agendas para várias empresas, e um conjunto de dados de exemplo simples pode ser semelhante a:
business_id interval
----------- -----------------------------------
1 Sunday 10:00:00 – Sunday 14:00:00
1 Sunday 22:00:00 – Monday 02:00:00
1 Friday 11:00:00 – Friday 16:00:00
1 Saturday 15:00:00 – Sunday 01:00:00
Observe que os intervalos podem cruzar os limites entre os dias.
Uma empresa não deve ter intervalos sobrepostos e gostaria de projetar a tabela de uma forma que me permitisse impor isso.
Eu estava pensando em mapear esses valores de dia da semana + hora do dia para os números correspondentes de segundos desde o início da semana, armazenando intervalos como int4range
e usando uma restrição de exclusão para proibir a sobreposição de intervalos inteiros, mas isso não seria adequado intervalos de endereços que envolvem o final da semana.
Existe uma boa maneira de modelar esse tipo de dados cíclicos e proibir sobreposições?