Hindari Ketergantungan Transitif untuk Membantu Memastikan Normalisasi
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_ID | Penulis | Book | Author_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | Game Ender | Amerika Serikat |
Auth_001 | Orson Scott Card | Game Ender | Amerika Serikat |
Auth_002 | Margaret Atwood | The Handmaid's Tale | Kanada |
Dalam contoh AUTHORS di atas:
- Book → Author : Di sini, atribut Book menentukan atribut Author . Jika Anda tahu nama buku, Anda dapat mempelajari nama penulis. Namun, Penulis tidak menentukan Buku , karena seorang penulis dapat menulis banyak buku. Misalnya, hanya karena kami tahu nama penulis Orson Scott Card, kami masih belum tahu nama buku.
- Author → Author_Nationality : Demikian juga, atribut Author menentukan Author_Nationality , tetapi bukan 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_ID | Book | Author_ID |
---|---|---|
Book_001 | Game Ender | Auth_001 |
Book_001 | Anak-anak Pikiran | Auth_001 |
Book_002 | The Handmaid's Tale | Auth_002 |
PENULIS
Author_ID | Penulis | Author_Nationality |
---|---|---|
Auth_001 | Orson Scott Card | Amerika Serikat |
Auth_002 | Margaret Atwood | Kanada |
Apakah ini memperbaikinya? Mari kita periksa dependensi kita sekarang:
Tabel BUKU :
- Book_ID → Book: The Book tergantung pada Book_ID .
- Tidak ada dependensi lain dalam tabel ini, jadi kami baik-baik saja. Perhatikan bahwa foreign key Author_ID menautkan tabel ini ke tabel AUTHORS melalui primary key-nya Author_ID . Kami telah menciptakan hubungan untuk menghindari ketergantungan transitif, desain kunci dari database relasional.
AUTHORS table :
- Author_ID → Author: Penulis bergantung pada Author_ID .
- Penulis → Author_Nationality: Kewarganegaraan dapat ditentukan oleh penulis.
- Author_ID → Author_Nationality: Kebangsaan dapat ditentukan dari Author_ID melalui atribut Author . Kami masih memiliki ketergantungan transitif.
Kita perlu menambahkan tabel ketiga untuk menormalkan data ini:
NEGARA
Country_ID | Negara |
---|---|
Coun_001 | Amerika Serikat |
Coun_002 | Kanada |
PENULIS
Author_ID | Penulis | Country_ID |
---|---|---|
Auth_001 | Orson Scott Card | Coun_001 |
Auth_002 | Margaret Atwood | Coun_002 |
Sekarang kami memiliki tiga tabel, menggunakan kunci asing untuk menghubungkan antar tabel:
- Kunci asing tabel BUKU Author_ID menautkan sebuah buku ke seorang penulis dalam tabel AUTHORS.
- Kunci asing tabel AUTHORS, 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_ID | Penulis | Book | Author_Nationality |
---|---|---|---|
Auth_001 | Orson Scott Card | Game Ender | Amerika Serikat |
Auth_001 | Orson Scott Card | Anak-anak Pikiran | Amerika Serikat |
Auth_002 | Margaret Atwood | The Handmaid's Tale | Kanada |
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.