Fonksiyonel Bağımlılık - Functional Dependency
Fonksiyonel bağımlılık bize bir veritabanı tasarlarken veritabanının kaynağını mümkün olduğu kadar verimli kullanmamızı gösterir ve bizi olası veri tekrarından nasıl sakınacağımıza dair önümüzü görmemizi sağlar. Buradaki asıl amaç hız'dan çok kaynak tüketiminin önüne geçmektir.
Fonksiyonel bağımlılık bize bir veritabanı tasarlarken veritabanının kaynağını mümkün olduğu kadar verimli kullanmamızı gösterir ve bizi olası veri tekrarından nasıl sakınacağımıza dair önümüzü görmemizi sağlar. Buradaki asıl amaç hız'dan çok kaynak tüketiminin önüne geçmektir.
Fonksiyonel Bağımlılık, bir veri tabanındaki bir tablonun alanlarından(A1, A2,….An) bir veya birkaç alanın, bir veya birkaç alanı tanımlaması olarak anlayabiliriz.
R = {A1, ..., An} bir tablo/View veya birkaç tablodan meydana gelen herhangi bir ilişki olsun.
A1, ..., An ise tablonun Kolonları, X(A1,A2) ve Y(A5,A6) de 1 veya daha fazla kolondan oluşan bir küme ve r,s,t, … de satırlarlar olsun.
X,Y R'nin bir alt kümesi olmak kaydıyla, bütün r.X = t.X , r.Y = t.Y satırlardaki eşitliklerden yola çıkarak X → Y (X , Y'yi tanımlar) diyebiliriz.
Unutulmaması gerek bir kural ise: Fonksiyonel bağımlılık tek yönlüdür. Yani X → Y ≠ Y → X.
Biraz karmaşık olduğunun farkındayım. Bir örnek ile göstermek gerekir ise: Film adında bir tablomuz olsun.
Film tablosunun Alanları da FilmAdı, Yılı, Süresi, Tipi, Stüdyo,Oyuncuadı olsun.
Satır
|
FilmAdı
|
Yılı
|
Süre
|
Tipi
|
Stüdyo
|
Oyuncuadı
|
r
|
Total Recall
|
1990
|
113 dk
|
Renkli
|
Fox
|
Sharon Stone
|
s
|
Basic Instinct
|
1992
|
127 dk
|
Renkli
|
Disney
|
Sharon Stone
|
t
|
Total Recall
|
1990
|
113 dk
|
Renkli
|
Fox
|
Arnold Schwarzenneger
|
u
|
Dead Man
|
1995
|
121 dk
|
Siyah-beyaz
|
Paramount
|
Johnny Depp
|
v
|
Total Recall
|
2012
|
118 dk
|
Renkli
|
Paramount
|
Colin Farrell
|
w
|
Total Recall
|
2012
|
118 dk
|
Renkli
|
Paramount
|
Bryan Cranston
|
FilmAdı, Yılı → Süre
FilmAdı,Yılı → Tipi
FilmAdı,Yılı → Stüdyo
FilmAdı,Yılı → Süre, Tipi,Stüdyo
FilmAdı ve Yılı Kolonlarından filmin Süre'sine erişebilriz. Buradaki temel amaç Aynı FilmAdı ve Yılı'nı verdiğimizde her zaman sadece 1 sonuç alabilmemizdir.Yani FilmAdı ve Yılı bir filmin süresini tanımlamıştır. Dikkat edilirse FilmAdı tek başına süreyi tanımlamamıştır. Total Recall adındaki film tek başına ele alındığında, 2 farklı stüdyo ve süre bilgisini verir. Aynı film 12 yıl sonra farklı bir stüdyoda çekilmiş olabilir.
Aynı şekilde FilmAdı ve Süre'si OyuncuAdı'nı tanımlamamıştır. Aynı FilmAdı ve Süre'si bize birden farklı bilgi döndürebilir. Bu durumda FilmAdı ve Süre'si OyuncuAdı kolonunu tanımlamaz.
Bu örneğimizi formüle uygular isek:
X = FilmAdı, Yıl
Y = Süre,Tipi,Stüdyo olduğunu varsayarsa. Mutlaka fonksiyonel bağımlılığın olabilmesi için r.X = t.X , r.Y = t.Y olmak zorundadır.
Yukarıdaki örneğimizdeki veri tekrarlarını dolayısıyla kaynak israfını önlemek için, tablomuzu 2 tabloya bölmemiz gerekmektedir.
1.tabloya Film 2.tabloya ise Oyuncular adını verirsek
Film
FilmAdı
|
Yılı
|
Süre
|
Tipi
|
Stüdyo
|
Total Recall
|
1990
|
113 dk
|
Renkli
|
Fox
|
Basic Instinct
|
1992
|
127 dk
|
Renkli
|
Disney
|
Dead Man
|
1995
|
121 dk
|
Siyah-beyaz
|
Paramount
|
Total Recall
|
2012
|
118 dk
|
Renkli
|
Paramount
|
FilmAdı
|
Yılı
|
Oyuncuadı
|
Total Recall
|
1990
|
Sharon Stone
|
Basic Instinct
|
1992
|
Sharon Stone
|
Total Recall
|
1990
|
Arnold Schwarzenneger
|
Dead Man
|
1995
|
Johnny Depp
|
Total Recall
|
2012
|
Colin Farrell
|
Total Recall
|
2012
|
Bryan Cranston
|
Bu tablolarda görüldüğü gibi, Film tablosunun kayıt sayısı 6 satırdan 4 satıra düşmüştür. Olası yeni eklenecek bir filmde aynı oyuncular için tekrar tekrar satır yazmak yerine sadece film bilgilerini girmemiz yeterli olacaktır. Şu anki örnek bile veritabanı tam olarak verimli kullanılmış sayılmaz. Veritabanının verimli kullanılması durumu Veritabanı normalizasyonu adı altında, Normal Formlar konusunda anlatılacaktır.
Soru : R = {A,B,C} ilişki şeması verilmiş olsun. Öyle bir tablo yaratın ki, AB → C bir fonksiyonel bağımlılığı sağlamasın fakat C → B bir fonksiyonel bağımlılığı sağlasın.
Cevap:
R
A
|
B
|
C
| |
s
|
0
|
0
|
0
|
t
|
0
|
0
|
1
|
v
|
1
|
0
|
1
|
Tabloda görüldüğü gibi 1. Örnekte verilen AB → C bağıntısını incelediğimizde
s.A = 0, s.B = 0, s.C = 0 iken
T.A = 0, t.B = 0 fakat t.C = 1 dir.
Burada t.C fonksiyonel bağımlığı bozmuştur. Dolayısıyla AB → C bir fonksiyonel bağımlılığı sağlanmamıştır. Diğer bir değişle AB, C kolonunu tanımlamamıştır.Veya C kolonu AB kolonuna fonksiyonel bağlımlı değildir..
2. Örnekte verilen C → B bağıntısını incelediğimizde
t.C = 1 , t.B = 0 iken
v.C = 1 , v.B = 0 dır. Dolayısıyla C → B bir fonksiyonel bağımlılığı sağlanmıştır. Diğer bir değişle C, B kolonunu tanımlamamıştır. Veya B kolonu C kolonuna fonksiyonel bağlımlıdır.
Hiç yorum yok:
Yorum Gönder