Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Salvando a altura e o peso do usuário


Existem várias maneiras... uma é apenas ter duas colunas numéricas, uma para altura, outra para peso, e fazer as conversões (se necessário) na hora da exibição. Outra é criar uma tabela de "altura" e uma tabela de "peso", cada uma com uma chave primária vinculada a outra tabela. Em seguida, você pode armazenar valores em inglês e métricos nessas tabelas (juntamente com qualquer outra meta-informação desejada):
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),
    ....

Você entendeu a ideia...

Em seguida, sua tabela de usuários fará referência à altura e peso tabelas - e possivelmente muitas outras tabelas de dimensão - 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),
    ...
);

Em seguida, para fazer uma busca por usuários entre 4 e 5 pés:
SELECT *
FROM users
JOIN height ON users.height = height.id
WHERE height.inches >= 48 AND height.inches <= 60;

Várias vantagens deste método:
  • Você não precisa duplicar o "esforço" (como se fosse um trabalho real) para fazer a conversão na exibição - basta selecionar o formato que deseja exibir!
  • Faz o preenchimento de caixas suspensas em uma seleção HTML super fácil -- apenas SELECT english FROM height ORDER BY inches , por exemplo.
  • Isso torna sua lógica para várias dimensões - incluindo as não numéricas (como signos astrológicos) obviamente semelhantes - você não tem código de caso especial em todos os lugares para cada tipo de dados.
  • Escalona muito bem
  • Facilita a adição de novas representações de seus dados (por exemplo, para adicionar a coluna 'mãos' à tabela de altura)