Fonksiyonel
Bağımlılık Kavramı
Veritabanı şemasının oluşturulmasında,
veritabanı tasarımının temeli olan normalizasyon kavramının kullanımı
gerekmektedir.
SSN
|
Name
|
Section
|
Class
|
TCKN
|
001213082
|
Jonny Deep
|
Computer
Engineering
|
4
|
44245432129
|
991213068
|
Caterina
Murino
|
Human Resources
|
3
|
40445400027
|
Yukarıdaki tablosu için fonksiyonel bağımlılıklar:
SSN -> Name
SSN -> Name, Section, Class, TCKN
TCKN -> SSN, Name, Section, Class
Fonksiyonel bağımlılık kavramında -> operatörünün sol veya sağ
tarafında birden fazla alan (nitelik) yer alabilir. Bu alanları küme ile ifade edersek ->
operatörünün sol veya sağ tarafında birden fazla alan yanyana geldiğinde oluşan
yeni yapıyı kartezyen çarpım kümesi olarak adlandırılır.
Normalizasyon Kavramı
Veritabanı
normalizasyonu, ilişkisel veri modeli sistemlerinde hangi tabloların oluşturulacağına
karar verme kurallarıdır. İyi tasarlanmış bir veritabanı uygulaması için bu
kurallara uyma zorunluluğu uygulamanın kapsam ve önemiyle doğru orantılıdır.
Bir
veritabanı tablosu bir tek varlık kümesine ait bilgileri tutmak için
tasarlanır. İlişkisel veritabanı yaklaşımını ilişkisel yapan asıl unsur
verilerin tablolara parçalanarak saklanmasıdır. Tabloların kaç adet olacağı ve
birbiriyle nasıl ilişkilendirileceğine karar verirken, bazı kuralları
kullanarak mantıksal bir plan elde edilmelidir.
Eğer
tablolar üzerinde verileri normalize yapılmazsa birçok sıkıntı meydana
gelebilir. Bazı bilgiler birden fazla tekrarlanabilir. Bir bilgiyi UPDATE,
DELETE ve INSERT için birden fazla tabloda bulma, değiştirme ve silme yapmamız gerekebilir.
Bu nedenle normalizasyon kurallarını kullanılmalıdır.
İhtiyaçlarımız
doğrultusunda normalizasyon işlemlerinin dozajını ayarlayarak iyi tasarlanmış varlık-ilişki
şemalarına ulaşılabilir. Genel olarak kabul gören 6 normalizasyon formu vardır.
Gerçek hayattaki uygulamalarda ilk 3 normalizasyon formu kurallarını yerine
getirilirse iyi tasarlanmış bir veritabanı yapısı elde edilebilir.
Birinci Normal
Form (1 NF)
Birinci
Normal Formdaki bir tablo şu özelliklere sahip olmalıdır:
·
Tablo
satır bağlamında tekrarlı veri içerebilir(Herhangi iki satır tamamen aynı
olmamalıdır).
·
Her
tablonun birincil anahtarı (primary key) olmalıdır.
·
Aynı
tür veriyi tanımlamak için birden fazla alan(sütun) kullanılmamalıdır.
·
Nitelikler
(Alanlar) çok değerli olmamalıdır. Bütün nitelik değerleri atomik olmak
zorundadır.
·
Tablo
tekrarlayan alanlar içermemelidir.
İkinci Normal
Form (2 NF)
İkinci
Normal Formdaki bir tablo, 1 NF’nin şartlarını sağlamalı, buna ek olarak
birincil anahtar oluşumunda yer almayan hiçbir alan, birincil anahtarın hiçbir
öz altkümesine fonksiyonel olarak bağımlı olmamalıdır.
Spare Part Number
|
Store
|
Piece
|
Store Address
|
42
|
Boston
|
2000
|
Main St.
|
333
|
Boston
|
1000
|
Main St.
|
390
|
New York
|
3000
|
Broad St.
|
Yukarıdaki
envanter tablosu Birinci Normal Formun bütün kriterlerini sağlamasına rağmen, İkinci
Normal Form gereklerini sağlamamaktadır. Tablonun birincil anahtarı Spare Part
Number + Store alanlarının kombinasyonudur. ‘Store Address’ alanı birincil
anahtara fonksiyonel olarak bağımlıdır. Aynı zamanda ‘Store’ alanına da
fonksiyonel olarak bağımlıdır. ‘Store’ alanı birincil anahtarın bir öz altkümesi
olduğu için tablonun 2 NF özelliği bozulmaktadır.
Bu
tablo tasarımında olası problemler şunlardır:
·
‘Store
Address’ alanı aynı ‘Store’ alanındaki kayıtta tekrarlanmaktadır.
·
Eğer
‘Store Address’ alanında değişiklik meydana gelirse, ilgili her kayıtta güncelleme
yapmak gerekecektir.
·
Eğer
‘Store’ alanının birinde hiç kayıt kalmazsa, ilgili kaydın ‘Store Address’
alanında da hiç kayıt tutulmayacaktır.
Bu
problemleri çözmek için iki ayrı tablo haline getirilmelidir. Böylece İkinci
Normal Form kriterlerini sağlamış oluruz.
Spare Part Number
|
Store
|
Piece
|
42
|
Boston
|
2000
|
333
|
Boston
|
1000
|
390
|
New York
|
3000
|
Store
|
Store Address
|
Boston
|
Main St.
|
New York
|
Broad St.
|
Üçüncü Normal
Form (3 NF)
Üçüncü
Normal Formdaki bir tablo, İkinci Normal Formun şartlarını sağlamalı, buna ek
olarak birincil anahtar oluşumunda yer almayan hiçbir alan, birincil anahtar
oluşumunda yer almayan hiçbir alana fonksiyonel olarak bağımlı olmamalıdır.
Personal Number
|
Section
|
Section Address
|
234
|
Finance
|
Boston
|
223
|
Enginnering
|
Boston
|
399
|
Finance
|
Washington
|
Yukarıdaki
tablo İkinci Normal Form’un bütün kriterlerini sağlamasına rağmen, Üçüncü Normal
Form gereklerini sağlamamaktadır. Tablonun birincil anahtarı ‘Personal Number’
alanıdır. Tablonun 3 NF kriterlerine aykırı olmasına nedeni ‘Section Address’
alanı, ‘Section’ alanına fonksiyonel olarak bağlıdır. (‘Section’ birincil
anahtar değildir.)
Bu
tablo tasarımındaki problemler:
·
‘Section
Address’ alanı her yeni kayıtta tekrarlanmaktadır.
·
‘Section
Address’ alanında meydana gelecek herhangi bir değişiklik, ilgili bütün
kayıtların güncellenmesini gerektirecektir.
·
Eğer
‘Section’ alanında hiç kayıt kalmazsa, ilgili ‘Section Address’ alanındaki
kayıtta silinecektir.
Bu
problemleri çözmek için iki ayrı tablo haline getirilmelidir. Böylece Üçüncü
Normal Form kriterlerini sağlamış olur.
Personal Number
|
Section
|
234
|
Finance
|
223
|
Enginnering
|
399
|
Finance
|
Section
|
Section Address
|
Finance
|
Boston
|
Enginnering
|
Washington
|
Boyce-Codd
Normal Form (BCNF) (3.5 NF)
3.5NF’daki
bir tablo Üçüncü Normal Form’un gereklerini taşımalı ve ayrıca her
determinant (belirleyici kolon) aynı zamanda bir aday anahtar olmalıdır.
Determinant: Aynı
satırdaki diğer kolon değerlerini belirlemek için kullanılan kolon kümesi
determinant olarak adlandırılır.
Normalizasyon Katman Simülasyonu |
Dördüncü Normal Form (4 NF)
Bir
veri tabanının 4NF olabilmesi için 3NF’nin gereklerini sağlamalıdır ve ayrıca
çok değerli bağımlılıkları (multi valued dependency) olmamalıdır.
Multi
Valued Dependency: Bir ya da daha çok veri satırının var olması, aynı tabloda başka bir (ya
da daha çok) veri satırının bulunmasını gerektirdiğinde ortaya çıkar. Geliştirilen bir yazılımın tek kullanıcılı ve çok kullanıcılı olarak iki
versiyonu olsun. Bu yazılımı içeren bir veritabanı oluşturulsun. Veritabanında yazılımın tek kullanıcılı versiyonunu eklenirse mutlaka yazılımın çok-kullanıcılı versiyonu için de
bir kayıt açmak zorunludur.
Beşinci Normal Form (5 NF)
Tekrarlamaları
ortadan kaldırmak için her bir tablonun mümkün olduğunca küçük parçalara
bölünmesi gerekir. Aslında ilk 4 kural sonuçta bu işe yarar ancak, bu kurallar
kapsamında olmayan tekrarlamalar da 5 normalizasyon kuralı ile giderilebilir.
Bir sonraki yazımda görüşmek üzere…