ENUM डेटा टाइप से 5-स्टार रेटिंग लागू करें
निश्चित विकल्पों (1-5 स्टार) वाले रेटिंग कॉलम के लिए ENUM डेटा टाइप आदर्श है। यह स्टोरेज बचाता है, डेटा अखंडता सुनिश्चित करता है, और क्वेरी सरल बनाता है।
टेबल बनाना
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'), ('3'), ('1'), ('3'), ('4');
डेटा देखना
mysql> SELECT * FROM DemoTable;
+----+------------+
| Id | UserRating |
+----+------------+
| 1 | 5 |
| 2 | 3 |
| 3 | 1 |
| 4 | 3 |
| 5 | 4 |
+----+------------+
ENUM के लाभ
| लाभ | विवरण |
|---|---|
| डेटा अखंडता | केवल सूचीबद्ध मान स्वीकार करता है |
| कॉम्पैक्ट स्टोरेज | 1-2 बाइट्स (मानों की संख्या पर निर्भर) |
| तेज़ तुलना | आंतरिक रूप से इंटीजर के रूप में संग्रहीत |
| स्वचालित सॉर्ट | परिभाषा क्रम में सॉर्ट होता है |
क्वेरी उदाहरण
-- औसत रेटिंग (CAST आवश्यक)
SELECT AVG(CAST(UserRating AS UNSIGNED)) FROM DemoTable;
-- रेटिंग वितरण
SELECT UserRating, COUNT(*) FROM DemoTable GROUP BY UserRating;
-- 4+ स्टार रेटिंग
SELECT * FROM DemoTable WHERE UserRating IN ('4', '5');
वैकल्पिक: TINYINT
UserRating TINYINT UNSIGNED CHECK (UserRating BETWEEN 1 AND 5)
पक्ष: गणना आसान, मानक SQL
विपक्ष: डेटाबेस स्तर पर मान प्रतिबंध नहीं (CHECK कंस्ट्रेंट MySQL 8.0.16+ में लागू)
सर्वोत्तम अभ्यास
- सरल रेटिंग के लिए ENUM ठीक है
- यदि रेटिंग स्केल बदल सकता है, तो TINYINT + CHECK कंस्ट्रेंट या लुकअप टेबल बेहतर
- औसत गणना के लिए CAST आवश्यक है