sql >> Base de Datos >  >> RDS >> Mysql

Guardar la altura y el peso del usuario

Hay varias formas... una es simplemente tener dos columnas numéricas, una para la altura, otra para el peso, y luego hacer las conversiones (si es necesario) en el momento de la visualización. Otra es crear una tabla de "altura" y una tabla de "peso", cada una con una clave principal que está vinculada desde otra tabla. Luego puede almacenar valores métricos e ingleses en estas tablas (junto con cualquier otra metainformación que desee):

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),
    ....

Entiendes la idea...

Luego, su tabla de usuarios hará referencia a la altura y peso tablas--y posiblemente muchas otras tablas de dimensiones--signo astrológico, estado civil, etc.

CREATE TABLE users (
    uid         SERIAL PRIMARY KEY,
    height      INT REFERENCES height(id),
    weight      INT references weight(id),
    sign        INT references sign(id),
    ...
);

Luego para hacer una búsqueda de usuarios entre 4 y 5 pies:

SELECT *
FROM users
JOIN height ON users.height = height.id
WHERE height.inches >= 48 AND height.inches <= 60;

Varias ventajas de este método:

  • No tiene que duplicar el "esfuerzo" (como si fuera un trabajo real) para hacer la conversión en la pantalla, simplemente seleccione el formato que desea mostrar.
  • Hace que llenar los cuadros desplegables en una selección de HTML sea muy fácil:solo SELECT english FROM height ORDER BY inches , por ejemplo.
  • Hace que su lógica para varias dimensiones, incluidas las no numéricas (como los signos astrológicos) obviamente similar, no tiene un código de caso especial por todas partes para cada tipo de datos.
  • Se adapta muy bien
  • Facilita agregar nuevas representaciones de sus datos (por ejemplo, para agregar la columna "manos" a la tabla de altura)