Existuje několik způsobů... jedním je mít pouze dva číselné sloupce, jeden pro výšku, jeden pro váhu, a pak provést převody (pokud je to nutné) v době zobrazení. Dalším je vytvoření tabulky "výšky" a tabulky "hmotnosti", každá s primárním klíčem, který je propojen z jiné tabulky. Poté můžete do těchto tabulek uložit anglické i metrické hodnoty (spolu s dalšími metainformacemi, které chcete):
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),
....
Máte nápad...
Potom bude vaše tabulka uživatelů odkazovat na výšku a váha tabulky – a možná i mnoho dalších tabulek dimenzí – astrologické znamení, rodinný stav atd.
CREATE TABLE users (
uid SERIAL PRIMARY KEY,
height INT REFERENCES height(id),
weight INT references weight(id),
sign INT references sign(id),
...
);
Poté proveďte vyhledávání uživatelů mezi 4 a 5 stopami:
SELECT *
FROM users
JOIN height ON users.height = height.id
WHERE height.inches >= 48 AND height.inches <= 60;
Několik výhod této metody:
- Nemusíte duplikovat „úsilí“ (jako by to byla nějaká skutečná práce), abyste provedli převod na displeji – stačí vybrat formát, který chcete zobrazit!
- Vyplňování rozbalovacích polí ve výběru HTML je velmi snadné – stačí
SELECT english FROM height ORDER BY inches
, například. - Vaše logika pro různé dimenze – včetně nečíselných (jako jsou astrologická znamení) je evidentně podobná – pro každý datový typ nemáte všude speciální kód případu.
- Velmi dobře se škáluje
- Usnadňuje přidávání nových reprezentací vašich dat (například přidání sloupce 'hands' do tabulky výšky)