Ada beberapa cara... salah satunya adalah dengan hanya memiliki dua kolom numerik, satu untuk tinggi, satu untuk berat, lalu lakukan konversi (jika perlu) pada waktu tampilan. Cara lainnya adalah membuat tabel "tinggi" dan tabel "berat", masing-masing dengan kunci utama yang ditautkan dari tabel lain. Kemudian Anda dapat menyimpan nilai bahasa Inggris dan metrik dalam tabel ini (bersama dengan info meta lain yang Anda inginkan):
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),
....
Anda mendapatkan idenya...
Kemudian tabel pengguna Anda akan mereferensikan tinggi dan berat tabel--dan mungkin banyak tabel dimensi lainnya--tanda astrologi, status perkawinan, dll.
CREATE TABLE users (
uid SERIAL PRIMARY KEY,
height INT REFERENCES height(id),
weight INT references weight(id),
sign INT references sign(id),
...
);
Kemudian untuk melakukan pencarian pengguna antara 4 dan 5 kaki:
SELECT *
FROM users
JOIN height ON users.height = height.id
WHERE height.inches >= 48 AND height.inches <= 60;
Beberapa keuntungan dari metode ini:
- Anda tidak perlu menduplikasi "usaha" (seolah-olah itu adalah pekerjaan nyata) untuk melakukan konversi pada tampilan--cukup pilih format yang ingin Anda tampilkan!
- Itu membuat mengisi kotak drop-down dalam HTML pilih super mudah--cukup
SELECT english FROM height ORDER BY inches
, misalnya. - Itu membuat logika Anda untuk berbagai dimensi--termasuk yang non-numerik (seperti tanda astrologi) jelas serupa--Anda tidak memiliki kode kasus khusus di semua tempat untuk setiap jenis data.
- Skalanya sangat bagus
- Memudahkan untuk menambahkan representasi baru dari data Anda (misalnya, untuk menambahkan kolom 'tangan' ke tabel ketinggian)