Có một số cách ... một là chỉ có hai cột số, một cho chiều cao, một cho cân nặng, sau đó thực hiện chuyển đổi (nếu cần) tại thời điểm hiển thị. Cách khác là tạo bảng "chiều cao" và bảng "trọng lượng", mỗi bảng có một khóa chính được liên kết từ bảng khác. Sau đó, bạn có thể lưu trữ cả giá trị tiếng Anh và số liệu trong các bảng này (cùng với bất kỳ thông tin meta nào khác mà bạn muốn):
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),
....
Bạn có được ý tưởng ...
Sau đó, bảng người dùng của bạn sẽ tham chiếu đến chiều cao và trọng lượng bảng - và có thể nhiều bảng kích thước khác - dấu hiệu chiêm tinh, tình trạng hôn nhân, v.v.
CREATE TABLE users (
uid SERIAL PRIMARY KEY,
height INT REFERENCES height(id),
weight INT references weight(id),
sign INT references sign(id),
...
);
Sau đó, để thực hiện tìm kiếm người dùng từ 4 đến 5 feet:
SELECT *
FROM users
JOIN height ON users.height = height.id
WHERE height.inches >= 48 AND height.inches <= 60;
Một số ưu điểm của phương pháp này:
- Bạn không cần phải lặp lại "nỗ lực" (như thể đó là bất kỳ công việc thực sự nào) để thực hiện chuyển đổi trên màn hình - chỉ cần chọn định dạng bạn muốn hiển thị!
- Nó làm cho việc điền các hộp thả xuống trong HTML select trở nên cực kỳ dễ dàng - chỉ cần
SELECT english FROM height ORDER BY inches
chẳng hạn. - Nó làm cho logic của bạn đối với các thứ nguyên khác nhau - bao gồm cả các thứ nguyên không phải số (như các dấu hiệu chiêm tinh) rõ ràng là tương tự - bạn không có mã viết hoa đặc biệt cho mỗi loại dữ liệu.
- Quy mô rất tốt
- Nó giúp bạn dễ dàng thêm các đại diện mới cho dữ liệu của mình (ví dụ:thêm cột 'tay' vào bảng chiều cao)