Normalizasyon, Fonksiyonel Bağımlılık, Anahtarlar
- Zekigulluoglu Zekigulluoglu
- 12.048
- Orta
- 29 Ocak 2013
Bu makalede sizlere SQL server'da normalizasyonun nasıl yapılacağını ve anahtar kısıtlarından ve fonksiyonel bağımlılıktan söz edeceğiz.
Bu makalede sizlere SQL server'da normalizasyonun nasıl yapılacağını ve anahtar kısıtlarından ve fonksiyonel bağımlılıktan söz edeceğiz.
Anahtar Sınırlamaları
Bütünlük sınırlamalarının sağlanmasında anahtarlar önemli rol oynar. Anahtar türü belirlenerek, bu sınırlamaların veri tabanı yönetim sistemi tarafından otomatikman yapılması sağlanır. Söz konusu anahtarlar şunlardır:
- Birincil anahtar(primary key)
- Dış anahtar(foreign key)
Birincil anahtar sınırlamaları
İlişkisel veri tabanlarında bir tablonun benzer değerler içermeyen (unique) bir sütunu ya da bir kaç sütunu birlikte birincil anahtar olarak tanımlanabilir. Birincil anahtar söz konusu varlığın kayıtlarına en iyi biçimde karakterize eden bir anahtardır. Birincil anahtar null değerleri ve birbirinin aynı değerleri içeremez. Bu sınırlamaları kontrolü VTYS tarafından yapılır. Birincil anahtar(b.a.) tek bir sütundan oluşabileceği gibi birden fazla sütunun bileşiminden de oluşabilir. Bu durumda bileşik birincil anahtar kavramından söz edilir.
Dış anahtar sınırlamaları
Bir dış anahtar bir sütun veya çok sayıdaki sütunların bileşiminden oluşur. Dış anahtar aynı tabloya da bir başka tabloda yer alan birincil anahtarlarla eşlenirler. Dış anahtarın değeri bir birincil anahtar değeriyle eşlenmeli ve null olmamalıdır.
İlişkisel Veri Tabanı Tasarımı
İlişkisel veri tabanı tasarımında normalleştirme adı verilen işlemler büyük önem taşır. Normalleştirme işlemini iyi anlayabilmek ve bu tür işlemleri yerine getirebilmek için fonksiyonel bağımlılık kavramını iyi anlamak gerekir.
Normalleştirme
İ.V.T tasarlanması aşamasında verinin tekrarlanma kaybını veya yetersizliğini önlemek için normalleştirme işlemi uygulanır. Normalleştirme işlemi teorisi normal form kavramına dayanır.
Fonksiyonel Bağımlılık
R bir ilişki şeması olsun. X ve Y niteliklerinin R'nin alt kümesi olduğunu varsayalım. eğer x nitelikler kümesinin değerleri y nitelikler kümesinin değerlerini belirliyorsa y x'e fonksiyonel bağımlı denir. O halde R ilişkisinin y niteliği R'nin x niteliğine ilişkisel olarak bağımlı ve x'in her bir değeri Y'nin bir değerine karşılık geliyorsa fonksiyonel bağımlılıktan söz edilir. x -> y .. Eğer bu bağıntı geçerliyse ve x ten bir nitelik çıkarıldığı halde bu bağımlılık hala geçerliyse burada kısmi bağımlılık söz konusudur.
Örnek: Bir şirketin müşterilerine partiler biçiminde ürün gönderildiğini varsayalım. Her bir müşteri ayrı bir ilde yer almaktadır.bir şehir birden fazla müşteri içerebilir. Her bir şehir şehir koduna sahiptir. Her bir müşteriye birden fazla parti ürün gönderilebilir. Bu verileri saklamak için bir ilişkisel tablo oluşturulduğunu varsayalım. Bu tablonun adı dağıtım olsun. Söz konusu dağıtım şeması şu şekilde gösterilebilir.
DAÃITIM(m_no,şehir_kodu,şehir,p_no,miktar)
m_no:müşteri no , şehir_kodu: şehir trafik kodu , p_no: parti numarası , miktar: ürün miktarı
Verinin tekrarlı olmasını önlemek için m_no ve p_no bileşik anahtar olarak tanımlanmıştır. Bu verilere dayanarak fonksiyonel bağımlılıkları şu şekilde ifade edebiliriz.
m_no -> şehir_kodu,şehir
şehir -> şehir_kodu
m_no,p_no -> miktar
Birincil Normal Form
Bu tablo birincil normal form olarak tanımlanır. (Excel tablosu)
İlişkisel veri tabanının temel kuralıdır. Birincil formdaki bir tablo belirli bazı alanlarda tekrarlı verilere sahiptir. Örneğin şehir kodu ve şehir verileri bir müşteri için tekrarlanır. Bu tekrarlar güncelleme sorunlarına yol açacaktır. Ayrıca bu forma bilgi girişi ve silme işlemlerinde soruna neden olacaktır.
B.N.F. Sorunları:
Satır ekleme sorunu: Bir başka şehirdeki örneğin İzmir'deki müşterinin m_no şehir kodu ve şehir bilgilerinin girilebilmesi için mutlaka bir dağıtım işlemini gerçekleştirilmesi gerekiyor. Bunun anlamı söz konusu ekleme işleminin yapılabilmesi için bu müşteriye ilişkin bir dağıtım, işleminin yapılmış olması ve p_no ile miktar değerlerinin belirlenmiş olması söz konusudur. Bu değerler olmadan kayıt ekleme işlemi yapılamaz.
Satır silme sorunu: Bir dağıtım işlemini iptal edilerek ilgili kaydı silinmeye çalışıldığının varsayalım. Bir satır silindiğinde sadece dağıtım ve miktarı değil müşteri hakkındaki diğer bilgiler de yok olacaktır.
Güncelleme sorunu: m1 müşterisinin yerini İstanbul'dan anakaraya taşıyalım.
Bu yeni bilgi nedeniyle tablo içinde m1 e ait 5 satırın güncellenmesi gerekecektir. Eğer tablo çok büyük ise sadece bir müşteri ile ilgili bu tür bir küçük değişiklik belki de binlerce kaydın güncellenmesi sorununu üretecektir.
İkincil Normal Form
Tabloların sütunları arasındaki fonksiyonel bağımlılıktan yararlanarak 1NF tablolarının birden fazla tabloya dönüşmesi halinde ikinci normal forma ulaşılabilir. Eğer bir ilişki şemasındaki birincil anahtar olmayan bir nitelik R'nin herhangi anahtara niteliğine kısmı fonksiyonel olarak bağımlı ise bu ilişki 2NF da dır denir. Yani ikincil normal formada ilişkisel tablonun her bir anahtar olmayan sütunu, birincil anahtara tam fonksiyonel bağımlıdır. Bunun anlamı anahtar olmayan her kolon birincil anahtara bağımlı olmalıdır. Dağıtım tablosu 1NF dadır. Çünkü şehir_kodu ve şehir sütunları bileşik anahtarı sadece m_no sütunu üzerine fonksiyonel bağımlıdır. İkincil normal form kendisi anahtar olmayan tüm sütunların anahtara bağlanarak yeni tablolara ayrıştırılması ile oluşturulur.2NF durumunda dağıtım tablosu şehirler ve miktarlar isimli iki tabloya dönüşür.
2NF'un Sorunları
Satır ekleme sorunu: şehirler isimli tabloya yeni bir müşteri kaydı girilmediği sürece yeni bir şehir kodu ve şehir adı girilmesine olanak yoktur. Örneğin bu tabloya, 52 şehir koduna sahip ordu ilini eklemek gerektiğinde bir sorunla karşılaşılacaktır. Bu ili tabloya dâhil etmek için bu ilde yerleşmiş bir müşteriye ihtiyaç vardır. Böyle bir müşteri olmadığı sürece şehir ile ilgili bu tür bilgiler tabloya eklenemez.
Satır silme sorunu: Tablodan bir müşteri silindiğinde şehir kodu ve şehir adı bilgileri yok olacaktır.
Üçüncü Normal Form 3NF
R'deki herhangi bir anahtarın içinde yer almayan niteliği R'nin herhangi bir niteliğine geçişli fonksiyonel bağımlı değil ise ve ayrıca 2NF özelliklerine sahip ise bu ilişkinin 3NF da olduğu söylenir.
Boyce_Codd Normal Formu
2NF, 3NF durumunda olup geçişli bağımlılık içermeyen bir ilişkisidir. Kendisi anahtar olmayan özellikler anahtara fonksiyonel olarak bağlı bulunmamaktadır.3NF de bazı sorunlarla karşılaşılabilir. Bu sorunları önlemek için BCNF formu kullanılır. Örnek olarak aşağıdaki tabloyu göz önüne alalım
ÖÃRENCİ(öğrenci_no,bölüm,öğretim_üyesi)
Burada birincil anahtar öğrenci_no,bölüm olarak belirlenmiştir.
Fonksiyonel bağıntı ise öğretim_üyesi -> bölüm
Bir öğrenci birden çok bölüme yazılabildiği gibi bir bölümde birden fazla öğretim elemanı yer alabilmektedir. Bu durumda, öğrenci birden çok bölüme yazılabildiği için öğrenci no anahtarı bölümü belirleyememektedir. Keza aynı nedenle öğrenci_no anahtarı öğretim üyesini belirleyememektedir. Burada öğrenci_no ile bölüm anahtarları birlikte öğretim üyesi niteliğine ve öğrenci no ile öğretim üyesi anahtarı da bölüm niteliğini belirlemektedir. Bu kombinasyonların her ikiside anahtar olabilir. Öğrenci şeması tanım olarak 1NF'dadır. Anahtarsız nitelikler bir anahtar bağlı olduğu içinde 2NF'dadır. Ayrıca geçişli bağımlılık bulunmadığı için 3NF'dadır.
Öğrenci şemasında öğretim üyesi bir aday anahtar değil bir belirleyici olduğu için bu ilişki BCNF'da bulunmamaktadır.
Dördüncü Normal Form 4NF
Bazı durumlarda BCNF'daki bir ilişkide sorunlar görülmektedir.
Burada bir öğrenci birden çok fazla bölüme ve spor etkinliğine sahip olabilmektedir. Çoklu bağıntılarda ekleme ve silme esnasında sorunlarla karşılaşılabilir. Örneğin matematik ve muhasebe bölümleri ile kayak ve tenis spor etkinliklerine katılan 77 numaralı öğrenci için 4 ayrı kayıt yapılmaktadır. bu öğrencinin futbol etkinliğine katılabilmesi için ayrıca 2 kayıt daha eklenmesi söz konusudur. Böylece çok sayıda yineleme sorunu ortaya çıkar. bu sorunu önlemek için bu tabloda verilen ilşki 2 alt tabloya ayrılır.
Beşinci Normal Form
Bütün yineleme sorunları bu formla gideriliyor.