CREATE TABLE Ornek1
(
mus_id char(4) NOT NULL,
mus_ad varchar(40) NULL,
ili varchar(20) NULL,
ulke char(2) NULL,
adres varchar(30) NULL
)
Database Management System (DBMS)
9 Ocak 2011 Pazar
Normalization(Normalleştirme) Nedir?
Normalization, her bilgiye ait olduğu en iyi yerleşimi tanımlama işlemidir. Normalleştirme, veriyi en aza indiren, veriyi uygun gruplamalarla uygun veri türüne yerleştiren ve yapıyı en iyi şekilde kullanan bir tasarım yaklaşımıdır. Normalleştirilen bir veri modeli doğru şekilde düzenlendiği için fiziksel veritabanına çevirilebilir.
Normalization E.F. Codd tarafından 1970’ler de ilişkisel modelleri geliştirmek için yaratılmıştır.
Normalleştirilen bir veri modeli, her tablonun iyi oluşturulduğunu garanti eder ve her alanın uygunluğunu belirtir. Kesinlikle, en iyi durum, normalleştirilen mantıklı bir veri modelinin fiziksel olabildiği zamandır.
Normal Formlar
İlk veri normalleştirme tanımlamaları E.F. Codd tarafından yaratıldı. E.F. Codd ilk olarak 1971 ve 1972’de üç normal formu tanımladı. Daha sonra bu formlara ek normal formlar eklendi.
Birinci Normal Form
İlk normal formun amacı (1NF), bir nesneden (tablo) tekrarlanan grupları ve parça parça olmayan veriyi çıkarmaktır. Veri, 1NF’e uyduğu zaman, tablonun her alanı, diğer sözcüklerden ayrık gerçek bir olgudur.
Tanımlanması
1NF ile normalleştirilen bir veri modeli, tekrarlanan gurupları bireysel nesneler(tablolar) içerisinden çıkartır. Başka bir deyişle, aynı veriyi depolayan tek bir nesne içerisinde birden çok kez aynı değer kullanılmaz. Tablo 1 de bir kolej veya üniversitenin STUDENT(Öğrenci) bilgilerinin tutulduğu örnek bir tablo gösterilmektedir.
Bu veriler 1NF modeli için ihlaller içerir. Örneğin STUDENT tablosu içinde tekrarlanan kurs bilgileri var. Üstelik kurs bilgilerinin aynı tablo içerisinde ayrık bir şekilde olduğuna dikkat ediniz. Bunun için öncelikle STUDENT ve COURSE isimli iki ayrı tablo oluşturalım.
Oluşturduğumuz bu tablolar için belirli tanıyıcılara ihtiyaç duyarız. Tanıyıcı nesnelere de örnek olarak birincil anahtarları sayabiliriz.
Tablolar için birincil anahtar seçerken dikkatli olmalıyız. Bu zor olabilir. Tercih edebileceğimiz ilk birincil anahtar COURSE(Kurs) tablosu içinde ki CourseNum (KursNo) kolonudur. Yalnız COURSE tablosununu oluştururken kurs bilgisine de ihtiyaç duyarız.
1NF’in ikinci bir ihlali ise, StudentName (ögrenci adi) kolonunun parça parça kullanılmamasıdır. Ögrenci adının LastName, FirstName ve MiddleInit gibi yeni alanlara ayırabiliriz. Bu durum arama işlemlerini hızlandıracaktır. Buna göre 1NF’in en son hali Tablo 2 ve Tablo 3 de gösterilmektedir.
Table1. Normalleştirilmemiş STUDENT Verileri | ||||||
StudentID | StudentName | MajorID | StudentMajor | CourseNum | CourseName | CourseCompDate |
2907 | Smith, Jacob R | MAT | Mathematics | MAT0011 MAT0027 EGL0010 | Discrete Math Calculus I English Classics I | 2002-08-01 2002-04-30 2001-12-30 |
4019 | Patterson, Jane K | PHI | Philososphy | PHI0010 CS00100 | Intro to Philosophy Programming Languages | 2002-04-30 2002-04-30 |
5145 | Neeld, Norris B | EGL | English Literature | SOC0102 | Ascent of Man | 2002-08-01 |
6132 | Morrison, Xavier Q | MUS | Music | MUS0002 SOC0102 | Origin of Jazz Ascent of Man | 2002-04-30 2002-08-01 |
7810 | Brown, Richard E | CS | Computer Science | | | |
8966 | Juarez, Samantha | EGL | English Literature | EGL0010 EGL0101 | English Classics I Shakespeare II | 2001-12-30 2002-08-01 |
Table2 1NF ile Normalleştirilmiş STUDENT Verileri | |||||
StudentID | LastName | FirstName | MiddleInit | MajorID | StudentMajor |
2907 | Smith | Jacob | R | MAT | Mathematics |
4019 | Patterson | Jane | K | PHI | Philosophy |
5145 | Neeld | Norris | B | EGL | English Literature |
6132 | Morrison | Xavier | Q | MUS | Music |
7810 | Brown | Richard | E | CS | Computer Science |
8966 | Juarez | Samantha | | EGL | English Literature |
Table3 1NF ile Normalleştirilmiş COURSE Verileri | |||
StudentID | CourseNum | CourseName | CourseCompDate |
2907 | MAT0011 | Discrete Math | 2002-08-01 |
2907 | MAT0027 | Calculus I | 2002-04-30 |
2907 | EGL0010 | English Classics I | 2001-12-30 |
4019 | PHI0010 | Intro to Philosophy | 2002-04-30 |
4019 | CS00100 | Programming Languages | 2002-04-30 |
5145 | SOC0102 | Ascent of Man | 2002-08-01 |
6132 | MUS0002 | Origin of Jazz | 2002-04-30 |
6132 | SOC0102 | Ascent of Man | 2002-08-01 |
8966 | EGL0010 | English Classics I | 2001-12-30 |
8966 | EGL0101 | Shakespeare II | 2002-08-01 |
İkinci Normal Formlar
İkinci normal formlar(2NF), tablo alanlarının birincil anahtarlara bağlı olduğunu garanti eder. 1NF’i 2NF verisine dönüştürmek için, veriler tekrar etmeyecek şekilde ayrı nesneler(tablolar) oluşturulur ve oluşturulan bu tablolara alanlar uygun bir şekilde yerleştirilir. Son olarak ikinci tabloya dış anahtar verilir ve ikinci tablo ile birinci tablo ilişkilendirilir.
Tanımlanması
Tablo 2 ve 3’ e bir daha dönelim. COURSE tablosu içerisinde tekrar eden kurs isimlerine (English Classics I" ve "Ascent of Man.") dikkat edelim. Bu durum 2NF’in ihlalini gösterir. Aynı kurs isimlerini tekrar ettirmemek için veritabanına ENROLLMENT isminde yeni bir tablo ekliyelim. ENROLLMENT tablosuna CourseNum, StudentID ve CourseCompDate kolonlarını ekliyelim. ENROLLMENT tablosundaki CourseNum kolonunu dış anahtar olarak belirleyelim ve COURSE tablosundaki CourseNum ile ilişkilendirelim.
Normalleştirme işleminin başka bir faydası, sık sık yaratılan yeni nesnelere(tablolara), ihtiyaç duyulan yeni alanların eklenmesidir. Örneğin COURSE tablosuna kursların kredi sayısını tutan Credits alanını ekleyebiliriz.
Table4 2NF ile Normalleştirilmiş ENROLLMENT Verileri | ||
StudentID | CourseNum | CourseCompDate |
2907 | MAT0011 | 2002-08-01 |
2907 | MAT0027 | 2002-04-30 |
2907 | EGL0010 | 2001-12-30 |
4019 | PHI0010 | 2002-04-30 |
4019 | CS00100 | 2002-04-30 |
5145 | SOC0102 | 2002-08-01 |
6132 | MUS0002 | 2002-04-30 |
6132 | SOC0102 | 2002-08-01 |
8966 | EGL0010 | 2001-12-30 |
8966 | EGL0101 | 2002-08-01 |
Table5 2NF ile Normalleştirilmiş COURSE Verileri | ||
CourseNum | CourseName | Credits |
MAT0011 | Discrete Math | 3 |
MAT0027 | Calculus I | 4 |
EGL0010 | English Classics I | 3 |
PHI0010 | Intro to Philosophy | 3 |
CS00100 | Programming Languages | 3 |
SOC0102 | Ascent of Man | 3 |
MUS0002 | Origin of Jazz | 3 |
Tablo1’in 2NF ye göre normalleştirilmiş hali Tablo4 ve 5 de gösterilmektedir.
Üçüncül Normal Formlar
Üçüncü normal formlar (3NF), kolonlar arasında ilişkiler olmadığını, kolonların bir tablonun içinde var olduğunu garanti eder. Tablo içerisinde ki her alanın birincil anahtara bağlı olmasını sağlar. Üçüncü normal form içerisindeki veri modelleri için şu ifadeyi kullanırız “her alan bir anahtar veya anahtarlara bağlıdır, eğer anahtar veya anahtarlara bağlı değil ise kod’dan yardım istenir”
Tanımlanması
Tablo1’de ki STUDENT bilgilerine tekrar dönerek 3NF ihlallerine bir bakalım. Tablodaki öğrenciler hatayla aynı konuyu iki kere alabilirler. Örneğin aynı öğrenci hata sonucu iki kez matematik dersi alabilir. Bu problemi düzeltmek için MAJOR adında bir tablo yaratılır ve içerisine MajorID adında bir kolon eklenir. Son olarak MajorID birincil anahtar olarak belirlenir ve STUDENT tablosuyla ilişkilendirilir. Bu problemin düzeltilmiş hali Tablo 6 ve 7 de gösterilmektedir.
Table6. 3NF ile Normalleştirilmiş STUDENT Verileri | ||||
StudentID | LastName | FirstName | MiddleInit | MajorID |
2907 | Smith | Jacob | R | MAT |
4019 | Patterson | Jane | K | PHI |
5145 | Neeld | Norris | B | EGL |
6132 | Morrison | Xavier | Q | MUS |
7810 | Brown | Richard | E | CS |
8966 | Juarez | Samantha | | EGL |
Table7. 3NF ile Normalleştirilmiş MAJOR Verileri | |
MajorID | StudentMajor |
MAT | Mathematics |
PHI | Philosophy |
EGL | English Literature |
MUS | Music |
CS | Computer Science |
Normalleştirilmiş Veri Modeli
Tablo1 de belirtilen STUDENT tablosunun normalize (1NF, 2NF, 3NF) edilmiş hali aşağıdaki şekilde gösterilmektedir.
Diğer Normal Formlar
3NF’den sonra çeşitli ek normal formlar tanımlanmış ve belgelendirilmiştir. Bu ek normal formlar aşağıdaki gibidir.
· Boyce Codd normal form (BCNF) 3NF’in devamıdır.
· Fourth normal form (4NF)
· Fifth normal form (5NF)
Bir başka makalede görüşmek üzere...
Tamer ŞAHİNER
Kaydol:
Kayıtlar (Atom)