Enum คือ
Enum หรือ Enumerated Type ใน PostgreSQL เป็นเสมือนเซ็ตค่าที่กำหนดไว้ล่วงหน้า ช่วยให้คุณจำกัดข้อมูลในคอลัมน์ให้อยู่ในกรอบที่ต้องการ นึกภาพว่าคุณมีตู้เสื้อผ้าที่มีช่องเฉพาะสำหรับเสื้อผ้าแต่ละประเภท - นั่นแหละคือแนวคิดของ Enum!
ตัวอย่างที่พบบ่อย:
- วันในสัปดาห์: จันทร์, อังคาร, พุธ, ...
- สถานะการส่งสินค้า: กำลังแพ็คของ, กำลังจัดส่ง, จัดส่งสำเร็จ
- ระดับความสำคัญของงาน: ต่ำ, ปานกลาง, สูง
การจัดการ Enum
1.การสร้างประเภทข้อมูล Enum
CREATE TYPE mood AS ENUM ('happy', 'neutral', 'sad');
คำสั่งนี้สร้าง Enum ชื่อ 'mood' ที่มีค่าเป็นไปได้ 3 ค่า
โดยสามารถตรวจสอบ type ที่สรา้งขึ้นผ่านคำสั่ง
SELECT n.nspname as enum_schema,
t.typname as enum_name,
e.enumlabel as enum_value
FROM pg_type t
JOIN pg_enum e ON t.oid = e.enumtypid
JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace;
จะแสดงรายการ
2.การนำ Enum ไปใช้ในตารางข้อมูล
เราสามารถใช้งานมันในตารางได้เหมือนกับประเภทข้อมูลอื่นๆ เพียงระบุชื่อ Enum ในนิยามคอลัมน์
CREATE TABLE daily_log (
id SERIAL PRIMARY KEY,
date DATE NOT NULL,
user_mood mood NOT NULL DEFAULT 'happy'
);
เป็นการสรา้งตาราง daily_log โดยคอลัมน์ user_mood ซึ่งเป็นประเภทข้อมูล mood Enum ที่สร้างไว้ก่อนหน้า
3.การเพิ่มข้อมูลโดยใช้ Enum
INSERT INTO daily_log (date, user_mood) VALUES
('2024-07-12', 'happy'),
('2024-07-13', 'neutral'),
('2024-07-14', 'sad');
4.การค้นหาข้อมูลโดยใช้ Enum
-- หาบันทึกทั้งหมดที่ผู้ใช้มีความรู้สึกมีความสุข
SELECT * FROM daily_log WHERE user_mood = 'happy';
-- หาบันทึกที่ผู้ใช้ไม่มีความสุข
SELECT * FROM daily_log WHERE user_mood != 'happy';
5.การอัปเดตข้อมูลใน Enum
การอัปเดตข้อมูลในคอลัมน์ Enum เช่นเดียวกับคอลัมน์ประเภทข้อมูลอื่นๆ
UPDATE daily_log
SET mood = 'happy'
WHERE id = 3;
ตัวอย่างข้างต้นเปลี่ยนแปลง user_mood ในตาราง dialy_log ที่มีค่า id 3 เป็น happy
6.การลบ Enum
การลบ Enum ได้ด้วยคำสั่ง DROP TYPE
DROP TYPE mood;
อย่างไรก็ตาม โปรดทราบว่าการลบ Enum จะลบการอ้างอิงทั้งหมดในตารางออกด้วย
เทคนิคการใช้ Enum
การตรวจสอบ
-- ตรวจสอบว่าค่าอยู่ใน Enum หรือไม่
SELECT 'happy'::mood; -- ทำงานได้
SELECT 'excited'::mood; -- เกิด error
-- ดึงรายการค่าทั้งหมดของ Enum
SELECT enum_range(NULL::mood);
การเปรียบเทียบและเรียงลำดับใน Eum
การเรียงลำดับค่า Enum ตามที่ประกาศไว้ เช่นเมื่อเราประกาศ type enum
--จากenum mood ที่สร้างขึ้นค่า 'happy' จะถูกเรียงลำดับก่อน 'neutral'
--และ 'neutral'จะถูกเรียงลำดับก่อน'sad'
-- หาบันทึกที่มีความรู้สึกดีกว่า 'neutral'
SELECT * FROM daily_log WHERE user_mood > 'neutral';
-- หาบันทึกที่มีความรู้สึกที่ไม่ใช่ 'sad'
SELECT * FROM daily_log WHERE user_mood <> 'sad';
--เรียงบันทึกความรู้สึกจาก happy ไปถึง sad
SELECT * FROM daily_log ORDER BY user_mood;
ฟังก์ชัน Enum ในตัว
ใน Postgres มีฟังก์ชันตัวในการจัดการกับ Enum ฟังก์ชันเหล่านี้ช่วยให้คุณสามารถตรวจสอบว่าค่าอยู่ใน Enum หรือไม่ แปลงค่าเป็นตัวอักษร หรือดึงรายการค่าที่เป็นไปได้ทั้งหมด
- has_any_status(status_array, status): ตรวจสอบว่าค่าใดๆ ใน status_array อยู่ใน status หรือไม่
-has_status(status, value): ตรวจสอบว่า value อยู่ใน status หรือไม่
- enum_label(status, value): แปลง value เป็นตัวอักษร
- enum_range(status): ดึงรายการค่าที่เป็นไปได้ทั้งหมดของ status
บทสรุป: Enum - เครื่องมือทรงพลังสำหรับฐานข้อมูลของคุณ
Enum ใน PostgreSQL เป็นเหมือนกล่องเครื่องมือพิเศษที่ช่วยให้คุณจัดการข้อมูลได้อย่างมีประสิทธิภาพ ปลอดภัย และชัดเจน แม้จะมีข้อจำกัดบ้าง แต่ด้วยการใช้งานอย่างชาญฉลาด Enum สามารถยกระดับการทำงานกับฐานข้อมูลของคุณได้อย่างมาก
ลองนำ Enum ไปใช้ในโปรเจกต์ถัดไปของคุณ และสัมผัสถึงความแตกต่างด้วยตัวคุณเอง!สำหรับคอลัมน์ที่มีค่าจำนวนมาก
โดยรวมแล้ว Enum เป็นเครื่องมือที่มีประสิทธิภาพสำหรับการจัดเก็บข้อมูลประเภทหมวดหมู่ใน Postgres ช่วยให้มั่นใจได้ว่าข้อมูลถูกต้อง ชัดเจน และง่ายต่อการจัดการ
Top comments (0)