我应该如何在MySQL数据库中存储用户的身高和体重,以便我可以使用这些信息来查找特定身高或体重的用户?此外,我需要能够以英制或公制系统显示此信息。
我的想法是存储高度以厘米为单位的信息和以千克为单位的重量(我更喜欢英制的公制)。我甚至可以让用户输入他们的信息和英语系统,但在保存之前转换为公制。我认为在SQL中可以很容易地将公斤转换成磅数,但我不确定将178
厘米转换为5'10"
(略微向下舍入)是多么容易。
我应该在数据库中保存英语和指标值,这样我在查询时就不需要进行转换了吗?对于存储派生/计算值而言,这听起来不错。
答案 0 :(得分:6)
有几种方法......一种是只有两个数字列,一个用于高度,一个用于重量,然后在显示时进行转换(如果需要)。另一种方法是创建一个“高度”表和一个“权重”表,每个表都有一个从另一个表链接的主键。然后,您可以在这些表中存储英语和公制值(以及您想要的任何其他元信息):
CREATE TABLE height (
id SERIAL PRIMARY KEY,
english VARCHAR,
inches INT,
cm INT,
hands INT // As in, the height of a horse
);
INSERT INTO height VALUES
(1,'4 feet', 48, 122, 12),
(2,'4 feet, 1 inch', 49, 124, 12),
(3,'4 feet, 2 inches', 50, 127, 12),
(3,'4 feet, 3 inches', 51, 130, 12),
....
你明白了......
然后,您的用户表将引用高度和权重表 - 可能还有许多其他维度表 - 占星符号,婚姻状况等。
CREATE TABLE users (
uid SERIAL PRIMARY KEY,
height INT REFERENCES height(id),
weight INT references weight(id),
sign INT references sign(id),
...
);
然后搜索4到5英尺之间的用户:
SELECT *
FROM users
JOIN height ON users.height = height.id
WHERE height.inches >= 48 AND height.inches <= 60;
这种方法有几个优点:
SELECT english FROM height ORDER BY inches
。答案 1 :(得分:3)
我会按你所说的方式去做,但是在转换部分,你不会将178厘米转换为5英尺10英寸,你可以将其转换为70英寸,然后如果需要的话,将其转换为5'10“。
答案 2 :(得分:1)
将5'10“视为70”或5.8333333'。在这种情况下,转换为70“或5.83333只是一个乘法,所以如果您愿意,它很容易以db为单位存储在数据库中。
用户看到的问题是演示文稿问题,与数据库无关。
答案 3 :(得分:0)
我同意在这种情况下存储计算值是不正确的。你的选择是完美的。
但是,我会在应用程序级别进行计算并使用这些值查询数据库 - 这取决于您的应用程序编写的语言,我相信有很多o库/模块可以计算这些转换
编辑 - 解决在DB中存储计算值的问题:
虽然这在使用DB时被认为是一种不好的做法,但我通常不会100%反对这种做法 - 只有90%。
我倾向于仅在计算复杂时将计算值存储在DB中,并且需要大量资源才能获得所需的结果 - 这显然是不的情况。
如果你在这里存储计算值,你将只有这种技术的缺点 - 修改记录时,你必须在多个地方修改数据以保持数据库的一致性