保存用户的身高和体重

Sta*_*bie 6 mysql database database-design

我应该如何将用户的身高和体重存储在MySQL数据库中,以便我可以使用该信息查找特定身高或体重内的用户?此外,我需要能够以英制或公制系统显示此信息.

我的想法是存储以厘米为单位的高度信息和以千克为单位的重量(我更喜欢英制的公制).我甚至可以让用户输入他们的信息和英语系统,但在保存之前转换为公制.我认为在SQL中可以很容易地将公斤转换成磅数,但我不确定将178厘米转换为5'10"(略微向下舍入)是多么容易.

我应该在数据库中保存英语和度量标准值,以便在进行查询时不需要进行转换吗?存储派生/计算值听起来不错.

Fli*_*mzy 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),
    ....
Run Code Online (Sandbox Code Playgroud)

你明白了......

然后您的用户表将引用高度重量表 - 可能还有许多其他维度表 - 占星标志,婚姻状况等.

CREATE TABLE users (
    uid         SERIAL PRIMARY KEY,
    height      INT REFERENCES height(id),
    weight      INT references weight(id),
    sign        INT references sign(id),
    ...
);
Run Code Online (Sandbox Code Playgroud)

然后搜索4到5英尺之间的用户:

SELECT *
FROM users
JOIN height ON users.height = height.id
WHERE height.inches >= 48 AND height.inches <= 60;
Run Code Online (Sandbox Code Playgroud)

这种方法有几个优点:

  • 你不必复制"努力"(好像是任何实际工作)来进行显示转换 - 只需选择你想要显示的格式!
  • 它使得在HTML选择中填充下拉框非常简单 - SELECT english FROM height ORDER BY inches例如.
  • 它使你的各种维度的逻辑 - 包括非数字维度(如占星标志)明显相似 - 你没有为每种数据类型提供特殊的案例代码.
  • 它的扩展性非常好
  • 它可以轻松添加数据的新表示(例如,将'hands'列添加到高度表)