Skip to main content

การพึ่งพาอาศัยในฐานข้อมูล

Anonim

การพึ่งพาอาศัยกันในฐานข้อมูลเป็นความสัมพันธ์ทางอ้อมระหว่างค่าในตารางเดียวกันที่ทำให้เกิดการพึ่งพาการทำงาน เพื่อให้ได้มาตรฐาน Normal Normal ของ Third Normal Form (3NF) คุณต้องลดการพึ่งพาอาศัยกัน

(หรือคอลัมน์ฐานข้อมูล) ที่มีการพึ่งพาการทำงานระหว่างพวกเขาซึ่งหมายความว่าคอลัมน์ A ในตารางขึ้นอยู่กับคอลัมน์ B ผ่านคอลัมน์กลาง C

ลองดูวิธีการนี้อาจจะทำงาน

ตัวอย่างการพึ่งพาอาศัย

ผู้เขียน

AUTHOR_IDผู้เขียนหนังสือAuthor_Nationality
Auth_001Orson Scott Cardเกม Enderสหรัฐ
Auth_001Orson Scott Cardเกม Enderสหรัฐ
Auth_002Margaret Atwoodเรื่องของหญิงรับใช้แคนาดา

ในตัวอย่าง AUTHORS:

  • หนังสือ → ผู้เขียน : ที่นี่ หนังสือ แอตทริบิวต์กำหนด ผู้เขียน คุณลักษณะ ถ้าคุณรู้จักชื่อหนังสือคุณสามารถเรียนรู้ชื่อผู้เขียนได้ อย่างไรก็ตาม ผู้เขียน ไม่ได้กำหนด หนังสือ เพราะผู้เขียนสามารถเขียนหนังสือได้หลายเล่ม ตัวอย่างเช่นเพียงเพราะเราทราบชื่อผู้แต่ง Orson Scott Card เรายังไม่ทราบชื่อหนังสือ
  • ผู้เขียน → Author_Nationality : ในทำนองเดียวกัน ผู้เขียน แอตทริบิวต์กำหนด Author_Nationality แต่ไม่ใช่ทางอื่น; เพียงเพราะเรารู้สัญชาติไม่ได้หมายความว่าเราสามารถกำหนดผู้เขียนได้

แต่ตารางนี้แนะนำพึ่งพาอาศัย:

  • หนังสือ → Author_Nationality: ถ้าเรารู้จักชื่อหนังสือเราสามารถกำหนดสัญชาติได้จากคอลัมน์ผู้แต่ง

หลีกเลี่ยงการพึ่งพาอาศัยกัน

เพื่อให้แน่ใจว่าแบบฟอร์มปกติที่สามขอเอา dependency transitive

เราสามารถเริ่มต้นด้วยการนำคอลัมน์หนังสือออกจากตารางผู้เขียนและสร้างตารางหนังสือแยกต่างหาก:

หนังสือ

Book_IDหนังสือAUTHOR_ID
Book_001เกม EnderAuth_001
Book_001เด็กแห่งจิตใจAuth_001
Book_002เรื่องของหญิงรับใช้Auth_002

ผู้เขียน

AUTHOR_IDผู้เขียนAuthor_Nationality
Auth_001Orson Scott Cardสหรัฐ
Auth_002Margaret Atwoodแคนาดา

นี้แก้ไขได้หรือไม่ ลองตรวจสอบการอ้างอิงของเราตอนนี้:

ตารางหนังสือ:

  • Book_ID → หนังสือ: หนังสือ ขึ้นอยู่กับ Book_ID .
  • ไม่มีการอ้างอิงอื่น ๆ ในตารางนี้อยู่ดังนั้นเราจึงโอเค โปรดทราบว่าคีย์ต่างประเทศ AUTHOR_ID เชื่อมโยงตารางนี้ไปยังตาราง AUTHORS โดยใช้คีย์หลัก AUTHOR_ID . เราได้สร้างความสัมพันธ์เพื่อหลีกเลี่ยงการพึ่งพาอาศัยการออกแบบคีย์ของฐานข้อมูลเชิงสัมพันธ์

