ชนิดข้อมูลที่เหมาะสมสำหรับ Rating 5 ดาวใน MySQL
ใช้ ENUM('1','2','3','4','5') เพื่อจำกัดค่าได้เฉพาะ 1-5 เท่านั้น ป้องกันข้อมูลผิดพลาด
ตัวอย่างการใช้งาน
สร้างตารางมีคอลัมน์ Rating:
mysql> create table DemoTable (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserRating ENUM('1','2','3','4','5')
);
เพิ่มข้อมูล:
mysql> insert into DemoTable(UserRating) values('5');
mysql> insert into DemoTable(UserRating) values('3');
mysql> insert into DemoTable(UserRating) values('1');
mysql> insert into DemoTable(UserRating) values('3');
mysql> insert into DemoTable(UserRating) values('4');
ข้อมูล:
+----+------------+ | Id | UserRating | +----+------------+ | 1 | 5 | | 2 | 3 | | 3 | 1 | | 4 | 3 | | 5 | 4 | +----+------------+
ลองใส่ค่าผิด (Error):
mysql> insert into DemoTable(UserRating) values('6');
ERROR 1265 (01000): Data truncated for column 'UserRating' at row 1
ตัวเลือกอื่นและการเปรียบเทียบ:
| Type | Storage | Validation | Sorting | Math Ops |
|---|---|---|---|---|
| ENUM('1','2','3','4','5') | 1-2 bytes | Strict (Error) | ตามลำดับ Enum | ต้อง CAST |
| TINYINT UNSIGNED | 1 byte | ต้อง CHECK Constraint (8.0+) | ตัวเลขธรรมดา | ได้เลย |
| TINYINT + CHECK (rating BETWEEN 1 AND 5) | 1 byte | Strict (8.0+) | ตัวเลขธรรมดา | ได้เลย |
แนะนำ (MySQL 8.0+): ใช้ TINYINT UNSIGNED + CHECK (rating BETWEEN 1 AND 5) - ประหยัดพื้นที่ คำนวณได้ง่าย Validate ได้
rating TINYINT UNSIGNED CHECK (rating BETWEEN 1 AND 5)