กฎพื้นฐานสองข้อนี้จะช่วยให้ฐานข้อมูลของคุณเป็นปกติ
First Normal Form (1NF) กำหนดกฎพื้นฐานสำหรับฐานข้อมูลที่จัดไว้แล้ว:
- กำจัดคอลัมน์ซ้ำซ้อนจากตารางเดียวกัน
- สร้างตารางที่แยกต่างหากสำหรับแต่ละกลุ่มของข้อมูลที่เกี่ยวข้องและระบุแต่ละแถวที่มีคอลัมน์ที่ไม่ซ้ำกัน (คีย์หลัก)
กฎเหล่านี้หมายถึงอะไรเมื่อพิจารณาการออกแบบเชิงปฏิบัติของฐานข้อมูล? เป็นจริงค่อนข้างง่าย
1. ขจัดความซ้ำซ้อน
กฎข้อแรกบอกว่าเราต้องไม่ทำสำเนาข้อมูลภายในแถวเดียวกันของตาราง ภายในชุมชนฐานข้อมูลแนวคิดนี้เรียกว่า atomicity ของตาราง ตารางที่สอดคล้องกับกฎนี้จะกล่าวได้ว่าเป็นอะตอม ลองดูหลักการนี้ด้วยตัวอย่างคลาสสิก: ตารางภายในฐานข้อมูลทรัพยากรบุคคลที่เก็บความสัมพันธ์ระหว่างผู้จัดการและผู้ใต้บังคับบัญชา สำหรับวัตถุประสงค์ของตัวอย่างเราจะกำหนดกฎทางธุรกิจที่ผู้จัดการแต่ละรายอาจมีผู้ใต้บังคับบัญชาคนหนึ่งหรือหลายคนในขณะที่ผู้ใต้บังคับบัญชาแต่ละรายอาจมีผู้จัดการได้เพียงรายเดียว
โดยบังเอิญเมื่อสร้างรายการหรือสเปรดชีตเพื่อติดตามข้อมูลนี้เราอาจสร้างตารางที่มีฟิลด์ต่อไปนี้:
- ผู้จัดการ
- Subordinate1
- Subordinate2
- Subordinate3
- Subordinate4
อย่างไรก็ตามโปรดระลึกถึงกฎข้อแรกที่กำหนดโดย 1NF: กำจัดคอลัมน์ซ้ำซ้อนจากตารางเดียวกัน อย่างชัดเจนคอลัมน์ Subordinate1-Subordinate4 จะซ้ำซ้อน ใช้เวลาสักครู่และคิดถึงปัญหาที่เกิดขึ้นจากสถานการณ์นี้ ถ้าผู้จัดการมีผู้ใต้บังคับบัญชาเพียงคนเดียวคอลัมน์ Subordinate2-Subordinate4 จะสูญเสียเพียงพื้นที่เก็บข้อมูล (เป็นฐานข้อมูลสินค้าที่มีค่า) นอกจากนี้ลองจินตนาการถึงกรณีที่ผู้จัดการมีผู้ใต้บังคับบัญชาอยู่ 4 คนแล้ว - จะเกิดอะไรขึ้นถ้าเธอรับลูกจ้างคนอื่น? โครงสร้างตารางทั้งหมดจะต้องมีการปรับเปลี่ยน
เมื่อถึงจุดนี้ความคิดที่สองเกิดขึ้นกับสามเณรฐานข้อมูล: เราไม่ต้องการมีมากกว่าหนึ่งคอลัมน์และต้องการให้มีการจัดเก็บข้อมูลที่มีความยืดหยุ่น ลองทำอะไรแบบนี้:
- ผู้จัดการ
- ผู้ใต้บังคับบัญชา
และฟิลด์ของผู้ใต้บังคับบัญชาจะมีหลายรายการในรูปแบบ "Mary, Bill, Joe"
วิธีการแก้ปัญหานี้ใกล้เคียง แต่ก็ยังขาดความชัดเจน คอลัมน์ของผู้ใต้บังคับบัญชายังคงซ้ำซ้อนและไม่ใช่อะตอม จะเกิดอะไรขึ้นเมื่อเราต้องการเพิ่มหรือลบผู้ใต้บังคับบัญชา เราจำเป็นต้องอ่านและเขียนเนื้อหาทั้งหมดของตาราง นี่ไม่ใช่เรื่องใหญ่ในสถานการณ์เช่นนี้ แต่ถ้าผู้จัดการคนหนึ่งมีพนักงาน 1 แสนคน? นอกจากนี้ยังมีความยุ่งยากในการเลือกข้อมูลจากฐานข้อมูลในข้อความค้นหาในอนาคต
นี่คือตารางที่ตรงกับกฎข้อแรกของ 1NF:
- ผู้จัดการ
- ผู้ใต้บังคับบัญชา
ในกรณีนี้ผู้ใต้บังคับบัญชาแต่ละรายมีเพียงรายการเดียว แต่ผู้จัดการอาจมีหลายรายการ
2. ระบุคีย์หลัก
ตอนนี้สิ่งที่เกี่ยวกับกฎข้อที่สอง: ระบุแต่ละแถวที่มีคอลัมน์เฉพาะหรือชุดของคอลัมน์ ( คีย์หลัก )? คุณอาจดูตารางด้านบนและแนะนำให้ใช้คอลัมน์รองเป็นคีย์หลัก ในความเป็นจริงคอลัมน์ผู้ใต้บังคับบัญชาเป็นผู้สมัครที่ดีสำหรับคีย์หลักเนื่องจากข้อเท็จจริงที่ว่ากฎเกณฑ์ทางธุรกิจของเราระบุว่าผู้ใต้บังคับบัญชาแต่ละรายอาจมีผู้จัดการได้เพียงรายเดียว อย่างไรก็ตามข้อมูลที่เราเลือกไว้ในตารางของเราทำให้นี่เป็นทางออกที่น้อยกว่า เกิดอะไรขึ้นถ้าเราจ้างพนักงานคนอื่นที่ชื่อจิม? เราจะเก็บความสัมพันธ์ของผู้จัดการ - ผู้ใต้บังคับบัญชาไว้ในฐานข้อมูลได้อย่างไร?
ดีที่สุดคือใช้ตัวระบุที่ไม่เหมือนใคร (เช่น ID พนักงาน) เป็น คีย์หลัก ตารางสุดท้ายของเราจะมีลักษณะดังนี้:
- รหัสผู้จัดการ
- รหัสรอง
ตอนนี้ตารางของเราอยู่ในรูปแบบปกติครั้งแรก! หากคุณต้องการเรียนรู้เกี่ยวกับการทำให้เป็นบรรทัดฐานเสมออ่านบทความอื่น ๆ ในชุดข้อมูลต่อไปนี้: