Skip to main content

Ketergantungan Transitif dalam Pangkalan Data

Learn the Bible in 24 Hours - Hour 2 - Small Groups - Chuck Missler (Mungkin 2025)

Learn the Bible in 24 Hours - Hour 2 - Small Groups - Chuck Missler (Mungkin 2025)
Anonim

Ketergantungan transitif dalam pangkalan data adalah hubungan tidak langsung antara nilai dalam jadual yang sama yang menyebabkan kebergantungan berfungsi. Untuk mencapai standard normalisasi Borang Ketiga Ketiga (3NF), anda mesti menghapuskan sebarang pergantungan transitif.

Dengan sifatnya, ketergantungan transitif memerlukan tiga atau lebih atribut (atau lajur pangkalan data) yang mempunyai kebergantungan yang berfungsi di antara mereka, yang bermaksud bahawa Lajur A dalam jadual bergantung pada Kolum B melalui Kolom C pertengahan

Mari lihat bagaimana ini boleh berfungsi.

Contoh Ketergantungan Transitif

PENGENALAN

Pengarang_IDPengarangBukuAuthor_Nationality
Auth_001Kad Orson ScottPermainan EnderAmerika Syarikat
Auth_001Kad Orson ScottPermainan EnderAmerika Syarikat
Auth_002Margaret AtwoodKisah Handmaid'sKanada

Dalam contoh AUTHORS di atas:

  • Buku → Pengarang : Di sini, Buku atribut menentukan Pengarang atribut. Jika anda tahu nama buku, anda boleh mengetahui nama pengarangnya. Walau bagaimanapun, Pengarang tidak menentukan Buku , kerana penulis boleh menulis banyak buku. Sebagai contoh, hanya kerana kita tahu nama pengarang Orson Scott Card, kita masih tidak tahu nama buku itu.
  • Pengarang → Author_Nationality : Begitu juga dengan Pengarang atribut menentukan Author_Nationality , tetapi tidak sebaliknya; hanya kerana kita tahu kewarganegaraan tidak bermakna kita boleh menentukan pengarangnya.

Tetapi jadual ini memperkenalkan kebergantungan transitif:

  • Buku → Author_Nationality: Jika kita tahu nama buku, kita dapat menentukan kewarganegaraan melalui lajur Pengarang.

Mengelakkan Dependensi Transitif

Untuk memastikan Formula Ketiga, mari keluarkan pergantungan transitif.

Kita boleh mulakan dengan membuang lajur Buku dari jadual Pengarang dan membuat jadual Buku berasingan:

BUKU

Book_IDBukuPengarang_ID
Book_001Permainan EnderAuth_001
Book_001Kanak-kanak MindaAuth_001
Book_002Kisah Handmaid'sAuth_002

PENGENALAN

Pengarang_IDPengarangAuthor_Nationality
Auth_001Kad Orson ScottAmerika Syarikat
Auth_002Margaret AtwoodKanada

Adakah ini membetulkannya? Mari kita periksa kebergantungan kita sekarang:

Jadual BUKU:

  • Book_ID → Buku: The Buku bergantung kepada Book_ID .
  • Tiada lagi ketergantungan dalam jadual ini, jadi kami baik-baik saja. Perhatikan bahawa kunci asing Pengarang_ID pautan jadual ini ke jadual AUTHORS melalui kunci utamanya Pengarang_ID . Kami telah mewujudkan hubungan untuk mengelakkan pergantungan transitif, reka bentuk utama pangkalan data hubungan.

Meja AUTHOR:

  • Pengarang_ID → Pengarang: The Pengarang bergantung kepada Pengarang_ID .
  • Pengarang → Author_Nationality: Kewarganegaraan boleh ditentukan oleh penulis.
  • Pengarang_ID → Author_Nationality: Kewarganegaraan boleh ditentukan dari Pengarang_ID melalui Pengarang atribut. Kami masih mempunyai pergantungan transitif.

Kita perlu menambah jadual ketiga untuk menormalkan data ini:

NEGARA

Country_IDNegara
Coun_001Amerika Syarikat
Coun_002Kanada

PENGENALAN

Pengarang_IDPengarangCountry_ID
Auth_001Kad Orson ScottCoun_001
Auth_002Margaret AtwoodCoun_002

Sekarang kita mempunyai tiga jadual, menggunakan kekunci asing untuk menghubungkan antara jadual:

  • Kunci asing meja BOOK Pengarang_ID menghubungkan buku kepada pengarang dalam jadual AUTHORS.
  • Kunci asing meja AUTHORS Country_ID menghubungkan penulis ke negara dalam jadual COUNTRIES.
  • Jadual COUNTRIES tidak mempunyai kunci asing kerana ia tidak perlu dikaitkan dengan jadual lain dalam reka bentuk ini.

Mengapa Dependencies Transitif Adakah Reka Bentuk Pangkalan Data Bad

Apakah nilai mengelakkan dependensi transitif untuk membantu memastikan 3NF? Mari kita pertimbangkan jadual pertama kami dan lihat isu yang diciptanya:

PENGENALAN

Pengarang_IDPengarangBukuAuthor_Nationality
Auth_001Kad Orson ScottPermainan EnderAmerika Syarikat
Auth_001Kad Orson ScottKanak-kanak MindaAmerika Syarikat
Auth_002Margaret AtwoodKisah Handmaid'sKanada

Reka bentuk jenis ini boleh menyumbang kepada anomali data dan ketidakkonsistenan, contohnya:

  • Sekiranya anda memadamkan kedua-dua buku "Anak-Anak Minda" dan "Permainan Ender," anda akan memadamkan pengarang "Orson Scott Card" dan kewarganegaraannya sepenuhnya dari pangkalan data.
  • Anda tidak boleh menambah pengarang baru ke pangkalan data melainkan anda juga menambah buku; bagaimana jika pengarang belum diterbitkan atau anda tidak tahu nama buku yang telah dia buat?
  • Jika "Orson Scott Card" menukar kewarganegaraannya, anda perlu mengubahnya dalam semua rekod yang dia muncul. Mempunyai berbilang rekod dengan pengarang yang sama boleh menghasilkan data yang tidak tepat: bagaimana jika orang yang memasukkan data tidak menyedari terdapat banyak rekod untuknya dan mengubah data dalam satu rekod sahaja?
  • Anda tidak boleh memadamkan buku seperti "Kisah Pengantin" tanpa memecat penulis sepenuhnya.

Ini adalah beberapa sebab mengapa normalisasi, dan mengelakkan dependensi transitif, melindungi data dan memastikan konsistensi.