การปรับฐานข้อมูลของคุณให้เป็นปกติ: First Normal Form

กฎพื้นฐานสองข้อนี้จะช่วยให้ฐานข้อมูลของคุณเป็นปกติ

First Normal Form (1NF) กำหนดกฎพื้นฐานสำหรับฐานข้อมูลที่จัดไว้แล้ว:

กฎเหล่านี้หมายถึงอะไรเมื่อพิจารณาการออกแบบเชิงปฏิบัติของฐานข้อมูล? เป็นจริงค่อนข้างง่าย

1. ขจัดความซ้ำซ้อน

กฎข้อแรกบอกว่าเราต้องไม่ทำสำเนาข้อมูลภายในแถวเดียวกันของตาราง ภายในชุมชนฐานข้อมูลแนวคิดนี้เรียกว่า atomicity ของตาราง ตารางที่สอดคล้องกับกฎนี้จะกล่าวได้ว่าเป็นอะตอม ลองดูหลักการนี้ด้วยตัวอย่างคลาสสิก: ตารางภายในฐานข้อมูลทรัพยากรบุคคลที่เก็บความสัมพันธ์ระหว่างผู้จัดการและผู้ใต้บังคับบัญชา สำหรับวัตถุประสงค์ของตัวอย่างเราจะกำหนดกฎทางธุรกิจที่ผู้จัดการแต่ละรายอาจมีผู้ใต้บังคับบัญชาคนหนึ่งหรือหลายคนในขณะที่ผู้ใต้บังคับบัญชาแต่ละรายอาจมีผู้จัดการได้เพียงรายเดียว

โดยบังเอิญเมื่อสร้างรายการหรือสเปรดชีตเพื่อติดตามข้อมูลนี้เราอาจสร้างตารางที่มีฟิลด์ต่อไปนี้:

อย่างไรก็ตามโปรดระลึกถึงกฎข้อแรกที่กำหนดโดย 1NF: กำจัดคอลัมน์ซ้ำซ้อนจากตารางเดียวกัน อย่างชัดเจนคอลัมน์ Subordinate1-Subordinate4 จะซ้ำซ้อน ใช้เวลาสักครู่และคิดถึงปัญหาที่เกิดขึ้นจากสถานการณ์นี้ ถ้าผู้จัดการมีผู้ใต้บังคับบัญชาเพียงคนเดียวคอลัมน์ Subordinate2-Subordinate4 จะสูญเสียเพียงพื้นที่เก็บข้อมูล (เป็นฐานข้อมูลสินค้าที่มีค่า) นอกจากนี้ลองจินตนาการถึงกรณีที่ผู้จัดการมีผู้ใต้บังคับบัญชาอยู่ 4 คนแล้ว - จะเกิดอะไรขึ้นถ้าเธอรับลูกจ้างคนอื่น? โครงสร้างตารางทั้งหมดจะต้องมีการปรับเปลี่ยน

เมื่อถึงจุดนี้ความคิดที่สองเกิดขึ้นกับสามเณรฐานข้อมูล: เราไม่ต้องการมีมากกว่าหนึ่งคอลัมน์และต้องการให้มีการจัดเก็บข้อมูลที่มีความยืดหยุ่น ลองทำอะไรแบบนี้:

และฟิลด์ของผู้ใต้บังคับบัญชาจะมีหลายรายการในรูปแบบ "Mary, Bill, Joe"

วิธีการแก้ปัญหานี้ใกล้เคียง แต่ก็ยังขาดความชัดเจน คอลัมน์ของผู้ใต้บังคับบัญชายังคงซ้ำซ้อนและไม่ใช่อะตอม จะเกิดอะไรขึ้นเมื่อเราต้องการเพิ่มหรือลบผู้ใต้บังคับบัญชา เราจำเป็นต้องอ่านและเขียนเนื้อหาทั้งหมดของตาราง นี่ไม่ใช่เรื่องใหญ่ในสถานการณ์เช่นนี้ แต่ถ้าผู้จัดการคนหนึ่งมีพนักงาน 1 แสนคน? นอกจากนี้ยังมีความยุ่งยากในการเลือกข้อมูลจากฐานข้อมูลในข้อความค้นหาในอนาคต

นี่คือตารางที่ตรงกับกฎข้อแรกของ 1NF:

ในกรณีนี้ผู้ใต้บังคับบัญชาแต่ละรายมีเพียงรายการเดียว แต่ผู้จัดการอาจมีหลายรายการ

2. ระบุคีย์หลัก

ตอนนี้สิ่งที่เกี่ยวกับกฎข้อที่สอง: ระบุแต่ละแถวที่มีคอลัมน์เฉพาะหรือชุดของคอลัมน์ ( คีย์หลัก )? คุณอาจดูตารางด้านบนและแนะนำให้ใช้คอลัมน์รองเป็นคีย์หลัก ในความเป็นจริงคอลัมน์ผู้ใต้บังคับบัญชาเป็นผู้สมัครที่ดีสำหรับคีย์หลักเนื่องจากข้อเท็จจริงที่ว่ากฎเกณฑ์ทางธุรกิจของเราระบุว่าผู้ใต้บังคับบัญชาแต่ละรายอาจมีผู้จัดการได้เพียงรายเดียว อย่างไรก็ตามข้อมูลที่เราเลือกไว้ในตารางของเราทำให้นี่เป็นทางออกที่น้อยกว่า เกิดอะไรขึ้นถ้าเราจ้างพนักงานคนอื่นที่ชื่อจิม? เราจะเก็บความสัมพันธ์ของผู้จัดการ - ผู้ใต้บังคับบัญชาไว้ในฐานข้อมูลได้อย่างไร?

ดีที่สุดคือใช้ตัวระบุที่ไม่เหมือนใคร (เช่น ID พนักงาน) เป็น คีย์หลัก ตารางสุดท้ายของเราจะมีลักษณะดังนี้:

ตอนนี้ตารางของเราอยู่ในรูปแบบปกติครั้งแรก! หากคุณต้องการเรียนรู้เกี่ยวกับการทำให้เป็นบรรทัดฐานเสมออ่านบทความอื่น ๆ ในชุดข้อมูลต่อไปนี้: