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_ID | Pengarang | Buku | Author_Nationality |
---|---|---|---|
Auth_001 | Kad Orson Scott | Permainan Ender | Amerika Syarikat |
Auth_001 | Kad Orson Scott | Permainan Ender | Amerika Syarikat |
Auth_002 | Margaret Atwood | Kisah Handmaid's | Kanada |
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_ID | Buku | Pengarang_ID |
---|---|---|
Book_001 | Permainan Ender | Auth_001 |
Book_001 | Kanak-kanak Minda | Auth_001 |
Book_002 | Kisah Handmaid's | Auth_002 |
PENGENALAN
Pengarang_ID | Pengarang | Author_Nationality |
---|---|---|
Auth_001 | Kad Orson Scott | Amerika Syarikat |
Auth_002 | Margaret Atwood | Kanada |
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_ID | Negara |
---|---|
Coun_001 | Amerika Syarikat |
Coun_002 | Kanada |
PENGENALAN
Pengarang_ID | Pengarang | Country_ID |
---|---|---|
Auth_001 | Kad Orson Scott | Coun_001 |
Auth_002 | Margaret Atwood | Coun_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_ID | Pengarang | Buku | Author_Nationality |
---|---|---|---|
Auth_001 | Kad Orson Scott | Permainan Ender | Amerika Syarikat |
Auth_001 | Kad Orson Scott | Kanak-kanak Minda | Amerika Syarikat |
Auth_002 | Margaret Atwood | Kisah Handmaid's | Kanada |
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.