Cemre Acar
Veritabanlarında Fonksiyonel Bağımlılık

Veritabanlarında Fonksiyonel Bağımlılık

Bu yazımda Normal Formlar ile iç içe bir şekilde Fonksiyonel Bağımlılık (Functional Dependency) kavramını ele alacağım ve yazım Fonksiyonel Bağımlılık nedir ? Normalleştirme nedir ? gibi soruları iç içe örnekler ile yanıtlıyor olacak. Ayrıca daha önceki yazılarda ER Diyagramları ve Normal Formlardan bahsetmiştik eğer okumadıysanız bu yazılara da göz atmanızı tavsiye ederim. Uzatmadan hemen konuya girelim.

Fonksiyonel Bağımlılık, iyi ve kötü veritabanı tasarımı arasındaki farkı bulmak için hayati bir rol oynar. İki nitelik (attribute) arasında var olan bir ilişkidir ve veritabanındaki verilerin kalitesini korumanıza yardımcı olur. Genellikle bir tablodaki birincil anahtar ve anahtar olmayan nitelik arasında bulunur. Fonksiyonel bir bağımlılık bir okla gösterilir.

A → B 

Bu gösterim , A fonksiyonel olarak B'yi tanımlar anlamına geliyor. Daha da detaylandırmak gerekirse , R bir ilişki şeması olsun. A ve B nitelikleri R'ın alt kümesi olduğunu varsayalım. Eğer ki A nitelikler kümesinin değerleri B nitelikler kümesinin değerlerini belirliyorsa B , A'ya fonskiyonel bağımlı denir.

Bazı temel bağımlılık kuralları aşağıda verilmiştir ;

{A → B} = AC → BC  |  Çoğaltma Kuralı
{A → B , B → C} = A → C  |  Geçişlilik Kuralı
{A → B , A → C} = A → BC  |  Toplama Kuralı

Aday Anahtar kavramını da bu bağlamda ele alacak olursak ;
A’ nın R ilişkisi için aday anahtar olması A  R şeklinde verilir. Yani, eğer R ilişkisi {ABCDEF} ise ve A bir anahtar ise A → BCDEF şeklinde verilir. Aday anahtarlardan bir tanesi birincil anahtar olarak seçilir. Bu anahtar değeri hiç bir zaman NULL değeri alamaz.


*Aşağıdaki iki farklı görsel Hacattepe Üniversitesi Resmi PDF belgesinden alınmıştır.


Şimdi de Closure kavramına değinelim. Bir dizi F fonksiyonel bağımlılık kümesi verildiğinde, F tarafından mantıksal olarak ima edilen bazı diğer fonksiyonel bağımlılıklar vardır. Eğer A → B ve B → C ise A → C diyebiliriz. Buna aynı zamanda transitivity (geçişlilik) de denir. F tarafından mantıksal olarak ima edilen tüm fonksiyonel bağımlılıklar kümesine closure denir. F+ şeklinde ifade edilir. Daha iyi anlamak için soru üzerinden gitmemiz daha iyi olacaktır. Aşağıda örnek bir soru ve çözümünü gözlemleyebiliriz. 



Not : Burada soruyu çözmeden önce bilmemiz gereken bir şey var. Eğer A → BC ise aynı zamanda A →ABC'dir. Her bağımlılık aynı zamanda kendisini de verir. Örneğin X → Y ise X → XY'dir.

Örnek Soru:
R(A,B,C,D,E) ilişkisi için ,
→ BC
CD → E
→ D
E → A
fonksiyonel bağımlılıkları verilmiş olsun. Buna göre ;

Soru 1 ) A+ hesaplayınız.
Soru 2 ) B+ hesaplayınız.

Soru 1 Çözümü :
İlk olarak verilenlere göre zaten A → BC elimizde var yani A → ABC. Diğer verilenlerden yola çıkarsak B → D ye gidiyor. Elimizde ABCD oldu. Yine verilenlere göre , CD → E 'ye gidiyor. Genele bakarsak ben tüm niteliklere erişebildim. Bunu yukarıda anlattığımız gibi şu şekilde ifade ediyoruz;

A+ → A , B , C , D , E

Ve tabii ki bu aynı zamanda bir aday anahtar , çünkü tüm niteliklere erişebildik.

