Каков наилучший способ хранения прошедшего времени в базе данных

#database #ruby-on-rails-3 #database-design #activerecord #time

#База данных #ruby-on-rails-3 #база данных-дизайн #activerecord #время

Вопрос:

Я работаю над приложением для скачек, и мне нужно сохранить прошедшее время из скачек в таблице. Я буду импортировать данные из файла, разделенного запятыми, который предоставляет конечное время в одном формате, а внутреннее прошедшее время — в другом. Ниже приведен пример:

 Final Time: 109.39  (1 minute, 9 seconds and 39/100th seconds)

Quarter Time: 2260  (21 seconds and 60/100th seconds)

Half Time: 4524     (45 seconds and 24/100th seconds)

Three Quarters: 5993   (59 seconds and 93/100th seconds) 
  

Я хочу иметь гибкость, позволяющую легко выполнять такие вещи, как вычисления в футах в секунду, и преобразовывать прошедшее время в разбиения. Я также хочу иметь возможность легко отображать время (прошедшее или разделенное) в пятой части секунды или в сотых долях.

 Times in fifths: :223  :451  :564      1:091 (note the last digits are superscripts)

Times in hundredths: 22.60  :45.24  :56.93   1:09.39
  

Заранее спасибо за ваш вклад.

Ответ №1:

Обычно временные интервалы сохраняются либо как (1) истекшие секунды, либо (2) начальная / конечная дата-время. Истекшие секунды могут быть целым числом или числом с плавающей запятой / double, если вам это требуется. Вы могли бы проявить творческий подход / сойти с ума и хранить все время в миллисекундах, и в этом случае вам понадобилось бы только целое число.

Комментарии:

1. Я использую rails. Поэтому, возможно, я мог бы сохранить в миллисекундах, а затем создать вспомогательный метод.

Ответ №2:

Если вы используете PostgreSQL, вы можете использовать interval тип данных. В противном случае любое целое число (int4, int8) или число, поддерживаемое вашей базой данных, допустимо. Конечно, храните значения в одной единице измерения: секундах, минутах, миллисекундах.

Комментарии:

1. Я использую ruby on rails с базой данных postgres. Я не уверен, что доступен тип данных interval.

2. Я только что попробовал использовать interval в rails и получил сообщение об ошибке. Спасибо за идею, это бы отлично сработало.

Ответ №3:

Все зависит от того, как вы собираетесь его использовать, но количество прошедших секунд (возможно, в виде числа с плавающей точкой, если необходимо), безусловно, является предпочтительным.

Ответ №4:

Я думаю, что 109.39 представление 1 min 9.39 sec довольно глупо. Однозначность, конечно, может быть, историческая традиция, но выполнять вычисления с таким форматом жалко. (Не невозможно, но исправить это во время импорта кажется простым.)

Я бы сохранил время в каком-нибудь десятичном формате — либо в виде целого числа, представляющего сотые доли секунды, поскольку отображаются все остальные значения времени, либо в формате с поддержкой десятичной системы счисления, специфичном для базы данных.

Стандартные представления с плавающей запятой могут в конечном итоге заставить вас задуматься, почему лошади, которая пробежала два круга по 20,1 секунды каждый, потребовалось 40,2000 — 35 секунд, чтобы пробежать оба круга вместе взятых.