AUTHORS ตาราง:

  • AUTHOR_ID → ผู้แต่ง: ผู้เขียน ขึ้นอยู่กับ AUTHOR_ID .
  • ผู้เขียน → Author_Nationality: สัญชาติสามารถกำหนดได้โดยผู้เขียน
  • AUTHOR_ID → Author_Nationality: สัญชาติสามารถกำหนดได้จาก AUTHOR_ID ผ่าน ผู้เขียน คุณลักษณะ เรายังมีพึ่งพาอาศัย

เราจำเป็นต้องเพิ่มตารางที่สามเพื่อทำให้ข้อมูลนี้เป็นแบบปกติ:

ออสเตรเลีย

Country_IDประเทศ
Coun_001สหรัฐ
Coun_002แคนาดา

ผู้เขียน

AUTHOR_IDผู้เขียนCountry_ID
Auth_001Orson Scott CardCoun_001
Auth_002Margaret AtwoodCoun_002

ขณะนี้เรามีสามตารางการใช้คีย์ต่างประเทศเพื่อเชื่อมโยงระหว่างตาราง:

  • คีย์ต่างประเทศของ BOOK table AUTHOR_ID เชื่อมโยงหนังสือกับผู้เขียนในตาราง AUTHORS
  • คีย์ต่างประเทศของตาราง AUTHORS Country_ID เชื่อมโยงผู้เขียนกับประเทศในตาราง COUNTRIES
  • ตาราง COUNTRIES ไม่มีคีย์ต่างประเทศเพราะไม่มีความจำเป็นต้องเชื่อมโยงไปยังตารางอื่นในแบบนี้

ทำไมต้องพึ่งพาอาศัยอยู่ในการออกแบบฐานข้อมูลที่ไม่ดี

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

ผู้เขียน

AUTHOR_IDผู้เขียนหนังสือAuthor_Nationality
Auth_001Orson Scott Cardเกม Enderสหรัฐ
Auth_001Orson Scott Cardเด็กแห่งจิตใจสหรัฐ
Auth_002Margaret Atwoodเรื่องของหญิงรับใช้แคนาดา

การออกแบบประเภทนี้สามารถนำไปสู่ความผิดปกติของข้อมูลและความไม่สอดคล้องเช่น:

  • หากคุณลบหนังสือ "Children of the Mind" และ "Ender's Game" ออกไปคุณจะลบผู้เขียน "Orson Scott Card" และมีสัญชาติของเขาทั้งหมดจากฐานข้อมูล
  • คุณไม่สามารถเพิ่มผู้เขียนรายใหม่ลงในฐานข้อมูลนอกจากคุณจะเพิ่มหนังสือ จะเกิดอะไรขึ้นหากผู้แต่งยังไม่ได้เผยแพร่หรือคุณไม่รู้ชื่อหนังสือที่เธอแต่งขึ้น
  • ถ้า "ออร์สันสก็อตการ์ด" เปลี่ยนสัญชาติของเขาคุณจะต้องเปลี่ยนมันในทุกระเบียนที่เขาปรากฏขึ้น การมีเร็กคอร์ดหลายรายการกับผู้แต่งรายเดียวกันอาจทำให้ข้อมูลไม่ถูกต้องได้: ถ้าบุคคลที่ป้อนข้อมูลไม่ทราบว่ามีเร็กคอร์ดหลายรายการสำหรับเขาและเปลี่ยนแปลงข้อมูลในระเบียนเดียว?
  • คุณไม่สามารถลบหนังสือเช่น "เรื่องสั้นของช่างหญิง" โดยไม่ลบผู้เขียนทั้งหมด

นี่เป็นเพียงเหตุผลที่ทำให้การทำให้เป็นบรรทัดฐานและหลีกเลี่ยงการพึ่งพาอาศัยการปกป้องข้อมูลและความสม่ำเสมอ