Soru 2 Çözümü :
Burada yine verilen B → D ye göre ulaşabildiğimiz B → BD var. Ancak gerisine baktığımda ne B'den ne de BD'den başka bir niteliğe ulaşamıyorum. Dolayısıyla ;

B+ → B , D

olarak yazabiliriz.

Başka bir örnek daha çözelim ve bu sefer Normal Formları da işin içine katalım.



Örnek Soru:
R(A,B,C,D,E) ilişkisi için ,
AB → C
DE → C
B → D
fonksiyonel bağımlılıkları verilmiş olsun. Buna göre ;

Soru 1 ) R , BCNF'e uygun mudur değil midir ? 
Soru 2 ) R , 3NF'e uygun mudur değil midir ?

Soru 1 Çözümü :
Soruya baktığımızda ABE bizim aday anahtarımız. Yani ABE+ → A , B , C , D , E. Şimdi burada bağlılıkların sol tarafına baktığımızda ABE göremiyoruz. En yakın ihlali bozan AB → C 'dir buradan A , B , C , D ye erişebiliyoruz ama E'ye erişemiyoruz. Yani bu R ilişkisi BCNF'e uygun değildir.

Soru 2 Çözümü :
Öncelikle yine aday anahtarımıza bakıyoruz , yani ABE+ → A , B , C , D , E. 
AB → C , DE → C ve B → D hiç biri aday anahtar değildir. 3NF'e göre aday anahtarın alt kümesi olan bağımlı nitelik de 3NF'e uyar. (3NF ve diğer normal formlar için Veritabanlarında Normalizasyon yazıma göz atabilirsiniz.) Bu arada hangisi bağımlı karıştırmamanız için küçük bir dipnot X → Y bağımlılığında X belirleyici (determinant) , Y bağımlı (dependent) niteliklerdir. Sadede gelir isek ilişkimizdeki bağımlı olan nitelikler C ve D. Ancak yukarıda da belirttiğimiz gibi aday anahtarımız ABE idi ve C ile D nitelikleri aday anahtarımızın alt kümesinde yer almıyorlar. Bu yüzden R , 3NF'e de uygun değildir diyebiliriz.

Bir de son olarak 3NF'e uyan bir soru çözelim de nasıl oluyor onu da öğrenmiş olalım.

Örnek Soru:
R(A,B,C,D) ilişkisi için ,
ABC → D
→ A
fonksiyonel bağımlılıkları verilmiş olsun. Buna göre ;

Soru 1 ) R , BCNF'e uygun mudur değil midir ? 
Soru 2 ) R , 3NF'e uygun mudur değil midir ?

Soru 1 Çözümü :
Bu soruda 2 aday anahtarımız var , ABC ve BCD. Verilen ABC → D bağımlılığı bir aday anahtar , ancak yine verilen D → A bağlılığında D bir aday anahtar değil bu yüzden BCNF ihlal edilmiş oluyor.

Soru 2 Çözümü :
Yukarıda da belirttiğim gibi ABC ve BCD bizim aday anahtarlarımız. Soruda verilen ABC → D bağımlılığı bir aday anahtar , D → A bağıntısında ise D bir aday anahtar değil , ama 3NF'e göre aday anahtarın alt kümesi olan bağımlı nitelik de 3NF'e uyar. (3NF ve diğer normal formlar için Veritabanlarında Normalizasyon yazıma göz atabilirsiniz.) Bu bağlamda D → A bağlılığındaki bağımlı nitelik olan A , ABC aday anahtarının bir alt kümesidir. Sonuç olarak R , 3NF'e uygundur.


Olabildiğince örneklerle pekiştirmeye çalıştım umarım anlaşılmıştır ve işinize yarar. Yazımda eksik ya da yetersiz gördüğünüz kısımları yorum olarak belirtebilirsiniz. İyi çalışmalar dilerim.

Heyy ! Blog'a abone olup yazılarımdan ilk sen haberdar olmak ister misin ?

ABONE OL!

Yorumlar

Neslihan | 25.03.2020

Ellerine sağlık

Eyüp Can | 21.04.2020

Güzel anlatmışsın, eline sağlık.

Yorum Ekle

Yorumunuz onaylandıktan sonra yayınlanacaktır.