Sta*_*bie 6 mysql database database-design
我应该如何将用户的身高和体重存储在MySQL数据库中,以便我可以使用该信息查找特定身高或体重内的用户?此外,我需要能够以英制或公制系统显示此信息.
我的想法是存储以厘米为单位的高度信息和以千克为单位的重量(我更喜欢英制的公制).我甚至可以让用户输入他们的信息和英语系统,但在保存之前转换为公制.我认为在SQL中可以很容易地将公斤转换成磅数,但我不确定将178厘米转换为5'10"(略微向下舍入)是多么容易.
我应该在数据库中保存英语和度量标准值,以便在进行查询时不需要进行转换吗?存储派生/计算值听起来不错.
有几种方法......一种是只有两个数字列,一个用于高度,一个用于重量,然后在显示时进行转换(如果需要).另一种方法是创建一个"高度"表和一个"权重"表,每个表都有一个从另一个表链接的主键.然后,您可以在这些表中存储英语和公制值(以及您想要的任何其他元信息):
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)
这种方法有几个优点:
SELECT english FROM height ORDER BY inches例如.