Хранение периодов времени с уникальным значением
У меня есть проблема, при которой мне нужно отслеживать фактические продажи по отношению к цели продаж за "Период". Период может быть днем, месяцем, кварталом или годом.
Первоначально я придумал перечисление для PeriodType (1-4, День, Месяц, Квартал, Год соответственно). Учитывая это, мне понадобятся 3 значения для уникального описания Period: 1) PeriodType, 2) целое число для PeriodYear (например, 2010, 2011 и т. Д.) И 3) целое число для PeriodNumber.
Так, например, {1,2011,38} будет днем 2 февраля 2011 года. Или {3,2,2010} будет вторым кварталом 2010 года. Или {2,4,2012} будет месяцем апреля 2012 г.
Наличие объекта, который предоставляет эти три свойства, не является проблемой. Но с точки зрения базы данных я пытаюсь выяснить, как сохранить отношение сущности (например, цели или продажи) к периоду - не очень элегантно иметь 3 столбца в каждой таблице, для которой требуется Период отношений. Одним из способов было бы иметь таблицу для Периода, которая имеет первичный ключ и другие 3 значения - но не имеет смысла сохранять сам Период таким образом, потому что это концепция времени, которую можно вычислить.
Как лучше всего представить мое определение "периода" с одним уникальным значением? Или мое определение Периода неверно, и есть более простой способ сделать то же самое?
1 ответ
Самым простым решением было бы хранить Продажи в соответствии с самым низким уровнем детализации, т.е. днем. Тогда было бы просто объединить эти продажи для целей, которые отслеживают продажи за более длительный период.
Если это не соответствует вашим требованиям, вам следует более подробно объяснить, как данные собираются и используются, с особым акцентом на необходимость более сложной структуры данных.
Вопрос о часовых поясах проблематичен, но не демонстрирует. Важно согласовать единую точку правды для времени, которая должна быть базой данных, и хранить все даты в UTC. Клиенты должны будут переводить UTC в свой часовой пояс при получении данных и наоборот при их сохранении.
Насколько это просто на практике, во многом зависит от вашего вида базы данных, но почти каждая СУБД должна поддерживать эту функцию.