ทำความรู้จัก Database และ Schema เหมือนจัดบ้านให้เป็นระเบียบ
ก่อนจะเริ่มเขียนโปรแกรม เราต้องเข้าใจก่อนว่า PostgreSQL (ระบบจัดการฐานข้อมูลแบบโอเพนซอร์สที่นิยมใช้ทั่วโลก) เก็บข้อมูลอย่างไร เหมือนเรามีบ้านหลังใหญ่หนึ่งหลัง ซึ่งก็คือตัว Database (ฐานข้อมูลที่เก็บข้อมูลทั้งหมดของโปรเจกต์) ถ้าเราโยนทุกอย่างรวมกันในห้องเดียว ข้อมูลจะปนกันมั่วจนหาไม่เจอ
เราจึงต้องมี Schema (พื้นที่แยกส่วนภายในฐานข้อมูล) เปรียบเสมือนการกั้นห้องในบ้าน เช่น ห้องครัวเก็บอุปกรณ์ทำอาหาร ห้องนอนเก็บเสื้อผ้า การแบ่งแบบนี้ช่วยให้เราจัดกลุ่มข้อมูลที่เกี่ยวข้องกันไว้ด้วยกัน ทำให้ตอนเขียนโค้ดเรียกใช้ข้อมูลทำได้ง่ายและเป็นระเบียบมากขึ้น
ถ้าคุณกำลังฝึกทำโปรเจกต์แรก การเข้าใจเรื่องนี้สำคัญมาก เพราะถ้าคุณสร้าง Database มั่วซั่ว คุณจะจัดการสิทธิ์การเข้าถึงข้อมูลได้ยากมากในอนาคต การวางโครงสร้างที่ดีตั้งแต่วันแรกจะช่วยให้คุณทำงานร่วมกับทีมได้ง่ายขึ้นเมื่อต้องไปทำงานจริงในบริษัท
วิธีสร้าง Database แรกของคุณ
การสร้างฐานข้อมูลใน PostgreSQL เราจะใช้คำสั่ง CREATE DATABASE (คำสั่งสำหรับสร้างฐานข้อมูลใหม่) ผ่านหน้าจอ Terminal (หน้าจอพิมพ์คำสั่งสั่งงานคอมพิวเตอร์) หรือเครื่องมือจัดการฐานข้อมูลที่คุณเลือกใช้ จำไว้ว่าชื่อฐานข้อมูลควรสื่อความหมายและไม่มีช่องว่าง
ลองดูตัวอย่างการสร้างฐานข้อมูลสำหรับเก็บข้อมูลผู้ใช้งานในระบบกันครับ
-- สร้างฐานข้อมูลชื่อว่า my_app_db
CREATE DATABASE my_app_db;
ส่วนประกอบของคำสั่งนี้คือ CREATE DATABASE เป็นคำสั่งหลักที่บอกให้ระบบสร้างพื้นที่เก็บข้อมูลใหม่ และ my_app_db คือชื่อที่คุณตั้งเอง โดยทุกคำสั่ง SQL (ภาษาที่ใช้คุยกับฐานข้อมูล) ต้องจบด้วยเครื่องหมายเซมิโคลอน ; เสมอเพื่อให้ระบบรู้ว่าจบคำสั่งแล้ว
ผลลัพธ์ที่ได้จากการรันคำสั่งนี้คือ คุณจะได้ฐานข้อมูลเปล่าๆ ขึ้นมาหนึ่งอันในระบบ ซึ่งพร้อมสำหรับการใช้งาน คุณสามารถตรวจสอบว่ามันถูกสร้างขึ้นจริงไหมโดยการใช้คำสั่ง \l ใน Terminal เพื่อดูรายชื่อฐานข้อมูลทั้งหมดที่มีอยู่ในเครื่อง
การแยกส่วนข้อมูลด้วย Schemas
เมื่อเรามีฐานข้อมูลแล้ว บางครั้งเราอยากแยกข้อมูลส่วนที่เป็น User (ข้อมูลผู้ใช้งาน) กับ Product (ข้อมูลสินค้า) ออกจากกัน เราก็ใช้ CREATE SCHEMA (คำสั่งสำหรับสร้างพื้นที่จัดเก็บข้อมูลย่อย) เพื่อแยกตารางข้อมูลเหล่านั้นให้ดูสะอาดตา
ลองจินตนาการว่าคุณมีบ้านหนึ่งหลัง แต่ต้องการแบ่งโซนทำงานกับโซนพักผ่อนให้ชัดเจนด้วยการกั้นผนังห้อง นี่คือวิธีการใช้งานจริงครับ
-- สร้างห้องย่อยชื่อว่า users_data
CREATE SCHEMA users_data;
-- สร้างห้องย่อยชื่อว่า products_data
CREATE SCHEMA products_data;
คำสั่ง CREATE SCHEMA ทำหน้าที่สร้างพื้นที่เสมือนภายในฐานข้อมูลที่คุณเลือกใช้งานอยู่ การแบ่งแบบนี้ช่วยให้คุณสามารถสร้างตารางที่มีชื่อซ้ำกันได้ในคนละ Schema ทำให้การจัดการข้อมูลในโปรเจกต์ขนาดใหญ่มีความยืดหยุ่นสูงขึ้นมาก
เมื่อรันคำสั่งสำเร็จ คุณจะไม่เห็นผลลัพธ์แบบกราฟิกเด้งขึ้นมาทันที แต่ถ้าคุณลองใช้คำสั่ง \dn ใน Terminal คุณจะเห็นรายชื่อ Schema ที่คุณเพิ่งสร้างขึ้นปรากฏอยู่ในรายการ ซึ่งนั่นหมายความว่าคุณพร้อมจะสร้างตารางข้อมูลเข้าไปในห้องเหล่านั้นแล้วครับ
ข้อควรระวังเรื่อง Case Sensitivity
หนึ่งในสิ่งที่มือใหม่พลาดบ่อยที่สุดคือ Case Sensitivity (ความแตกต่างระหว่างตัวอักษรพิมพ์เล็กและพิมพ์ใหญ่) ใน PostgreSQL ชื่อฐานข้อมูลหรือชื่อ Schema ถ้าคุณพิมพ์เป็นตัวพิมพ์เล็ก ระบบจะมองว่าเป็นตัวพิมพ์เล็กทั้งหมดโดยอัตโนมัติ
ถ้าคุณเผลอสร้างชื่อฐานข้อมูลด้วยการใส่เครื่องหมายคำพูดคู่ " " ระบบจะบังคับให้ชื่อนั้นต้องเป็นไปตามตัวพิมพ์เล็กใหญ่ที่คุณพิมพ์เป๊ะๆ ซึ่งมักจะสร้างปัญหาเวลาคุณพิมพ์คำสั่งเรียกใช้ในอนาคตแล้วลืมกด Shift
คำแนะนำที่ดีที่สุดคือ ให้ใช้ตัวพิมพ์เล็กทั้งหมดและใช้เครื่องหมาย Underscore (ขีดล่าง) แทนช่องว่างเสมอ เช่น my_project_db แทนที่จะเป็น MyProjectDB เพื่อลดความผิดพลาดที่อาจเกิดขึ้นจากการพิมพ์ผิดในภายหลัง
-- แบบนี้ดีที่สุด ปลอดภัยและอ่านง่าย
CREATE DATABASE project_one;
-- แบบนี้อันตราย เพราะต้องพิมพ์ชื่อให้ตรงเป๊ะทุกครั้ง
CREATE DATABASE "Project_One";
บรรทัดแรกคือวิธีมาตรฐานที่โปรแกรมเมอร์ใช้กันทั่วไป ส่วนบรรทัดที่สองคือวิธีที่มีความเสี่ยงสูง เพราะถ้าวันหนึ่งคุณเผลอพิมพ์ project_one ระบบจะหาฐานข้อมูลชื่อ "Project_One" ไม่เจอ ทำให้เกิดข้อผิดพลาด Database does not exist (ฐานข้อมูลไม่พบในระบบ)
การลบ Database และ Schema ที่ไม่ใช้งาน
เมื่อเราฝึกหัดไปสักพัก เราอาจจะมีฐานข้อมูลขยะที่สร้างไว้ทดลองเยอะแยะไปหมด การใช้ DROP DATABASE (คำสั่งสำหรับลบฐานข้อมูลทิ้งถาวร) และ DROP SCHEMA (คำสั่งสำหรับลบพื้นที่ย่อยทิ้ง) จะช่วยให้เครื่องของคุณสะอาดและไม่งง
ต้องระวังให้มากก่อนกดลบ เพราะข้อมูลทุกอย่างข้างในจะหายไปทั้งหมดโดยไม่สามารถกู้คืนได้ง่ายๆ ดังนั้นก่อนจะลบอะไร ต้องมั่นใจว่าข้อมูลนั้นไม่ได้ใช้งานแล้วจริงๆ หรือได้สำรองข้อมูลเก็บไว้แล้ว
-- ลบฐานข้อมูลทิ้งถาวร
DROP DATABASE my_app_db;
-- ลบ Schema ทิ้งถาวร
DROP SCHEMA users_data;
คำสั่ง DROP คือการทำลายทิ้ง ข้อมูลทั้งหมดที่อยู่ภายใต้ฐานข้อมูลหรือ Schema นั้นจะถูกลบหายไปทันที หากคุณพยายามลบฐานข้อมูลที่กำลังมีคนใช้งานอยู่ ระบบจะแจ้งเตือนว่าไม่สามารถทำได้ ซึ่งเป็นการป้องกันความผิดพลาดที่ช่วยคุณไว้ได้มาก
ผลลัพธ์ที่ควรเห็นหลังจากรันคำสั่งคือ ข้อความตอบกลับจากระบบว่า DROP DATABASE หรือ DROP SCHEMA สำเร็จ หากคุณลองตรวจสอบด้วยคำสั่ง \l หรือ \dn อีกครั้ง คุณจะพบว่าชื่อเหล่านั้นหายไปจากรายการแล้วครับ
สรุป: การนำไปใช้จริงในโปรเจกต์
ตอนนี้คุณรู้วิธีสร้างและลบ Database รวมถึงการจัดระเบียบด้วย Schema แล้ว สิ่งสำคัญคือการนำไปปรับใช้ในโปรเจกต์จริง เมื่อคุณเริ่มทำโปรเจกต์ให้สร้างฐานข้อมูล 1 ตัวต่อ 1 โปรเจกต์ และใช้ Schema แบ่งส่วนข้อมูลในโปรเจกต์นั้นให้ชัดเจน
กฎเหล็กคืออย่าใช้ชื่อซ้ำซ้อนและตั้งชื่อให้สื่อความหมาย เช่น ถ้าทำโปรเจกต์ร้านค้าออนไลน์ ให้ตั้งฐานข้อมูลว่า online_shop และแบ่ง Schema เป็น orders, inventory และ users เพื่อให้ง่ายต่อการดูแลรักษาในระยะยาว
การฝึกฝนเรื่องนี้ไม่ได้มีแค่การจำคำสั่ง แต่คือการฝึกคิดเรื่องโครงสร้างข้อมูล (Data Architecture) ซึ่งเป็นทักษะที่โปรแกรมเมอร์มืออาชีพต้องมี หากคุณเริ่มหัดวางโครงสร้างให้ดีตั้งแต่โปรเจกต์เล็กๆ คุณจะก้าวไปเป็นโปรแกรมเมอร์ที่ทำงานได้อย่างมีระบบและมีประสิทธิภาพแน่นอนครับ