Ci sono diversi modi... uno è avere solo due colonne numeriche, una per l'altezza, una per il peso, quindi eseguire le conversioni (se necessario) al momento della visualizzazione. Un altro è creare una tabella "altezza" e una tabella "peso", ciascuna con una chiave primaria collegata da un'altra tabella. Quindi puoi memorizzare sia i valori inglesi che quelli metrici in queste tabelle (insieme a qualsiasi altra meta informazione che desideri):
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),
....
Ti sei fatto un'idea...
Quindi la tabella degli utenti farà riferimento all'altezza e peso tabelle - e forse molte altre tabelle dimensionali - segno zodiacale, stato civile, ecc.
CREATE TABLE users (
uid SERIAL PRIMARY KEY,
height INT REFERENCES height(id),
weight INT references weight(id),
sign INT references sign(id),
...
);
Quindi per fare una ricerca di utenti tra 4 e 5 piedi:
SELECT *
FROM users
JOIN height ON users.height = height.id
WHERE height.inches >= 48 AND height.inches <= 60;
Diversi vantaggi di questo metodo:
- Non è necessario duplicare lo "sforzo" (come se fosse un lavoro reale) per eseguire la conversione sul display:basta selezionare il formato che si desidera visualizzare!
- Semplifica il riempimento delle caselle a discesa in una selezione HTML:basta
SELECT english FROM height ORDER BY inches
, per esempio. - Rende la tua logica per varie dimensioni, comprese quelle non numeriche (come i segni astrologici) ovviamente simili, non hai codici di casi speciali dappertutto per ogni tipo di dati.
- Si adatta molto bene
- Semplifica l'aggiunta di nuove rappresentazioni dei tuoi dati (ad esempio, per aggiungere la colonna "mani" alla tabella delle altezze)