30 Eyl 2016

Fonksiyonel Bağımlılık - Functional Dependency

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, 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  Y (X , Y'yi tanımlar) diyebiliriz.
Unutulmaması gerek bir kural ise: Fonksiyonel bağımlılık tek yönlüdür. Yani   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

Fonksiyonel Bağımlılık - Functional Dependency

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...