sql >> Database >  >> RDS >> Mysql

De lengte en het gewicht van de gebruiker opslaan

Er zijn verschillende manieren... de ene is om gewoon twee numerieke kolommen te hebben, één voor lengte, één voor gewicht, en dan de conversies (indien nodig) op de weergavetijd uit te voeren. Een andere is om een ​​"hoogte"-tabel en een "gewicht"-tabel te maken, elk met een primaire sleutel die is gekoppeld aan een andere tabel. Vervolgens kunt u in deze tabellen zowel Engelse als metrische waarden opslaan (samen met alle andere meta-info die u maar wilt):

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

Je snapt het idee...

Dan zal uw gebruikerstabel verwijzen naar de hoogte en gewicht tabellen - en mogelijk vele andere dimensietabellen - astrologisch teken, burgerlijke staat, enz.

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

Om vervolgens te zoeken naar gebruikers tussen 4 en 5 voet:

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

Verschillende voordelen van deze methode:

  • U hoeft de "inspanning" niet te dupliceren (alsof het echt werk is) om de conversie op het scherm uit te voeren - selecteer gewoon het formaat dat u wilt weergeven!
  • Het maakt het vullen van vervolgkeuzelijsten in een HTML-selectie supergemakkelijk -- gewoon SELECT english FROM height ORDER BY inches , bijvoorbeeld.
  • Het maakt je logica voor verschillende dimensies - inclusief niet-numerieke dimensies (zoals astrologische tekens) duidelijk vergelijkbaar - je hebt niet overal speciale hoofdlettercodes voor elk gegevenstype.
  • Het schaalt heel goed
  • Het maakt het gemakkelijk om nieuwe representaties van uw gegevens toe te voegen (bijvoorbeeld om de kolom 'handen' toe te voegen aan de hoogtetabel)


  1. Waarden doorgeven aan MySQL IN-bewerking in door PDO voorbereide instructie?

  2. steden en afstand op breedtegraad-lengtegraad

  3. MySQL haalt ontbrekende ID's uit de tabel

  4. Hoe te groeperen op jaar in T-SQL