#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 секунд, чтобы пробежать оба круга вместе взятых.