Как организовать хранение объектов в БД?

Привет! Я пытаюсь сделать собственный органайзер, в котором минимальная единица времени - отрезок в 15 минут (чтобы все события были по 30, 45, и т.д. минут длительностью), но меня ставит в ступор вопрос: а каким образом их хранить и идентифицировать в базе данных? На ум пришло несколько вариантов, которые меня не устраивают:
- время в миллисекундах (время начала 15-минутного отрезка)
- год, номер дня в году, номер отрезка в этот день (в сутки, соответственно, 96 отрезков)
- просто порядковый номер отрезка, начиная с определенной даты

Все эти варианты кажутся мне какими-то косолапыми. Есть ли какое-то более разумное решение данной проблемы?)
  • Вопрос задан
  • 1448 просмотров
Решения вопроса 1
@Miron11
Пишу sql 20 лет. Срок :)
А почему не выделить число, начинающееся от 1, увеличивающееся на единицу с каждым шагом. И идентифицировать все события произошедшие от начала отрезка времени и до начала следующего отрезка времени, не включая само начало следующего отрезка, этим идентификатором.

Таким образом в дне 96 таких отрезков, в году 36500 - 4 * 365 = 36500 - 1460 = 35040 шагов в год ( +96 в високосный ). Получается что с одним глобальным объектом - секвенцией - который постоянно прирастает на единицу с помощью метронома выставленного на 15 минут, можно обслуживать всю базу авторитетным единым источником идентификатора текущего промежутка времени, не тратя время на вычисления внутри отдельно взятой процедуры или запроса.

По - моему в Постгрес для этого даже есть какие - то очень удобные рычаги, позволяющие задать развертку, глобальную или более узкого обзора, которая обеспечит доступ к такому объекту, как к глобальной переменной, с минимальными затратами ресурсов.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@mletov
Почему бы просто не завести два поля для отрезка: dateStart, dateFinish
Тип полей DATETIME или TIMESTAMP

Так правильнее, вдруг вам завтра понадобится изменить длину отрезка.
Ответ написан
vvovas
@vvovas
В базе datetime. За тем, что все по 15 минут следит приложение.
Ответ написан
Комментировать
возможно так, но не пробовал: dateStart timestamp + itrvl interval
в PostgreSql есть ещё тип DateRange, по нему можно потом индексы строить: https://www.postgresql.org/docs/9.3/static/rangety...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы