Il y a plusieurs façons... l'une consiste à n'avoir que deux colonnes numériques, une pour la taille, une pour le poids, puis de faire les conversions (si nécessaire) au moment de l'affichage. Une autre consiste à créer une table "hauteur" et une table "poids", chacune avec une clé primaire liée à une autre table. Ensuite, vous pouvez stocker à la fois les valeurs anglaises et métriques dans ces tableaux (ainsi que toute autre méta-information souhaitée) :
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),
....
Vous voyez l'idée...
Ensuite, votre table d'utilisateurs référencera la hauteur et poids tableaux - et peut-être de nombreux autres tableaux de dimensions - signe astrologique, état civil, etc.
CREATE TABLE users (
uid SERIAL PRIMARY KEY,
height INT REFERENCES height(id),
weight INT references weight(id),
sign INT references sign(id),
...
);
Ensuite pour faire une recherche d'utilisateurs entre 4 et 5 pieds :
SELECT *
FROM users
JOIN height ON users.height = height.id
WHERE height.inches >= 48 AND height.inches <= 60;
Plusieurs avantages à cette méthode :
- Vous n'avez pas à dupliquer "l'effort" (comme s'il s'agissait d'un véritable travail) pour effectuer la conversion à l'écran :sélectionnez simplement le format que vous souhaitez afficher !
- Cela facilite grandement le remplissage des listes déroulantes dans une sélection HTML :il suffit de
SELECT english FROM height ORDER BY inches
, par exemple. - Cela rend votre logique pour différentes dimensions, y compris celles qui ne sont pas numériques (comme les signes astrologiques) évidemment similaires, vous n'avez pas de code de casse spécial partout pour chaque type de données.
- Il évolue très bien
- Cela facilite l'ajout de nouvelles représentations de vos données (par exemple, pour ajouter la colonne "mains" au tableau des hauteurs)