Я хочу хранить метрические единицы в базе данных - какой тип данных мне следует использовать? - PullRequest
5 голосов
/ 29 марта 2011

Я хотел бы сохранить высоту, которая в конечном итоге будет отображаться в Imperial / US (6 футов 4, например) в базе данных, которая в настоящее время является MySQL (которую я планирую перенести в PostgreSQL).мне интересно, какой блок хорош для этого типа хранилища, и какой тип столбца я должен использовать?Я имею в виду сантиметры / метрическую систему и некоторый тип числовых столбцов, но было бы замечательно, если бы кто-то мог обеспечить понимание.

Ответы [ 6 ]

1 голос
/ 29 марта 2011

Если они представляют собой непрерывные количества, сохраните их в метрах в виде числа с плавающей запятой и конвертируйте в отчет метры, метры + см, футы, фарлонги.

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

1 голос
/ 29 марта 2011

храните в сантиметрах, используя тип данных int.Примечание 1 см = 0.39370078740157477in

1 голос
/ 29 марта 2011

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

Единственная причина для преобразования в метрику в БД и затем обратно в британские единицы для вывода может быть, если вам нужна метрикакакая-то другая причина, и более важная / частая, чем генерация выходных данных в Imperial.В противном случае все, что вы делаете, это вводите ошибки округления в обоих направлениях.

0 голосов
/ 29 марта 2011

Это может звучать неловко, но это может работать для вас, если имперские меры по умолчанию.Чем бы я сохранил длину в CHAR (2) как значение HEX.6 футов 11 дюймов становится 6В, столбец сортируется, и у вас нет проблем с округлением, которые могут возникнуть в случае сохранения метрической длины.

0 голосов
/ 29 марта 2011

Если вы собираетесь показывать только в Imperial, то, возможно, нет веских причин для хранения в метрической системе. Вы избавите себя от лишних хлопот, просто набрав int для хранения количества дюймов. Если вам нужно больше разрешения, либо:

  • использует int для хранения (например) десятых долей дюйма
  • использовать числовые значения для хранения дробных значений

Поскольку вы храните только «сотни / тысячи высот людей», проблемы хранения вряд ли будут беспокоить.

0 голосов
/ 29 марта 2011

Сверху головы я не понимаю, почему любая база данных будет лучше, чем любая другая, для хранения метрических единиц, а не имперских. Подходя к проблеме хранения измерений, я вижу две основные мысли. Храните в наименьших разумных единицах измерения и используйте его как основу для всего (т.е. все в граммах и см). Другой способ - хранить единицы измерения в масштабе, если вы используете смешанные единицы, но это, вероятно, усложнит настройку больше, чем необходимо.

Вы можете использовать int или long для сохранения значения, если нет возможности для измерений с более высоким разрешением, чем ваша базовая единица.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...