Skip to main content

การใส่ฐานข้อมูลในฟอร์มปกติครั้งแรก

Anonim

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

  • กำจัดคอลัมน์ซ้ำซ้อนจากตารางเดียวกัน
  • สร้างตารางที่แยกต่างหากสำหรับแต่ละกลุ่มของข้อมูลที่เกี่ยวข้องและระบุแต่ละแถวที่มีคอลัมน์ที่ไม่ซ้ำกัน (คีย์หลัก)

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

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

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

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

  • ผู้จัดการ
  • Subordinate1
  • Subordinate2
  • Subordinate3
  • Subordinate4

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

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

  • ผู้จัดการ
  • ผู้ใต้บังคับบัญชา

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

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

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

  • ผู้จัดการ
  • ผู้ใต้บังคับบัญชา

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

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

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

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

  • รหัสผู้จัดการ
  • รหัสรอง

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