Skip to main content

วิธีการแปลงฐานข้อมูลเป็นแบบฟอร์มปกติที่สาม (3NF)

Anonim

รูปแบบปกติที่สาม (3NF) เป็นหลักการฐานข้อมูลที่สนับสนุนความสมบูรณ์ของข้อมูลโดยการสร้างตามหลักการ normalization ของฐานข้อมูลโดย First Normal Form (1NF) และ Second Normal Form (2NF)

ข้อกำหนดฟอร์มปกติที่สาม

มีสองข้อกำหนดพื้นฐานสำหรับฐานข้อมูลจะอยู่ในรูปแบบปกติที่สาม:

  • ฐานข้อมูลต้องเป็นไปตามข้อกำหนดของทั้ง 2NF และ 2NF
  • คอลัมน์ฐานข้อมูลทั้งหมดจะต้องขึ้นอยู่กับคีย์หลักซึ่งหมายความว่าค่าของคอลัมน์ใด ๆ สามารถหาได้จากคีย์หลักเท่านั้น

เกี่ยวกับการพึ่งพิงหลัก

ลองดูเพิ่มเติมว่าเราหมายถึงอะไรจากข้อเท็จจริงที่ว่าคอลัมน์ทั้งหมดต้องขึ้นอยู่กับคีย์หลัก

ถ้าค่าของคอลัมน์สามารถได้มาจากทั้งคีย์หลักและคอลัมน์อื่นในตารางจะเป็นการละเมิด 3NF พิจารณาตารางพนักงานที่มีคอลัมน์เหล่านี้:

  • EmployeeID
  • ชื่อจริง
  • นามสกุล

ทั้ง LastName และ FirstName จะขึ้นอยู่กับค่า EmployeeID เท่านั้นหรือไม่? ดี LastName อาจขึ้นอยู่กับ FirstName หรือไม่? ไม่ได้เพราะไม่มีอะไรที่มีอยู่ใน LastName จะแนะนำค่าของ FirstName FirstName อาจขึ้นอยู่กับ LastName หรือไม่? ไม่มีอีกแล้วเพราะความจริงเช่นเดียวกัน: ไม่ว่า LastName อาจเป็นเช่นไรจะไม่สามารถให้คำแนะนำเกี่ยวกับค่าของ FirstName ได้ ดังนั้นตารางนี้เป็นไปตามมาตรฐาน 3NF

แต่พิจารณาตารางรถนี้:

  • VehicleID
  • ผู้ผลิต
  • แบบ

ผู้ผลิตและโมเดลอาจได้รับมาจาก VehicleID - แต่ Model อาจได้รับมาจากผู้ผลิตเนื่องจากโมเดลรถทำโดยเฉพาะผู้ผลิตเท่านั้น การออกแบบตารางนี้ไม่สอดคล้องกับมาตรฐาน 3NF และอาจทำให้ข้อมูลไม่เป็นไปตามข้อกำหนด ตัวอย่างเช่นคุณอาจอัปเดตผู้ผลิตโดยไม่ต้องอัปเดตโมเดลโดยแนะนำข้อมูลที่ไม่ถูกต้อง

เพื่อให้เป็นไปตามข้อกำหนดเราจำเป็นต้องย้ายคอลัมน์ขึ้นกับตารางอื่นและอ้างอิงโดยใช้คีย์ต่างประเทศ ซึ่งจะทำให้มีสองตาราง:

ยานพาหนะตาราง

ในตารางด้านล่าง ModelID เป็นคีย์ต่างประเทศของ รุ่น ตาราง:

  • VehicleID
  • ผู้ผลิต
  • ModelID

ตารางรูปแบบ

ตารางใหม่นี้จะจำลองโมเดลไปยังผู้ผลิต ถ้าคุณต้องการปรับปรุงข้อมูลยานพาหนะใด ๆ ที่ระบุถึงโมเดลคุณจะทำในตารางนี้แทนในตารางยานพาหนะ

  • ModelID
  • ผู้ผลิต
  • แบบ

ฟิลด์ที่ได้รับในรูปแบบ 3NF

ตารางอาจมีฟิลด์ที่ได้รับซึ่งเป็นฟิลด์ที่คำนวณจากคอลัมน์อื่น ๆ ในตาราง ตัวอย่างเช่นพิจารณาตารางคำสั่งเครื่องมือนี้:

  • เลขที่ใบสั่งซื้อ
  • จำนวนลูกค้า
  • ราคาต่อหน่วย
  • ปริมาณ
  • ทั้งหมด

ทั้งหมดแบ่งการปฏิบัติตาม 3NF เพราะสามารถได้มาโดยการคูณราคาต่อหน่วยตามปริมาณแทนที่จะต้องพึ่งพาคีย์หลักอย่างเต็มที่ เราต้องนำออกจากตารางเพื่อให้สอดคล้องกับรูปแบบปกติที่สาม

ในความเป็นจริงเนื่องจากเป็นที่มาจะดีกว่าที่จะไม่เก็บไว้ในฐานข้อมูลเลย

เราสามารถคำนวณได้ว่า "ทันที" เมื่อทำการค้นหาฐานข้อมูล ตัวอย่างเช่นเราอาจเคยใช้ข้อความค้นหานี้เพื่อดึงข้อมูลหมายเลขคำสั่งซื้อและยอดรวม:

SELECT OrderNumber รวมจาก WidgetOrders

ขณะนี้เราสามารถใช้ข้อความค้นหาต่อไปนี้:

เลือก OrderNumber, UnitPrice * Quantity AS Total จาก WidgetOrders

เพื่อให้ได้ผลลัพธ์ที่เหมือนกันโดยไม่มีการละเมิดกฎเกณฑ์เรื่อง normalization