ทำความเข้าใจ Relational Database
Relational Database (ฐานข้อมูลแบบมีความสัมพันธ์) คือที่เก็บข้อมูลที่จัดระเบียบข้อมูลไว้เป็นตารางคล้ายกับโปรแกรม Excel โดยข้อมูลแต่ละตารางจะมีความเชื่อมโยงกันผ่านจุดร่วมบางอย่าง ทำให้เราสามารถดึงข้อมูลที่ซับซ้อนออกมาใช้งานได้ง่ายขึ้น มันเป็นหัวใจสำคัญที่โปรแกรมเมอร์ใช้เก็บข้อมูลผู้ใช้งานหรือสินค้าในแอปพลิเคชันส่วนใหญ่ที่คุณเห็นในปัจจุบัน
ลองนึกภาพสมุดโทรศัพท์ที่คุณจดชื่อเพื่อนไว้ในหน้าหนึ่ง แล้วจดเบอร์โทรศัพท์ไว้ในอีกหน้าหนึ่ง ถ้าคุณอยากรู้ว่าเพื่อนคนไหนใช้เบอร์อะไร คุณต้องดูชื่อในหน้าแรกแล้วไปเทียบกับเบอร์ในหน้าหลัง ฐานข้อมูลประเภทนี้ทำงานแบบเดียวกันเป๊ะ มันจะแยกข้อมูลออกเป็นส่วนๆ เพื่อไม่ให้ข้อมูลซ้ำซ้อนกันจนเกินไป
การเข้าใจเรื่องนี้สำคัญมากสำหรับมือใหม่ เพราะถ้าคุณไม่รู้จักวิธีจัดการข้อมูลอย่างเป็นระบบ แอปพลิเคชันของคุณจะช้าและข้อมูลจะมั่วไปหมด การเรียนรู้เรื่อง Schema (โครงสร้างของฐานข้อมูล) จะช่วยให้คุณออกแบบระบบที่ขยายตัวได้ในอนาคตเมื่อมีผู้ใช้งานเพิ่มขึ้นหลักพันหรือหลักล้านคน
โครงสร้างของตารางและข้อมูล
หัวใจหลักของฐานข้อมูลคือ Table (ตารางเก็บข้อมูล) ซึ่งประกอบไปด้วย Row (แถวที่เป็นข้อมูลของหนึ่งรายการ) และ Column (คอลัมน์ที่เป็นหัวข้อของข้อมูลนั้น) แต่ละตารางจะมีสิ่งที่เรียกว่า Primary Key (รหัสประจำตัวที่ไม่ซ้ำใคร) เพื่อใช้ระบุตัวตนของข้อมูลในแถวนั้นๆ ได้อย่างแม่นยำ
สมมติว่าเราทำระบบร้านค้าออนไลน์ เราต้องมีตารางสำหรับเก็บข้อมูลลูกค้าและตารางสำหรับเก็บรายการสั่งซื้อ ในตารางลูกค้าเราจะมีรหัสลูกค้าเป็นตัวระบุตัวตน ส่วนในตารางสั่งซื้อ เราจะใส่รหัสลูกค้านี้ลงไปเพื่อบอกว่าใครเป็นคนซื้อสินค้านี้ การเชื่อมโยงนี้เรียกว่า Foreign Key (กุญแจเชื่อมโยงระหว่างตาราง)
ความผิดพลาดที่มือใหม่มักเจอคือการพยายามยัดข้อมูลทุกอย่างลงในตารางเดียว วิธีนี้จะทำให้ข้อมูลซ้ำซ้อนและแก้ไขยากในภายหลัง เช่น ถ้าลูกค้าเปลี่ยนชื่อ คุณต้องไปไล่แก้ในทุกรายการสั่งซื้อที่ลูกค้าคนนั้นเคยทำไว้ ซึ่งเป็นเรื่องที่อันตรายและเสียเวลามาก
- สร้างตารางลูกค้า (Users) กำหนดให้มีคอลัมน์ id เป็นเลขรหัสประจำตัว
- สร้างตารางสั่งซื้อ (Orders) กำหนดให้มีคอลัมน์ user_id เพื่ออ้างอิงกลับไปยังรหัสลูกค้า
- เมื่อต้องการรู้ว่าใครสั่งซื้ออะไร ให้ใช้คำสั่งเชื่อมตารางเพื่อดึงข้อมูลจากทั้งสองที่มาแสดงผลพร้อมกัน
การใช้ภาษา SQL เพื่อคุยกับฐานข้อมูล
ภาษาที่เราใช้สั่งงานฐานข้อมูลกลุ่มนี้เรียกว่า SQL (ภาษาสำหรับจัดการฐานข้อมูล) มันเป็นภาษาที่มีโครงสร้างใกล้เคียงกับภาษาอังกฤษมาก ทำให้เรียนรู้ได้ไม่ยากนัก คุณจะใช้มันเพื่อเพิ่มข้อมูล ลบข้อมูล หรือดึงข้อมูลออกมาแสดงผลตามเงื่อนไขที่คุณต้องการ
ลองดูตัวอย่างคำสั่งพื้นฐานในการดึงข้อมูลออกมาใช้งานกันครับ คำสั่ง SELECT (สั่งเลือกข้อมูล) เป็นคำสั่งที่โปรแกรมเมอร์ใช้บ่อยที่สุด เพื่อนำข้อมูลไปแสดงหน้าเว็บหรือแอปพลิเคชันของคุณ ถ้าคุณเขียนโค้ดได้ถูกต้อง ฐานข้อมูลจะส่งข้อมูลกลับมาในรูปแบบที่โปรแกรมของคุณเอาไปใช้งานต่อได้ทันที
-- เลือกชื่อและอีเมลจากตารางผู้ใช้งาน
SELECT name, email
FROM users
WHERE id = 1;
-- อธิบายโค้ด:
-- SELECT บอกว่าจะเอาคอลัมน์ไหนบ้าง
-- FROM บอกว่าจะเอาจากตารางอะไร
-- WHERE บอกเงื่อนไขว่าเอาเฉพาะคนที่มี id เป็น 1
จุดที่มือใหม่มักพลาดคือการเขียนคำสั่ง SELECT * (เลือกทุกคอลัมน์) โดยไม่จำเป็น การทำแบบนี้จะทำให้แอปพลิเคชันของคุณดึงข้อมูลมามากเกินความจำเป็นและทำงานช้าลง ให้เลือกเฉพาะคอลัมน์ที่ต้องใช้จริงๆ เท่านั้นเพื่อผลลัพธ์ที่ดีที่สุด
ความสัมพันธ์ของข้อมูลในรูปแบบต่างๆ
ความสัมพันธ์ของข้อมูลมี 3 รูปแบบหลักที่คุณต้องรู้จัก คือ One-to-One (หนึ่งต่อหนึ่ง), One-to-Many (หนึ่งต่อหลาย) และ Many-to-Many (หลายต่อหลาย) การเลือกใช้รูปแบบให้ถูกต้องจะช่วยให้การออกแบบฐานข้อมูลของคุณมีประสิทธิภาพและไม่เกิดข้อผิดพลาดในการดึงข้อมูล
รูปแบบ One-to-Many เป็นสิ่งที่พบบ่อยที่สุด เช่น ลูกค้าหนึ่งคนสามารถสั่งซื้อสินค้าได้หลายรายการ แต่รายการสั่งซื้อหนึ่งรายการต้องเป็นของลูกค้าคนเดียวเท่านั้น การเข้าใจความสัมพันธ์นี้จะช่วยให้คุณวางโครงสร้างตารางได้ถูกต้องตั้งแต่เริ่มทำโปรเจกต์แรก
ถ้าคุณออกแบบผิด เช่น ออกแบบให้ลูกค้าหนึ่งคนสั่งได้แค่หนึ่งรายการ คุณจะต้องเขียนโค้ดที่ซับซ้อนมากเพื่อแก้ปัญหาในภายหลัง ดังนั้นก่อนเริ่มเขียนโค้ด ให้ลองวาดรูปความสัมพันธ์ใส่กระดาษก่อนเสมอว่าตารางแต่ละตารางมันเชื่อมโยงกันอย่างไร
เคล็ดลับ: ลองฝึกวาด ER Diagram (แผนผังแสดงความสัมพันธ์ของข้อมูล) ง่ายๆ ด้วยกระดาษและปากกาก่อนเริ่มเขียนโค้ดจริงทุกครั้ง
เครื่องมือที่ต้องใช้ในการฝึกฝน
สำหรับการเริ่มต้น คุณควรติดตั้ง Database Management System (โปรแกรมจัดการฐานข้อมูล) เช่น PostgreSQL หรือ MySQL ไว้ในเครื่องคอมพิวเตอร์ของคุณ โปรแกรมเหล่านี้จะช่วยให้คุณสร้างฐานข้อมูลและทดลองเขียนคำสั่ง SQL ได้อย่างอิสระโดยไม่ต้องเสียค่าใช้จ่าย
นอกจากตัวฐานข้อมูลแล้ว คุณควรใช้ GUI Tool (โปรแกรมที่มีหน้าจอให้คลิกใช้งานแทนการพิมพ์คำสั่ง) เช่น DBeaver หรือ TablePlus เครื่องมือเหล่านี้จะช่วยให้คุณมองเห็นข้อมูลในตารางได้ชัดเจนเหมือนใช้ Excel ทำให้การตรวจสอบข้อมูลที่บันทึกเข้าไปทำได้ง่ายขึ้นมาก
อย่าเพิ่งรีบไปใช้เครื่องมือที่ซับซ้อนเกินไปในช่วงแรก ให้ฝึกพิมพ์คำสั่ง SQL ผ่าน Terminal (หน้าจอพิมพ์คำสั่ง) หรือเครื่องมือพื้นฐานก่อน เพราะจะทำให้คุณเข้าใจพื้นฐานการทำงานของมันจริงๆ เมื่อคุณเข้าใจแล้ว การใช้เครื่องมือช่วยจะทำให้คุณทำงานเร็วขึ้นอย่างเห็นได้ชัด
-- ตัวอย่างการสร้างตารางแบบง่าย
CREATE TABLE users (
id SERIAL PRIMARY KEY, -- สร้างรหัสอัตโนมัติ
username VARCHAR(50) -- เก็บชื่อผู้ใช้สูงสุด 50 ตัวอักษร
);
สรุปและแนวทางการนำไปใช้จริง
การเข้าใจ Relational Database ไม่ใช่แค่เรื่องของการเก็บข้อมูล แต่เป็นเรื่องของการออกแบบโครงสร้างที่ทำให้ซอฟต์แวร์ของคุณเติบโตได้ เมื่อคุณเริ่มทำโปรเจกต์ ให้เริ่มจากการถามตัวเองว่าข้อมูลอะไรบ้างที่ต้องเก็บ และข้อมูลเหล่านั้นมีความสัมพันธ์กันอย่างไรบ้าง
สมมติว่าคุณกำลังทำเว็บรวมสูตรอาหาร คุณต้องมีตารางเก็บชื่อสูตรอาหาร ตารางเก็บชื่อวัตถุดิบ และตารางที่เชื่อมว่าสูตรอาหารไหนใช้วัตถุดิบอะไรบ้าง การแยกตารางแบบนี้จะทำให้คุณสามารถค้นหาสูตรอาหารจากวัตถุดิบที่มีอยู่ในตู้เย็นได้ง่ายๆ ซึ่งเป็นฟีเจอร์ที่น่าสนใจสำหรับ Portfolio ของคุณ
สุดท้ายนี้ อย่ากลัวที่จะลองผิดลองถูกในฐานข้อมูลจำลอง ให้ลองสร้างตารางขึ้นมาหลายๆ แบบแล้วทดลองดึงข้อมูลออกมาดูว่าได้ผลลัพธ์ตามที่คิดไหม การทำแบบนี้บ่อยๆ จะทำให้คุณเก่งขึ้นและพร้อมก้าวสู่การเป็นโปรแกรมเมอร์มืออาชีพที่จัดการข้อมูลได้อย่างแม่นยำครับ