การทำให้เป็นมาตรฐานของ DBMS: ตัวอย่างฐานข้อมูล 1NF, 2NF, 3NF

การทำให้ฐานข้อมูลเป็นมาตรฐานคืออะไร?

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

ผู้ประดิษฐ์ โมเดลเชิงสัมพันธ์ เอ็ดการ์ คอดด์ เสนอทฤษฎีการทำให้ข้อมูลเป็นมาตรฐานด้วยการใช้รูปแบบปกติที่หนึ่ง และเขายังคงขยายทฤษฎีด้วยรูปแบบปกติที่สองและสาม Later เขาเข้าร่วมกับ Raymond F. Boyce เพื่อพัฒนาทฤษฎี Boyce-Codd Normal Form

ประเภทของแบบฟอร์มปกติใน DBMS

นี่คือรายการแบบฟอร์มปกติใน SQL:

  • 1NF (แบบฟอร์มปกติครั้งแรก): ช่วยให้แน่ใจว่าตารางฐานข้อมูลได้รับการจัดระเบียบเพื่อให้แต่ละคอลัมน์มีค่าอะตอม (แยกไม่ได้) และแต่ละระเบียนไม่ซ้ำกัน วิธีนี้จะช่วยขจัดกลุ่มที่ซ้ำกัน จึงทำให้ข้อมูลถูกจัดโครงสร้างเป็นตารางและคอลัมน์
  • 2NF (แบบฟอร์มปกติที่สอง): สร้างบน 1NF โดยเราจำเป็นต้องลบข้อมูลที่ซ้ำซ้อนออกจากตารางที่ถูกนำไปใช้กับหลายแถว และนำไปวางแยกโต๊ะ กำหนดให้แอตทริบิวต์ที่ไม่ใช่คีย์ทั้งหมดต้องทำงานได้อย่างสมบูรณ์บนคีย์หลัก
  • 3NF (แบบฟอร์มปกติที่สาม): ขยาย 2NF โดยทำให้แน่ใจว่าคุณลักษณะที่ไม่ใช่คีย์ทั้งหมดไม่เพียงแต่ทำงานได้อย่างสมบูรณ์บนคีย์หลักเท่านั้น แต่ยังแยกจากกันอีกด้วย สิ่งนี้จะช่วยลดการพึ่งพาสกรรมกริยา
  • BCNF (บอยซ์-ค็อด ฟอร์มปกติ): การปรับปรุง 3NF ที่จัดการกับความผิดปกติที่ 3NF ไม่ได้จัดการ กำหนดให้ปัจจัยกำหนดทุกตัวเป็นคีย์ตัวเลือก เพื่อให้มั่นใจว่ามีการปฏิบัติตามกฎการปรับมาตรฐานที่เข้มงวดยิ่งขึ้น
  • 4NF (แบบฟอร์มปกติที่สี่): จัดการกับการพึ่งพาหลายค่า ช่วยให้มั่นใจได้ว่าไม่มีข้อเท็จจริงหลายค่าที่เป็นอิสระหลายรายการเกี่ยวกับเอนทิตีในบันทึก
  • 5NF (แบบฟอร์มปกติที่ห้า): มีชื่อเรียกอีกอย่างว่า "Projection-Join Normal Form" (PJNF) ซึ่งเกี่ยวข้องกับการสร้างข้อมูลจากชิ้นข้อมูลที่เล็กกว่าและจัดเรียงต่างกัน
  • 6NF (แบบฟอร์มปกติที่หก): ในทางทฤษฎีและยังไม่มีการนำไปใช้อย่างแพร่หลาย โดยจะจัดการกับข้อมูลชั่วคราว (การจัดการการเปลี่ยนแปลงเมื่อเวลาผ่านไป) โดยการแยกย่อยตารางเพิ่มเติมเพื่อกำจัดความซ้ำซ้อนที่ไม่ใช่ชั่วคราวทั้งหมด

