การพึ่งพาอาศัยกันในฐานข้อมูลเป็นความสัมพันธ์ทางอ้อมระหว่างค่าในตารางเดียวกันที่ทำให้เกิดการพึ่งพาการทำงาน เพื่อให้ได้มาตรฐาน Normal Normal ของ Third Normal Form (3NF) คุณต้องลดการพึ่งพาอาศัยกัน
(หรือคอลัมน์ฐานข้อมูล) ที่มีการพึ่งพาการทำงานระหว่างพวกเขาซึ่งหมายความว่าคอลัมน์ A ในตารางขึ้นอยู่กับคอลัมน์ B ผ่านคอลัมน์กลาง C
ลองดูวิธีการนี้อาจจะทำงาน
ตัวอย่างการพึ่งพาอาศัย
ผู้เขียน
AUTHOR_ID | ผู้เขียน | หนังสือ | Author_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | เกม Ender | สหรัฐ |
Auth_001 | Orson Scott Card | เกม Ender | สหรัฐ |
Auth_002 | Margaret Atwood | เรื่องของหญิงรับใช้ | แคนาดา |
ในตัวอย่าง AUTHORS:
- หนังสือ → ผู้เขียน : ที่นี่ หนังสือ แอตทริบิวต์กำหนด ผู้เขียน คุณลักษณะ ถ้าคุณรู้จักชื่อหนังสือคุณสามารถเรียนรู้ชื่อผู้เขียนได้ อย่างไรก็ตาม ผู้เขียน ไม่ได้กำหนด หนังสือ เพราะผู้เขียนสามารถเขียนหนังสือได้หลายเล่ม ตัวอย่างเช่นเพียงเพราะเราทราบชื่อผู้แต่ง Orson Scott Card เรายังไม่ทราบชื่อหนังสือ
- ผู้เขียน → Author_Nationality : ในทำนองเดียวกัน ผู้เขียน แอตทริบิวต์กำหนด Author_Nationality แต่ไม่ใช่ทางอื่น; เพียงเพราะเรารู้สัญชาติไม่ได้หมายความว่าเราสามารถกำหนดผู้เขียนได้
แต่ตารางนี้แนะนำพึ่งพาอาศัย:
- หนังสือ → Author_Nationality: ถ้าเรารู้จักชื่อหนังสือเราสามารถกำหนดสัญชาติได้จากคอลัมน์ผู้แต่ง
หลีกเลี่ยงการพึ่งพาอาศัยกัน
เพื่อให้แน่ใจว่าแบบฟอร์มปกติที่สามขอเอา dependency transitive
เราสามารถเริ่มต้นด้วยการนำคอลัมน์หนังสือออกจากตารางผู้เขียนและสร้างตารางหนังสือแยกต่างหาก:
หนังสือ
Book_ID | หนังสือ | AUTHOR_ID |
---|---|---|
Book_001 | เกม Ender | Auth_001 |
Book_001 | เด็กแห่งจิตใจ | Auth_001 |
Book_002 | เรื่องของหญิงรับใช้ | Auth_002 |
ผู้เขียน
AUTHOR_ID | ผู้เขียน | Author_Nationality |
---|---|---|
Auth_001 | Orson Scott Card | สหรัฐ |
Auth_002 | Margaret 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_001 | Orson Scott Card | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
ขณะนี้เรามีสามตารางการใช้คีย์ต่างประเทศเพื่อเชื่อมโยงระหว่างตาราง:
- คีย์ต่างประเทศของ BOOK table AUTHOR_ID เชื่อมโยงหนังสือกับผู้เขียนในตาราง AUTHORS
- คีย์ต่างประเทศของตาราง AUTHORS Country_ID เชื่อมโยงผู้เขียนกับประเทศในตาราง COUNTRIES
- ตาราง COUNTRIES ไม่มีคีย์ต่างประเทศเพราะไม่มีความจำเป็นต้องเชื่อมโยงไปยังตารางอื่นในแบบนี้
ทำไมต้องพึ่งพาอาศัยอยู่ในการออกแบบฐานข้อมูลที่ไม่ดี
ค่าของการหลีกเลี่ยงการพึ่งพาอาศัยเพื่อช่วยให้มั่นใจว่าอะไรคือ 3NF? ลองพิจารณาตารางแรกของเราอีกครั้งและดูประเด็นที่จะสร้าง:
ผู้เขียน
AUTHOR_ID | ผู้เขียน | หนังสือ | Author_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | เกม Ender | สหรัฐ |
Auth_001 | Orson Scott Card | เด็กแห่งจิตใจ | สหรัฐ |
Auth_002 | Margaret Atwood | เรื่องของหญิงรับใช้ | แคนาดา |
การออกแบบประเภทนี้สามารถนำไปสู่ความผิดปกติของข้อมูลและความไม่สอดคล้องเช่น:
- หากคุณลบหนังสือ "Children of the Mind" และ "Ender's Game" ออกไปคุณจะลบผู้เขียน "Orson Scott Card" และมีสัญชาติของเขาทั้งหมดจากฐานข้อมูล
- คุณไม่สามารถเพิ่มผู้เขียนรายใหม่ลงในฐานข้อมูลนอกจากคุณจะเพิ่มหนังสือ จะเกิดอะไรขึ้นหากผู้แต่งยังไม่ได้เผยแพร่หรือคุณไม่รู้ชื่อหนังสือที่เธอแต่งขึ้น
- ถ้า "ออร์สันสก็อตการ์ด" เปลี่ยนสัญชาติของเขาคุณจะต้องเปลี่ยนมันในทุกระเบียนที่เขาปรากฏขึ้น การมีเร็กคอร์ดหลายรายการกับผู้แต่งรายเดียวกันอาจทำให้ข้อมูลไม่ถูกต้องได้: ถ้าบุคคลที่ป้อนข้อมูลไม่ทราบว่ามีเร็กคอร์ดหลายรายการสำหรับเขาและเปลี่ยนแปลงข้อมูลในระเบียนเดียว?
- คุณไม่สามารถลบหนังสือเช่น "เรื่องสั้นของช่างหญิง" โดยไม่ลบผู้เขียนทั้งหมด
นี่เป็นเพียงเหตุผลที่ทำให้การทำให้เป็นบรรทัดฐานและหลีกเลี่ยงการพึ่งพาอาศัยการปกป้องข้อมูลและความสม่ำเสมอ