sql >> Databáze >  >> RDS >> Mysql

Uložení výšky a hmotnosti uživatele

Existuje několik způsobů... jedním je mít pouze dva číselné sloupce, jeden pro výšku, jeden pro váhu, a pak provést převody (pokud je to nutné) v době zobrazení. Dalším je vytvoření tabulky "výšky" a tabulky "hmotnosti", každá s primárním klíčem, který je propojen z jiné tabulky. Poté můžete do těchto tabulek uložit anglické i metrické hodnoty (spolu s dalšími metainformacemi, které chcete):

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

Máte nápad...

Potom bude vaše tabulka uživatelů odkazovat na výšku a váha tabulky – a možná i mnoho dalších tabulek dimenzí – astrologické znamení, rodinný stav atd.

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

Poté proveďte vyhledávání uživatelů mezi 4 a 5 stopami:

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

Několik výhod této metody:

  • Nemusíte duplikovat „úsilí“ (jako by to byla nějaká skutečná práce), abyste provedli převod na displeji – stačí vybrat formát, který chcete zobrazit!
  • Vyplňování rozbalovacích polí ve výběru HTML je velmi snadné – stačí SELECT english FROM height ORDER BY inches , například.
  • Vaše logika pro různé dimenze – včetně nečíselných (jako jsou astrologická znamení) je evidentně podobná – pro každý datový typ nemáte všude speciální kód případu.
  • Velmi dobře se škáluje
  • Usnadňuje přidávání nových reprezentací vašich dat (například přidání sloupce 'hands' do tabulky výšky)


  1. Migrace z MariaDB na MySQL - rozdíly

  2. jaký je rozdíl mezi „změnit přejmenování tabulky“ a „přejmenovat tabulku“?

  3. jak předat hodnotu null do pole cizího klíče?

  4. Concat skupiny v SQL Server