ทฤษฎีการทำให้ข้อมูลเป็นมาตรฐานใน MySQL เซิร์ฟเวอร์ยังอยู่ระหว่างการพัฒนาเพิ่มเติม ตัวอย่างเช่นมีการสนทนาแม้กระทั่งในวันที่ 6th แบบฟอร์มปกติ อย่างไรก็ตาม ในการใช้งานจริงส่วนใหญ่ การทำให้เป็นมาตรฐานจะบรรลุผลดีที่สุดใน 3rd แบบฟอร์มปกติ- วิวัฒนาการของการทำให้เป็นมาตรฐานในทฤษฎี SQL แสดงไว้ด้านล่าง

รูปแบบปกติของฐานข้อมูล
รูปแบบปกติของฐานข้อมูล

การทำให้ฐานข้อมูลเป็นมาตรฐานด้วยตัวอย่าง

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

การทำให้ฐานข้อมูลเป็นมาตรฐานด้วยตัวอย่าง

ที่นี่คุณเห็น คอลัมน์ภาพยนตร์ที่เช่ามีหลายค่า ตอนนี้เรามาดูแบบฟอร์มปกติที่ 1 กัน:

รูปแบบปกติแรก (1NF)

  • แต่ละเซลล์ของตารางควรมีค่าเดียว
  • แต่ละระเบียนจะต้องไม่ซ้ำกัน

ตารางด้านบนใน 1NF-

ตัวอย่าง 1NF

กฎ 1NF

ตัวอย่างของ 1NF ใน DBMS

ก่อนที่เราจะดำเนินการต่อ มาทำความเข้าใจบางสิ่งกันก่อน —

คีย์ใน SQL คืออะไร

A คีย์ใน SQL เป็นค่าที่ใช้ระบุระเบียนในตารางโดยไม่ซ้ำกัน SQL KEY คือคอลัมน์เดียวหรือหลายคอลัมน์รวมกันซึ่งใช้ในการระบุแถวหรือสิ่งอันดับในตารางโดยไม่ซ้ำกัน SQL Key ใช้เพื่อระบุข้อมูลที่ซ้ำกัน และยังช่วยสร้างความสัมพันธ์ระหว่างหลายตารางในฐานข้อมูล

หมายเหตุ: คอลัมน์ในตารางที่ไม่ได้ใช้ระบุระเบียนโดยไม่ซ้ำกันเรียกว่าคอลัมน์ที่ไม่ใช่คีย์

คีย์หลักคืออะไร?

คีย์หลัก

คีย์หลักใน DBMS

ค่าหลักคือค่าคอลัมน์เดียวที่ใช้ระบุบันทึกฐานข้อมูลโดยไม่ซ้ำกัน

มีคุณลักษณะดังต่อไปนี้

  • A คีย์หลัก ไม่สามารถเป็นโมฆะได้
  • ค่าคีย์หลักต้องไม่ซ้ำกัน
  • ค่าคีย์หลักไม่ควรมีการเปลี่ยนแปลง
  • คีย์หลักจะต้องได้รับค่าเมื่อแทรกระเบียนใหม่

คีย์คอมโพสิตคืออะไร?

คีย์ผสมคือคีย์หลักที่ประกอบด้วยหลายคอลัมน์ที่ใช้ระบุระเบียนโดยไม่ซ้ำกัน

ในฐานข้อมูลของเรา เรามีคนสองคนที่ชื่อเดียวกัน โรเบิร์ต ฟิล แต่พวกเขาอาศัยอยู่ในที่ต่างกัน

คีย์ผสมในฐานข้อมูล

คีย์ผสมในฐานข้อมูล

ดังนั้นเราจึงต้องการทั้งชื่อเต็มและที่อยู่เพื่อระบุบันทึกโดยไม่ซ้ำกัน นั่นคือคีย์ผสม

เรามาเข้าสู่รูปแบบปกติที่สอง 2NF กัน

