有几种方法......一种是只有两个数字列,一列用于高度,一列用于重量,然后在显示时进行转换(如果需要)。另一种方法是创建一个“身高”表和一个“体重”表,每个表都有一个从另一个表链接的主键。然后,您可以在这些表中存储英制和公制值(以及您想要的任何其他元信息):
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),
....
你明白了...
然后你的用户表将引用height and weight表——可能还有许多其他维度表——星座、婚姻状况等。
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;
这种方法有几个优点:
- 您不必重复“努力”(就好像它是任何实际工作一样)来进行显示转换 - 只需选择您想要显示的格式!
- 它使得在 HTML 选择中填充下拉框变得超级简单——只需
SELECT english FROM height ORDER BY inches
, 例如。
- 它使您的各种维度的逻辑 - 包括非数字的逻辑(如占星术符号)明显相似 - 您不需要为每种数据类型到处都有特殊情况代码。
- 它的扩展性非常好
- 它可以轻松添加新的数据表示形式(例如,将“手”列添加到高度表中)