Odp. Pytanie nr 1 :zamknięte-otwarte to standardowy sposób obsługi zakresów dat, z 20-25-letnią historią w literaturze akademickiej. Zobacz s. 24-25 Danych dwuczasowych Toma Johnstona, a także Tworzenie aplikacji bazodanowych zorientowanych na czas w SQL autorstwa Richarda Snodgrassa.
Ale myślę, że jednym z powodów jest to, że kolejne zakresy nie nakładają się. Jeśli a
jest [May2016, Jun2016)
i b
jest [Jun2016, Jul2016)
, nie udostępniają żadnych dni. Dzięki temu „zatrzaskują się” i nie musisz się martwić o skrajne przypadki, w których się zetkną.
Zauważ, że jedną wadą (być może) zamkniętego-otwartego jest to, że nie możesz określić pustego zakresu. [May2016, May2016)
jest po prostu sprzecznością samą w sobie, podczas gdy [May2016, May2016]
jest błyskawiczna.
Odp. Pytanie nr 2 :Znowu mogło być inaczej, ale myślę o kilku zaletach tworzenia upper([May2016, Jun2016))
zwróć Jun2016
:
- Zwraca to samo niezależnie od rozdzielczości zakresu.
- Przypomina bardziej matematyczne znaczenie otwartego punktu końcowego, gdzie jest jedynym możliwa odpowiedź.
- Zwraca to, co pasuje do „etykiety”, więc prawdopodobnie jest mniej zaskakujące.
- Pozwala łatwo sprawdzić, czy dwa zakresy „spełniają się”:
upper(a) = lower(b)
.
Pamiętaj też, że w Postgresie wszystkie typy danych związane z czasem są dyskretne. Kiedyś istniała opcja kompilacji Postgresa z zmiennoprzecinkowym znacznikiem czasu, ale jest przestarzała i nigdy się z nią nie spotkałem.