Jest kilka sposobów… jeden to po prostu dwie kolumny liczbowe, jedna dla wzrostu, jedna dla wagi, a następnie wykonanie konwersji (jeśli to konieczne) w czasie wyświetlania. Innym jest utworzenie tabeli „wzrost” i „waga”, każda z kluczem podstawowym, który jest powiązany z inną tabelą. Następnie możesz przechowywać w tych tabelach zarówno angielskie, jak i metryczne wartości (wraz z dowolnymi innymi metainformacjami, które chcesz):
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),
....
Masz pomysł...
Wtedy tabela użytkowników będzie odnosić się do wysokości i waga tabele — i prawdopodobnie wiele innych tabel wymiarów — znak zodiaku, stan cywilny itp.
CREATE TABLE users (
uid SERIAL PRIMARY KEY,
height INT REFERENCES height(id),
weight INT references weight(id),
sign INT references sign(id),
...
);
Następnie, aby wyszukać użytkowników o długości od 4 do 5 stóp:
SELECT *
FROM users
JOIN height ON users.height = height.id
WHERE height.inches >= 48 AND height.inches <= 60;
Kilka zalet tej metody:
- Nie musisz duplikować „wysiłku” (jakby to była prawdziwa praca), aby wykonać konwersję na wyświetlaczu — po prostu wybierz format, który chcesz wyświetlić!
- Dzięki temu wypełnianie pól rozwijanych w kodzie HTML jest bardzo łatwe — wystarczy
SELECT english FROM height ORDER BY inches
na przykład. - To sprawia, że logika dla różnych wymiarów — w tym nienumerycznych (takich jak znaki astrologiczne) — jest oczywiście podobna — nie masz w każdym miejscu specjalnego kodu dla każdego typu danych.
- Skaluje się naprawdę dobrze
- Ułatwia dodawanie nowych reprezentacji danych (na przykład dodanie kolumny „ręce” do tabeli wzrostu)