รูปแบบปกติที่สอง (2NF)

  • กฎข้อที่ 1- อยู่ใน 1NF
  • กฎข้อที่ 2 - คีย์หลักแบบคอลัมน์เดี่ยวที่ไม่ขึ้นอยู่กับเซ็ตย่อยของความสัมพันธ์ของคีย์ผู้สมัครใดๆ

เป็นที่ชัดเจนว่าเราไม่สามารถก้าวไปข้างหน้าเพื่อสร้างฐานข้อมูลอย่างง่ายของเราใน 2 ได้nd แบบฟอร์มการทำให้เป็นมาตรฐานเว้นแต่เราจะแบ่งพาร์ติชันตารางด้านบน

กฎ 2NF

กฎ 2NF

เราแบ่งตาราง 1NF ออกเป็น 1 ตาราง ได้แก่ ตาราง 2 และตาราง 1 ตาราง 2 ประกอบด้วยข้อมูลสมาชิก ตาราง XNUMX ประกอบด้วยข้อมูลภาพยนตร์ที่เช่า

เราได้แนะนำคอลัมน์ใหม่ที่เรียกว่า Membership_id ซึ่งเป็นคีย์หลักสำหรับตารางที่ 1 บันทึกสามารถระบุได้โดยไม่ซ้ำกันในตารางที่ 1 โดยใช้รหัสสมาชิก

ฐานข้อมูล – รหัสต่างประเทศ

ในตารางที่ 2 Membership_ID คือ Foreign Key

ฐานข้อมูล – รหัสต่างประเทศ

ฐานข้อมูล – รหัสต่างประเทศ

คีย์ต่างประเทศใน DBMS

Foreign Key อ้างอิงคีย์หลักของตารางอื่น! ช่วยเชื่อมต่อตารางของคุณ

  • คีย์ต่างประเทศสามารถมีชื่อที่แตกต่างจากคีย์หลักได้
  • ช่วยให้มั่นใจได้ว่าแถวในตารางหนึ่งมีแถวที่สอดคล้องกันในอีกตารางหนึ่ง
  • ต่างจากคีย์หลักตรงที่ไม่จำเป็นต้องไม่ซ้ำกัน ส่วนใหญ่มักจะไม่เป็นเช่นนั้น
  • คีย์ต่างประเทศอาจเป็นค่าว่างได้แม้ว่าคีย์หลักจะไม่สามารถทำได้ก็ตาม

ฐานข้อมูล – รหัสต่างประเทศ

ทำไมคุณถึงต้องใช้คีย์ต่างประเทศ?

สมมติว่ามือใหม่แทรกบันทึกในตาราง B เช่น

ทำไมคุณถึงต้องใช้กุญแจต่างประเทศ

คุณจะสามารถแทรกค่าลงในคีย์ต่างประเทศที่มีอยู่ในคีย์เฉพาะในตารางหลักเท่านั้น สิ่งนี้ช่วยในการอ้างอิงความสมบูรณ์

ปัญหาข้างต้นสามารถแก้ไขได้ด้วยการประกาศรหัสสมาชิกจากตารางที่ 2 เป็นคีย์ต่างประเทศของรหัสสมาชิกจากตารางที่ 1

ตอนนี้ ถ้าใครพยายามแทรกค่าลงในช่องรหัสสมาชิกที่ไม่มีอยู่ในตารางหลัก ข้อผิดพลาดจะปรากฏขึ้น!

การพึ่งพาฟังก์ชันสกรรมกริยาคืออะไร?

สกรรมกริยา การพึ่งพาการทำงาน คือเมื่อเปลี่ยนคอลัมน์ที่ไม่ใช่คีย์อาจทำให้คอลัมน์ที่ไม่ใช่คีย์อื่นๆ เปลี่ยนแปลงได้

พิจารณาตารางที่ 1 การเปลี่ยนชื่อเต็มของคอลัมน์ที่ไม่ใช่คีย์อาจทำให้คำทักทายเปลี่ยนไป

