Bir R(A B C) ilişkisini düşünelim. Burada A, B ve C, R ilişkisinin niteliği olarak bilinmektedir. Aşağıdaki durum ortaya çıktığında; daha sonra DBMS'de geçişli bağımlılık oluşur. Koşullar A → B, B → C'dir. Dolayısıyla koşul A → C olur. Yani bağımlılıklar iki fonksiyonel bağımlılık tarafından yapıldığında fonksiyonel bağımlılıklar geçişli bağımlılıklar haline gelir diyebiliriz.
Geçişli Bağımlılık Nedir?
Bir R(A B C) ilişkisini düşünün. Burada A, B ve C, R ilişkisinin niteliği olarak bilinmektedir. Aşağıdaki durum ortaya çıktığında; daha sonra DBMS'de geçişli bağımlılık oluşur. Koşullar A → B, B → C'dir. Bu nedenle koşul A → C olur. geçişli fonksiyonel bağımlılıklarda, bir bağımlı doğrudan determinanta bağlıdır.
Aşağıdaki örnek yardımıyla geçişli bağımlılıkları anlayalım.
Author_ID | Yazar | Kitap | Yazar_Uyruğu |
---|---|---|---|
A1 | Arundhati Roy | Küçük Şeylerin Tanrısı | Hindistan |
A1 | Kiran Desai | Zararın Mirası | Hindistan |
A2 | R. K. Narayan | Malgudy'nin İnsan Yiyeni | Hindistan |
Yukarıdaki yazar tablosunda bunu anlıyoruz.
Yukarıda tartışılan işlevsel bağımlılıklara yakından bakarsak aşağıdaki modeli buluruz.
- A → B ve B → C B→C; bu nedenle A → CA → C.
- A → Kitap, B → Yazar B → Yazar ve C → Author_Nationality C→Author_Nationality
Yukarıdaki yazar tablosunda Üçüncü Normal Formu (3NF) uyguladığımızı varsayalım. Bu durumda yazar tablosunun geçişli bağımlılığının kaldırılması gerekir ve veritabanının geçişli bağımlılıklarının kaldırılması işlemi Normalleştirme işlemi olarak bilinir.
Geçişli Bağımlılıklardan Nasıl Kaçınılır?
Yukarıdaki yazar tablosunu tekrar ele alalım ve tablo oluşturulurken ne tür bir sorunla karşılaşıldığını görelim.
Yazarlar tablosu:
Author_ID | Yazar | Kitap | Yazar_Uyruğu |
---|---|---|---|
A1 | Arundhati Roy | Küçük Şeylerin Tanrısı | Hindistan |
A1 | Kiran Desai | Zararın Mirası | Hindistan |
A2 | R. K. Narayan | Malgudy'nin İnsan Yiyeni | Hindistan |
Veri anormallikleri (güncelleme, ekleme ve silme anormallikleri gibi) ve tutarsızlık yazar tablosundan kaynaklanabilir. Veritabanında çok fazla fazlalık olduğunda verilerde veri anormallikleri ortaya çıkar. Veri anormallikleri aynı zamanda yeni verilerin güncellenmesi, silinmesi ve eklenmesiyle ilgili bir sorun olduğunda da ortaya çıkar. Örneğin, yazar tablosunda-
- Tabloya kitap ekleyemediğimiz sürece yeni bir yazar ekleyemeyiz.
- Kitabı veri tabanından tamamen silinceye kadar yazarı silemeyiz.
- 'Küçük Şeylerin Tanrısı' kitabını silmek istersek yazarın kimliği, yazarı ve uyruğu da silinir.
Yukarıdaki sorunlar, geçişli bağımlılıklar içeren herhangi bir ilişkide ortaya çıkar.
Geçişli Bağımlılığı Kaldırarak Üçüncü Normal Form
Şunu düşünelim Yazar tablosu üç özelliği (Author_ID, Author, Author_Nationality) kullanarak ve bu tablodan Geçişli bağımlılığı bulup ortadan kaldırmaya çalışın,
Yazarlar Tablosu:
Author_ID | Yazar | Kitap | Yazar_Uyruğu |
---|---|---|---|
A1 | Arundhati Roy | Küçük Şeylerin Tanrısı | Hindistan |
A1 | Kiran Desai | Zararın Mirası | Hindistan |
A2 | R. K. Narayan | Malgudy'nin İnsan Yiyeni | Hindistan |
Yukarıdaki Yazarın tablosu Geçişli bağımlılığa sahip olduğundan 3NF'de değil. Bakalım nasıl
Java dizesine göre bölünmüş
- Yazar → Author_Nationality Yazar → Author_Nationality
- Author_ID → Yazar
Bu nedenle aşağıdaki işlevsel bağımlılık da mevcuttur:
- Authir_ID → Author_Nationality yukarıda tartıştığımıza benzer bir model oluşturuyor.
Şimdi Geçişli bağımlılığı ortadan kaldırmak için tek yapmamız gereken Yazarın tablosunu Author_ID'nin artık işlevsel olarak Author_Nationality'ye bağlı olmayacağı şekilde bölmektir.
Biri yalnızca { Author_ID, Author} ve diğeri {Author_Nationality} içeren iki tablo oluşturalım. Yeni tablolar şöyle görünecek,
Yazar Tablosu
Author_ID | Yazar |
---|---|
A1 | Küçük Şeylerin Tanrısı |
A2 | Zararın Mirası |
A3 | Malgudy'nin İnsan Yiyeni |
Yazar Uyruk Tablosu
Yazar | Yazar_Uyruğu |
---|---|
Arundhati Roy | Hindistan |
Kiran Desai | Hindistan |
R. K. Narayan | Hindistan |
Artık yeni Yazar tablosu ve Yazar Uyruğu tablosu Geçişli bağımlılık içermiyor ve ilişki artık 3NF'de.