Skip to main content

Ketergantungan Transitif dalam Database

What's new in Android development tools - Google I/O 2016 (Mungkin 2024)

What's new in Android development tools - Google I/O 2016 (Mungkin 2024)
Anonim

Ketergantungan transitif dalam database adalah hubungan tidak langsung antara nilai-nilai dalam tabel yang sama yang menyebabkan ketergantungan fungsional. Untuk mencapai standar normalisasi Third Normal Form (3NF), Anda harus menghilangkan ketergantungan transitif.

Berdasarkan sifatnya, ketergantungan transitif membutuhkan tiga atau lebih atribut (atau kolom basis data) yang memiliki ketergantungan fungsional di antara mereka, yang berarti bahwa Kolom A dalam tabel bergantung pada Kolom B melalui Kolom menengah C.

Mari kita lihat bagaimana ini bisa berhasil.

Contoh Ketergantungan Transitif

PENULIS

Author_IDPenulisBookAuthor_Nationality
Auth_001Orson Scott CardGame EnderAmerika Serikat
Auth_001Orson Scott CardGame EnderAmerika Serikat
Auth_002Margaret AtwoodThe Handmaid's TaleKanada

Dalam contoh AUTHORS di atas:

  • Book → Penulis : Di sini, the Book atribut menentukan Penulis atribut. Jika Anda tahu nama buku, Anda dapat mempelajari nama penulis. Namun, Penulis tidak menentukan Book , karena seorang penulis dapat menulis banyak buku. Misalnya, hanya karena kami tahu nama penulis Orson Scott Card, kami masih belum tahu nama buku.
  • Penulis → Author_Nationality : Demikian juga, Penulis atribut menentukan Author_Nationality , tetapi tidak sebaliknya; hanya karena kita tahu kebangsaan bukan berarti kita bisa menentukan penulisnya.

Tetapi tabel ini memperkenalkan ketergantungan transitif:

  • Book → Author_Nationality: Jika kita tahu nama buku, kita dapat menentukan kewarganegaraan melalui kolom Penulis.

Menghindari Ketergantungan Transitif

Untuk memastikan Bentuk Normal Ketiga, mari kita hapus ketergantungan transitif.

Kita bisa mulai dengan menghapus kolom Buku dari tabel Penulis dan membuat tabel Buku terpisah:

BUKU

Book_IDBookAuthor_ID
Book_001Game EnderAuth_001
Book_001Anak-anak PikiranAuth_001
Book_002The Handmaid's TaleAuth_002

PENULIS

Author_IDPenulisAuthor_Nationality
Auth_001Orson Scott CardAmerika Serikat
Auth_002Margaret AtwoodKanada

Apakah ini memperbaikinya? Mari kita periksa dependensi kita sekarang:

Tabel BUKU:

  • Book_ID → Book: Itu Book tergantung pada Book_ID .
  • Tidak ada dependensi lain dalam tabel ini, jadi kami baik-baik saja. Perhatikan bahwa kunci asing Author_ID menautkan tabel ini ke tabel AUTHORS melalui kunci primernya Author_ID . Kami telah menciptakan hubungan untuk menghindari ketergantungan transitif, desain kunci dari database relasional.

Tabel PENULIS:

  • Author_ID → Penulis: Itu Penulis tergantung pada Author_ID .
  • Penulis → Author_Nationality: Kebangsaan dapat ditentukan oleh penulis.
  • Author_ID → Author_Nationality: Kebangsaan dapat ditentukan dari Author_ID melalui Penulis atribut. Kami masih memiliki ketergantungan transitif.

Kita perlu menambahkan tabel ketiga untuk menormalkan data ini:

NEGARA

Country_IDNegara
Coun_001Amerika Serikat
Coun_002Kanada

PENULIS

Author_IDPenulisCountry_ID
Auth_001Orson Scott CardCoun_001
Auth_002Margaret AtwoodCoun_002

Sekarang kami memiliki tiga tabel, menggunakan kunci asing untuk menghubungkan antar tabel:

  • Kunci asing tabel BUKU Author_ID menautkan buku ke penulis di tabel AUTHORS.
  • Kunci asing tabel PENULIS Country_ID menautkan seorang penulis ke suatu negara di tabel NEGARA.
  • Tabel NEGARA tidak memiliki kunci asing karena tidak perlu menautkan ke tabel lain dalam desain ini.

Mengapa Ketergantungan Transitif Apakah Desain Database Buruk

Berapakah nilai menghindari ketergantungan transitif untuk membantu memastikan 3NF? Mari pertimbangkan tabel pertama kami lagi dan lihat masalah yang dibuatnya:

PENULIS

Author_IDPenulisBookAuthor_Nationality
Auth_001Orson Scott CardGame EnderAmerika Serikat
Auth_001Orson Scott CardAnak-anak PikiranAmerika Serikat
Auth_002Margaret AtwoodThe Handmaid's TaleKanada

Desain semacam ini dapat berkontribusi pada anomali data dan inkonsistensi, misalnya:

  • Jika Anda menghapus dua buku "Children of the Mind" dan "Ender's Game," Anda akan menghapus penulis "Orson Scott Card" dan kebangsaannya sepenuhnya dari database.
  • Anda tidak dapat menambahkan penulis baru ke database kecuali Anda juga menambahkan buku; bagaimana jika penulis belum dipublikasikan atau Anda tidak tahu nama buku yang ia tulis?
  • Jika "Orson Scott Card" mengubah kewarganegaraannya, Anda harus mengubahnya dalam semua catatan di mana dia muncul. Memiliki beberapa catatan dengan penulis yang sama dapat mengakibatkan data yang tidak akurat: bagaimana jika orang yang masuk data tidak menyadari ada beberapa catatan untuknya dan mengubah data hanya dalam satu catatan?
  • Anda tidak dapat menghapus buku seperti "The Handmaid's Tale" tanpa menghapus penulis sepenuhnya.

Ini hanyalah beberapa alasan mengapa normalisasi, dan menghindari ketergantungan transitif, melindungi data dan memastikan konsistensi.