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

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

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

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

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

Так правильнее, вдруг вам завтра понадобится изменить длину отрезка.
Ответ написан
vvovas
@vvovas
В базе datetime. За тем, что все по 15 минут следит приложение.
Ответ написан
возможно так, но не пробовал: dateStart timestamp + itrvl interval
в PostgreSql есть ещё тип DateRange, по нему можно потом индексы строить: https://www.postgresql.org/docs/9.3/static/rangety...
Ответ написан
@VMichael
Вариант два поля:
1. data_time_start - дата/время начала
2. duration - продолжительность в минутах.
----
Но!
Важно, что вы с этим будете делать дальше.
До того, как приступить к реализации интерфейса и прочих фич, прикиньте, что вы будете делать дальше, после сохранения данных в БД.
Т.е. какие будете брать данные для отображения в интерфейсе (тогда может понадобиться разбиение, о котором вы упоминали выше, правда, бить на несколько полей нет смысла, достаточно поля "дата время", без нумерации отрезка в течении дня.))?
Какие отчеты вы будете строить?
У нас был проект организации записи клиентов на сделки с учетом времени работы отделений, инспекторов и продолжительности сделок по типам. Время работы записывали двумя полями, "с", "по". А что бы понять соответствия, били интервалы по 5 минут (можно любые интервалы, наши бизнеса решили, что 5 минутной точности достаточно) и смотрели пересечения.
После того, как определите, какие задачи будете решать на выходе, на любую выбранную вами структуру, попробуйте наложить запросы выборки (и сохранения) данных.
И, обычно, сразу становятся видны косяки структуры БД.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Ideas World Симферополь
от 100 000 ₽
Почта Банк Москва
от 207 000 до 240 000 ₽
S2 | CRM Тольятти
от 120 000 до 200 000 ₽
10 апр. 2020, в 12:14
2000 руб./в час
10 апр. 2020, в 12:10
300 руб./за проект