Der er flere måder... den ene er bare at have to numeriske kolonner, en for højde, en for vægt, og derefter foretage konverteringerne (hvis nødvendigt) på visningstidspunktet. En anden er at oprette en "højde"-tabel og en "vægt"-tabel, hver med en primær nøgle, der er forbundet fra en anden tabel. Så kan du gemme både engelske og metriske værdier i disse tabeller (sammen med enhver anden metainformation, du ønsker):
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),
....
Du forstår...
Derefter vil din brugertabel referere til højden og vægt tabeller - og muligvis mange andre dimensionstabeller - astrologiske tegn, ægteskabelig status osv.
CREATE TABLE users (
uid SERIAL PRIMARY KEY,
height INT REFERENCES height(id),
weight INT references weight(id),
sign INT references sign(id),
...
);
For derefter at søge efter brugere mellem 4 og 5 fod:
SELECT *
FROM users
JOIN height ON users.height = height.id
WHERE height.inches >= 48 AND height.inches <= 60;
Flere fordele ved denne metode:
- Du behøver ikke at duplikere "indsatsen" (som om det var noget rigtigt arbejde) for at udføre konverteringen på displayet - vælg blot det format, du ønsker at vise!
- Det gør det super nemt at udfylde rullemenuer i en HTML-valg - bare
SELECT english FROM height ORDER BY inches
, for eksempel. - Det gør din logik for forskellige dimensioner - inklusive ikke-numeriske (som astrologiske tegn) åbenlyst ens - du har ikke speciel kasuskode overalt for hver datatype.
- Den skalerer rigtig godt
- Det gør det nemt at tilføje nye repræsentationer af dine data (for eksempel at tilføje "hænder"-kolonnen til højdetabellen)