ในฐานะ System Specialist การทำความเข้าใจรากฐานของประเภทข้อมูล (Data Types) ถือเป็นทักษะที่สำคัญที่สุดในการออกแบบระบบที่แข็งแกร่งและมีประสิทธิภาพสูง ไม่ว่าจะเป็นการเขียนโค้ดด้วยภาษาใดก็ตาม แนวคิดเรื่องการกำหนดประเภทข้อมูลที่ชัดเจน (Strong Typing) คือกุญแจสำคัญในการป้องกันข้อผิดพลาดระดับหน่วยความจำ (Memory Safety) และการทำงานที่คาดเดาไม่ได้
บทความนี้จะพาคุณไปเจาะลึกแนวคิดของ Data Types ในภาษา Rust โดยเน้นการจำแนกประเภทข้อมูลออกเป็นสองกลุ่มหลัก คือ Scalar Types และ Compound Types ซึ่งเป็นหลักการที่สามารถนำไปประยุกต์ใช้ในการออกแบบฐานข้อมูลและระบบหลังบ้านด้วย PostgreSQL ได้อย่างมีประสิทธิภาพ
💡 หลักการพื้นฐาน: Scalar vs. Compound
การจำแนกประเภทข้อมูลเป็นรากฐานที่ช่วยให้เราทราบว่าค่าที่เรากำลังจัดการนั้นเป็นค่าที่แยกย่อยไม่ได้ (Atomic) หรือเป็นโครงสร้างที่รวมค่าหลายอย่างเข้าด้วยกัน
1. Scalar Types (ค่าเดี่ยว)
Scalar Types คือค่าข้อมูลพื้นฐานที่ถือเป็นหน่วยเดียวและไม่สามารถแยกย่อยออกไปได้อีก การเข้าใจประเภทเหล่านี้ช่วยให้เราเลือกใช้พื้นที่จัดเก็บที่เหมาะสมที่สุด
- Integers (จำนวนเต็ม): ใช้แทนตัวเลขจำนวนเต็ม เช่น `i32`, `i64` (เทียบได้กับ `INT` หรือ `BIGINT` ใน PostgreSQL)
- Floats (จำนวนทศนิยม): ใช้แทนตัวเลขที่มีจุดทศนิยม เช่น `f64` (เทียบได้กับ `DOUBLE PRECISION` ใน PostgreSQL)
- Booleans (ค่าความจริง): ใช้แทนค่าความจริงเท่านั้น คือ `true` หรือ `false` (เทียบได้กับ `BOOLEAN` ใน PostgreSQL)
- Characters (อักขระ): ใช้แทนตัวอักษรเดี่ยว ๆ (เทียบได้กับ `CHAR` หรือ `TEXT` ใน PostgreSQL)
2. Compound Types (โครงสร้างรวม)
Compound Types คือการนำค่า Scalar หลายค่ามาจัดกลุ่มรวมกันเพื่อสร้างโครงสร้างข้อมูลที่ซับซ้อนขึ้น ทำให้เราสามารถจัดเก็บข้อมูลที่มีความสัมพันธ์กันไว้ด้วยกัน
- Tuples: เป็นการรวมกลุ่มค่าที่มีประเภทข้อมูลแตกต่างกันหลายตัว โดยไม่จำเป็นต้องมีขนาดคงที่ (เช่น `(i32, f64, bool)`)
- Arrays: เป็นการรวมกลุ่มของค่าที่มีประเภทข้อมูลเดียวกันและมีขนาดที่ยืดหยุ่น (เช่น `[i32; 5]`)
💾 ตัวอย่างการใช้งานในบริบท PostgreSQL
แม้ว่า Rust จะใช้ไวยากรณ์เฉพาะของตนเอง แต่หลักการของ Data Types เหล่านี้สามารถจำลองและใช้งานได้จริงใน PostgreSQL เพื่อให้เห็นภาพการจัดการข้อมูลที่สมบูรณ์:
SQL
-- 1. การประกาศและใช้งาน Scalar Types (เทียบเคียงกับ Rust) --
SELECT
30 AS age_integer, -- Integer (i32/i64)
3.14159 AS pi_float, -- Float (f64)
TRUE AS is_active_boolean, -- Boolean
'A' AS initial_char; -- Character/Text
-- 2. การใช้งาน Compound Types --
-- Array: กลุ่มของค่าประเภทเดียวกัน
SELECT
ARRAY[1, 2, 3, 4] AS integer_array,
ARRAY['apple', 'banana', 'orange'] AS text_array;
-- Note: PostgreSQL ใช้ JSONB หรือ Composite Type สำหรับการจำลอง Tuple/Struct ที่ซับซ้อนกว่า
✅ บทสรุป: ความสำคัญในการออกแบบระบบ
การเข้าใจความแตกต่างระหว่าง Scalar และ Compound Types ไม่ใช่แค่การท่องจำไวยากรณ์ แต่คือการคิดอย่างเป็นสถาปนิก (Architectural Thinking) ว่าข้อมูลแต่ละส่วนควรถูกจัดเก็บและเรียกใช้ในรูปแบบใด การเลือกใช้ประเภทข้อมูลที่เหมาะสมที่สุดจะช่วยให้โค้ดของเรามีประสิทธิภาพสูงสุด ลดโอกาสเกิดข้อผิดพลาด และทำให้ระบบโดยรวมมีความน่าเชื่อถือสูง (High Reliability) เสมอ