9 Ocak 2011 Pazar

TSQL ile Tablo Oluşturmak

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
)

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.

graphics/03fig07.gif

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

Merhaba