2012-05-13 2 views
1

Мне нужно зафиксировать высоту и вес пользователя в моей базе данных. В пользовательском интерфейсе мне нужно предоставить опцию указания высоты в сантиметрах и дюймах - и для веса, килограмма и фунта. Позже, когда я показываю пользователей, мне нужно отображать их высоту и вес всего лишь в одной единице измерения (например, в cms или ins для всех).MySQL: как хранить информацию о высоте/весе?

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

Или мне нужно преобразовать данные перед тем, как их сохранить таким образом. Мне не нужно разговаривать позже, когда мне нужно отображать данные пользователя?

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

+0

Что является более важным? 1. Уметь воспроизводить то, что пользователь вводил? или 2. Уметь легко сравнивать высоты и веса в db? или 3. Уметь отображать все данные любому пользователю в единицах, которые она предпочитает? – joshp

ответ

7

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

+0

180 см и 72 дюйма - оба данных. Я не вижу в этом делового правила. Выполнение преобразования перед вставками означает, что я не смог бы точно преобразовать его обратно пользователю позже. – StackOverflowNewbie

+1

Да, они оба данные, но они не совпадают - вы просите свою базу данных знать правила их преобразования для вашего бизнеса. Если вы аккуратно храните его, то нет причин, по которым вы не сможете впоследствии преобразовать его в предпочтения пользователя - ТО, являются ли бизнес-правилами. – GDP

0

Вы определенно хотите сохранить только одну высоту и только одну ширину - используйте единицу по вашему выбору. Преобразование единиц измерения - это однократное умножение, которое по существу является нулевой стоимостью.

Вы также можете иметь таблицу единиц, а просто внутреннее соединение с вычисляемым полем даст вам правильное числовое значение в одном запросе (SELECT, а также INSERT/UPDATE)

+0

Итак, скажем, я выбираю метрическую систему. Сохранить все высоты в cms; сохранить все веса в килограммах. Позже, человек, который сохранил его высоту в сантиметрах - мне нужно будет вернуться обратно из cms, что может быть неточным для него больше. Это действительно то, что я должен делать? – StackOverflowNewbie

+2

Да, это должно: единый прецизионный поплавок с одним делением и однократным умножением даст вам гораздо лучшую точность, как любой вес или высота! Вам просто все равно, если вес неправильный на несколько миллиграммов. –

+0

Каков недостаток того, что я экономлю именно то, как пользователь вводил данные, а затем выполнял преобразование, когда мне нужно отображать всех пользователей, использующих одну и ту же единицу измерения? – StackOverflowNewbie