Има няколко начина... единият е просто да имате две числови колони, една за височина, една за тегло, след което да направите преобразуванията (ако е необходимо) по време на показване. Друго е да създадете таблица с "височина" и таблица с "тегло", всяка с първичен ключ, който е свързан от друга таблица. След това можете да съхранявате както английски, така и метрични стойности в тези таблици (заедно с всяка друга мета информация, която искате):
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;
Няколко предимства на този метод:
- Не е нужно да дублирате „усилието“ (все едно е истинска работа), за да извършите преобразуването на дисплея – просто изберете формата, който искате да покажете!
- Това прави попълването на падащи полета в HTML select изключително лесно – просто
SELECT english FROM height ORDER BY inches
, например. - Това прави логиката ви за различни измерения – включително нечислови (като астрологични знаци) очевидно сходна – нямате специален код на случай навсякъде за всеки тип данни.
- Много добре се мащабира
- Улеснява добавянето на нови представяния на вашите данни (например, за добавяне на колоната „ръце“ към таблицата с височина)