DEV Community

Cover image for การจัดการ Enum ใน PostgreSQL: เพื่อประสิทธิภาพและความชัดเจนให้ฐานข้อมูลของคุณ
iconnext for ใดๆในโลกล้วน Postgres

Posted on • Edited on

การจัดการ Enum ใน PostgreSQL: เพื่อประสิทธิภาพและความชัดเจนให้ฐานข้อมูลของคุณ

Enum คือ

Enum หรือ Enumerated Type ใน PostgreSQL เป็นเสมือนเซ็ตค่าที่กำหนดไว้ล่วงหน้า ช่วยให้คุณจำกัดข้อมูลในคอลัมน์ให้อยู่ในกรอบที่ต้องการ นึกภาพว่าคุณมีตู้เสื้อผ้าที่มีช่องเฉพาะสำหรับเสื้อผ้าแต่ละประเภท - นั่นแหละคือแนวคิดของ Enum!
ตัวอย่างที่พบบ่อย:

  • วันในสัปดาห์: จันทร์, อังคาร, พุธ, ...
  • สถานะการส่งสินค้า: กำลังแพ็คของ, กำลังจัดส่ง, จัดส่งสำเร็จ
  • ระดับความสำคัญของงาน: ต่ำ, ปานกลาง, สูง

การจัดการ Enum

1.การสร้างประเภทข้อมูล Enum

CREATE TYPE mood AS ENUM ('happy', 'neutral', 'sad');
Enter fullscreen mode Exit fullscreen mode

คำสั่งนี้สร้าง 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;
Enter fullscreen mode Exit fullscreen mode

จะแสดงรายการ

2.การนำ Enum ไปใช้ในตารางข้อมูล

เราสามารถใช้งานมันในตารางได้เหมือนกับประเภทข้อมูลอื่นๆ เพียงระบุชื่อ Enum ในนิยามคอลัมน์

CREATE TABLE daily_log (
    id SERIAL PRIMARY KEY,
    date DATE NOT NULL,
    user_mood mood NOT NULL DEFAULT 'happy'
);
Enter fullscreen mode Exit fullscreen mode

เป็นการสรา้งตาราง 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');
Enter fullscreen mode Exit fullscreen mode

4.การค้นหาข้อมูลโดยใช้ Enum

-- หาบันทึกทั้งหมดที่ผู้ใช้มีความรู้สึกมีความสุข
SELECT * FROM daily_log WHERE user_mood = 'happy';

-- หาบันทึกที่ผู้ใช้ไม่มีความสุข
SELECT * FROM daily_log WHERE user_mood != 'happy';
Enter fullscreen mode Exit fullscreen mode

5.การอัปเดตข้อมูลใน Enum

การอัปเดตข้อมูลในคอลัมน์ Enum เช่นเดียวกับคอลัมน์ประเภทข้อมูลอื่นๆ

UPDATE daily_log
SET mood = 'happy'
WHERE id = 3;
Enter fullscreen mode Exit fullscreen mode

ตัวอย่างข้างต้นเปลี่ยนแปลง user_mood ในตาราง dialy_log ที่มีค่า id 3 เป็น happy

6.การลบ Enum

การลบ Enum ได้ด้วยคำสั่ง DROP TYPE

DROP TYPE mood;
Enter fullscreen mode Exit fullscreen mode

อย่างไรก็ตาม โปรดทราบว่าการลบ Enum จะลบการอ้างอิงทั้งหมดในตารางออกด้วย

เทคนิคการใช้ Enum

การตรวจสอบ

-- ตรวจสอบว่าค่าอยู่ใน Enum หรือไม่
SELECT 'happy'::mood;  -- ทำงานได้
SELECT 'excited'::mood;  -- เกิด error

-- ดึงรายการค่าทั้งหมดของ Enum
SELECT enum_range(NULL::mood);
Enter fullscreen mode Exit fullscreen mode

การเปรียบเทียบและเรียงลำดับใน 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;
Enter fullscreen mode Exit fullscreen mode

ฟังก์ชัน 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 ช่วยให้มั่นใจได้ว่าข้อมูลถูกต้อง ชัดเจน และง่ายต่อการจัดการ

Warp.dev image

Warp is the #1 coding agent.

Warp outperforms every other coding agent on the market, and gives you full control over which model you use. Get started now for free, or upgrade and unlock 2.5x AI credits on Warp's paid plans.

Download Warp

Top comments (0)

Feature flag article image

Create a feature flag in your IDE in 5 minutes with LaunchDarkly’s MCP server 🏁

How to create, evaluate, and modify flags from within your IDE or AI client using natural language with LaunchDarkly's new MCP server. Follow along with this tutorial for step by step instructions.

Read full post

👋 Kindness is contagious

Take a moment to explore this thoughtful article, beloved by the supportive DEV Community. Coders of every background are invited to share and elevate our collective know-how.

A heartfelt "thank you" can brighten someone's day—leave your appreciation below!

On DEV, sharing knowledge smooths our journey and tightens our community bonds. Enjoyed this? A quick thank you to the author is hugely appreciated.

Okay