หากทำงานกับฐานข้อมูลมาสักพัก คงเคยได้ยินคำว่า Normalization หรือถูกถาม "Database นี้ normalized ไหม?" หรือ "อยู่ใน BCNF ไหม?" หลายคนคิดว่า normalization เป็นเรื่องของนักวิชาการเท่านั้น แต่จริงๆ แล้ว เข้าใจหลักการและนำไปใช้ในการออกแบบฐานข้อมูลประจำวัน ไม่ยาก และ อาจเพิ่มประสิทธิภาพ DBMS อย่างมาก
บทความนี้นำเสนอแนวคิด Normalization และ Normal Forms ที่พบบ่อย
Normalization คืออะไร?
Normalization = กระบวนการจัดระเบียบข้อมูลในฐานข้อมูลอย่างมีประสิทธิภาพ มีเป้าหมาย 2 ข้อ:
- กำจัดข้อมูลซ้ำ (Eliminate redundant data) – เช่น เก็บข้อมูลเดียวกันในหลายตาราง
- รับรอง Data Dependencies สมเหตุสมผล – เก็บเฉพาะข้อมูลที่เกี่ยวข้องกันในตารางเดียว
ทั้งคู่ลดพื้นที่จัดเก็บ และทำให้ข้อมูลจัดเก็บได้อย่างมีเหตุผล
Normal Forms (รูปแบบปกติ) คืออะไร?
ชุมชนฐานข้อมูลกำหนด เกณฑ์ (guidelines) เรียกว่า Normal Forms หมายเลข 1 ถึง 5 (1NF ถึง 5NF) ในทางปฏิบัติ พบบ่อย: 1NF, 2NF, 3NF บางครั้ง 4NF ส่วน 5NF นادرةมาก ไม่พูดถึงในบทความนี้
⚠️ สำคัญ: นี่เป็น แนวทาง (guidelines) เท่านั้น บางครั้งต้องเบี่ยงเบนเพื่อ business requirements จริง แต่ต้องประเมินผลกระทบและวางแผนจัดการ inconsistency ที่อาจเกิด
First Normal Form (1NF) – รูปแบบปกติขั้นที่ 1
กฎพื้นฐานสำหรับฐานข้อมูลที่จัดระเบียบ:
- กำจัดคอลัมน์ซ้ำ (duplicative columns) ออกจากตารางเดียวกัน
- สร้างตารางแยกสำหรับแต่ละกลุ่มข้อมูลที่เกี่ยวข้อง และระบุแต่ละแถวด้วย Primary Key (คอลัมน์หรือชุดคอลัมน์ที่ unique)
Second Normal Form (2NF) – รูปแบบปกติขั้นที่ 2
จัดการข้อมูลซ้ำต่อ:
- ผ่านเกณฑ์ 1NF ทั้งหมด
- นำ subset ของข้อมูลที่ใช้ซ้ำหลายแถว ไปใส่ในตารางแยก
- สร้างความสัมพันธ์ระหว่างตารางใหม่กับตารางเดิมด้วย Foreign Keys
Third Normal Form (3NF) – รูปแบบปกติขั้นที่ 3
ก้าวสำคัญเพิ่มเติม:
- ผ่านเกณฑ์ 2NF ทั้งหมด
- ลบคอลัมน์ที่ไม่ dependent บน Primary Key (non-key attributes ที่ไม่ขึ้นอยู่กับ PK โดยตรง)
Boyce-Codd Normal Form (BCNF หรือ 3.5NF)
เพิ่มเงื่อนไขอีก 1 ข้อ:
- ผ่านเกณฑ์ 3NF ทั้งหมด
- ทุก Determinant ต้องเป็น Candidate Key
Fourth Normal Form (4NF) – รูปแบบปกติขั้นที่ 4
เพิ่มเงื่อนไข:
- ผ่านเกณฑ์ 3NF ทั้งหมด
- Relation อยู่ใน 4NF ถ้า ไม่มี Multi-valued Dependencies
💡 จำไว้: Normal Forms เป็น สะสม (cumulative) – ต้องเป็น 1NF ก่อนถึงจะเป็น 2NF ได้ เป็น 2NF ก่อนถึง 3NF ได้...
ควร Normalize หรือไม่?
Normalization มักดี แต ไม่ใช่ข้อบังคับขาด บางกรณี การละเมิดกฎ normalization โดยเจตนา เป็น best practice (เช่น denormalization เพื่อ performance ใน read-heavy workloads)
หากต้องการให้ฐานข้อมูล normalized ให้เริ่มจากเรียนรู้วิธีทำให้อยู่ใน First Normal Form (1NF) ก่อน