【问题标题】:MySQL: how to store height/weight information?MySQL:如何存储身高/体重信息?
【发布时间】:2012-05-13 23:18:13
【问题描述】:

我需要在我的数据库中捕获用户的身高和体重。在 UI 中,我需要提供一个选项来指定以厘米和英寸为单位的高度——以及重量、公斤和磅。稍后,当我显示用户时,我只需要以 1 个测量单位显示他们的身高和体重(例如,所有用户都以 cms 或 ins 为单位)。

存储这些数据的最佳方式是什么?我是否存储了 2 条身高数据(例如身高值、身高单位)和 2 条体重数据(例如体重值、体重单位),然后存储用户输入的数据?当我需要以统一的单位显示数据时,我会在 SQL 中进行转换。

或者我应该在存储之前转换数据,以便以后在需要显示用户数据时不需要进行对话?

顺便说一句,当我将数据显示给实际用户时,它必须与用户选择的单位相同。

【问题讨论】:

  • 哪个更重要? 1. 能够准确回放用户输入的内容吗?或者 2. 能够轻松比较 db 中的身高和体重?或者 3. 能够以她喜欢的单位向任何用户显示所有数据?

标签: mysql database database-design


【解决方案1】:

考虑规范化 - 除非有令人信服的理由不这样做,否则以一种格式将其存储在一个地方,并在以后始终在代码中使用标准转换。数据库应该存储您的数据,而不是业务规则。

【讨论】:

  • 180 厘米和 72 英寸都是数据。我不认为这是商业规则。在插入之前进行转换意味着我以后可能无法将其准确地转换回用户。
  • 是的,它们都是数据,但它们并不相同 - 您要求您的数据库了解为您的业务转换它们的规则。如果您准确地存储它,那么您以后就没有理由无法将其转换为用户的偏好 - 这就是业务规则。
【解决方案2】:

您肯定只想保存一个高度和一个宽度 - 使用您选择的单位。单位换算是单次乘法,本质上是零成本。

您还可以有一个单位表,一个带有计算字段的简单内部联接将在单个查询中为您提供正确的数值(SELECT 以及 INSERT/UPDATE)

【讨论】:

  • 所以,假设我选择公制。以厘米为单位保存所有高度;以公斤为单位保存所有重量。后来,以英寸为单位保存身高的人-我必须从厘米转换回来,这对他来说可能不再准确。这真的是我应该做的吗?
  • 是的,它应该:应用单除法和单次乘法的单精度浮点数将为您提供更好的精度,以满足任何体重或身高的需要!你根本不在乎,如果重量有几毫克的误差。
  • 我准确保存用户输入数据的方式有什么缺点——然后当我需要使用相同的测量单位显示所有用户时进行转换?
  • 缺点是数据不一致 - 您总是需要对每一行中的这些列进行额外检查,以了解实际数据是什么。
  • 1.您将存储需求翻倍,2. 遇到大问题,如果字段不同步,3. 比较困难,4. 未标准化,5. 如果您想使用更多,则需要表和业务逻辑大修超过 2 个字段(即英寸、厘米和第三个单位)
猜你喜欢
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
相关资源
最近更新 更多