Есть несколько способов ... один состоит в том, чтобы просто иметь два числовых столбца, один для роста, другой для веса, а затем выполнить преобразования (при необходимости) во время отображения.Другой способ - создать таблицу «высота» и таблицу «вес», каждая из которых имеет первичный ключ, связанный с другой таблицей.Затем вы можете сохранить в этих таблицах как английские, так и метрические значения (вместе с любой другой метаинформацией):
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 english FROM height ORDER BY inches
. - Это делает вашу логику для различных измерений - в том числе нечисловых (например, астрологических знаков) явно схожей - у вас нет кода особого случая повсюду для каждого типа данных.
- Он очень хорошо масштабируется
- Это позволяет легко рекламироватьd новые представления ваших данных (например, для добавления столбца 'hands' в таблицу высот)