การพึ่งพาฟังก์ชันสกรรมกริยา

เข้าสู่ 3NF กันเถอะ

รูปแบบปกติที่สาม (3NF)

  • กฎข้อที่ 1- อยู่ใน 2NF
  • กฎข้อที่ 2- ไม่มีการพึ่งพาฟังก์ชันสกรรมกริยา

หากต้องการย้ายตาราง 2NF ของเราไปเป็น 3NF เราต้องแบ่งตารางของเราอีกครั้ง

ตัวอย่าง 3NF

ด้านล่างนี้เป็นตัวอย่าง 3NF ในฐานข้อมูล SQL:

ตัวอย่าง 3NF

ตัวอย่าง 3NF

ตัวอย่าง 3NF

เราได้แบ่งตารางของเราอีกครั้งและสร้างตารางใหม่ซึ่งเก็บคำทักทาย

ไม่มีการพึ่งพาฟังก์ชันสกรรมกริยา ดังนั้นตารางของเราจึงอยู่ใน 3NF

ในตารางที่ 3 รหัสคำทักทายเป็นคีย์หลัก และในตารางที่ 1 รหัสคำทักทายอยู่ต่างประเทศกับคีย์หลักในตารางที่ 3

ตัวอย่างเล็กๆ น้อยๆ ของเราอยู่ในระดับที่ไม่สามารถแยกย่อยเพิ่มเติมเพื่อให้ได้มาตรฐานในรูปแบบปกติที่สูงกว่าใน DBMS ได้ ในความเป็นจริงแล้ว ตัวอย่างนี้มีอยู่ในรูปแบบปกติที่สูงกว่าแล้ว โดยปกติแล้ว จำเป็นต้องใช้ความพยายามแยกต่างหากเพื่อย้ายไปยังระดับถัดไปของมาตรฐานข้อมูลในฐานข้อมูลที่ซับซ้อน อย่างไรก็ตาม เราจะหารือเกี่ยวกับมาตรฐานระดับถัดไปใน DBMS โดยย่อในส่วนต่อไปนี้

Boyce-Codd แบบฟอร์มปกติ (BCNF)

แม้ว่าฐานข้อมูลจะอยู่ใน 3rd แบบฟอร์มปกติ ยังคงมีความผิดปกติเกิดขึ้นหากมีมากกว่าหนึ่งรายการ ผู้สมัคร สำคัญ.

บางครั้ง BCNF ก็เรียกว่า 3.5 แบบฟอร์มปกติ

รูปแบบปกติที่สี่ (4NF)

หากไม่มีอินสแตนซ์ของตารางฐานข้อมูลที่มีข้อมูลอิสระและมีหลายค่าตั้งแต่สองค่าขึ้นไปซึ่งอธิบายเอนทิตีที่เกี่ยวข้อง รายการนั้นจะอยู่ใน 4th แบบฟอร์มปกติ

รูปแบบปกติที่ห้า (5NF)

ตารางอยู่ใน 5th รูปแบบปกติเฉพาะในกรณีที่อยู่ใน 4NF และไม่สามารถแยกย่อยเป็นตารางขนาดเล็กจำนวนเท่าใดก็ได้โดยไม่สูญเสียข้อมูล

เสนอแบบฟอร์มปกติที่หก (6NF)

6th Normal Form ไม่ได้เป็นมาตรฐาน อย่างไรก็ตาม ผู้เชี่ยวชาญด้านฐานข้อมูลกำลังหารือกันอยู่ระยะหนึ่ง หวังว่าเราจะมีคำจำกัดความที่ชัดเจนและเป็นมาตรฐานสำหรับ 6th ฟอร์มปกติในอนาคตอันใกล้นี้…

ข้อดีของแบบฟอร์มปกติ

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

ข้อเสียของการทำให้เป็นมาตรฐาน

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

นั่นคือทั้งหมดสำหรับ SQL Normalization!!!

สรุป

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

อ่านเพิ่มเติม readmore