Tablo Tasarlama, Key Ve İndex Kullanımı

Tablo tasarımı yapılırken öncelikle nelerin kayıt alınacağı, bunlara girilecek bilgilerin tipi ve uzunluğu saptanır. Daha sonra yapılacak optimizasyonlar yapılır, anahtar alanlar vs saptanır ve daha sonra tablo oluşturulur.

Örnek bir tablo

Öğrenci no     Adı               Soyadı          Sınıfı   Doğum Tarihi           Cinsiyet        Mezuniyet

1                 İbrahim         Kutluay         5        01.04.1974             Erkek            Yüsekokul

3                 İsmail           Kutluay         4        02.02.1976             Erkek            Üniversite

2                 Tuba            Şahin            2        03.05.1980             Kadın            Lise

8                 İbrahim         Şahin            5        05.05.1983             Erkek            İlkokul

4                 İsmail           Şahin            1        08.01.1986             Erkek            İlkokul

9                 Azize            Şahin            2        02.04.1988             Kadın            Lise

5                 Türkan          Şahin            1        01.01.1960             Kadın            İlkokul

  
Şimdi genel mantık açısından tablo tasarımı konusunda fikir geliştirelim.

Görüldüğü gibi öğrenci no herkes için tek bir değer almaktadır. İsim ve soy isim char ve ya varchar olarak tanımlanabilir ve 20 karakter yeterlidir. Sınıf değeri için şu anda smallint tipi bile uygun ama 6 FEN C gibi değerler içinde hazır bir alan tutmak adına varchar yada char tanımlanabillir.  Burada tasarım hüneri bunlarda değil son iki sütundadır. Şöyleki gördüğünüz gibi cinsiyet bilgisi 5, mezuniyet ise 10 karakter uzunlukta. Tabloda 1.000.000 kayıt var ise bu iki sütun toplam 15 Mb yer kullanacaktır. Peki biz cinsiyet değeri yerine, erkek =1 kadın= 0 olarak smallint , ve de mezuniyet için aynı teknikle, ilkokul =0, ortaokul=1, lise=2 , Myo =3 ve Üniversite=4 diye iki değer kullansak nasıl olur. Ekrana görüntülerken ilave kod yazmak gerekecek ancak ilk hali ile 15 MB yer kullacak olan bu sütunlar smallint ile sadece 2 MB yer tutacak. Tabii bu değerler liste alınırken vs hafızanın daha ekonomik kullanılmasınada yarayacak.

 

Son olarak ise arama işlevleri için hazırlık yapmaya gelelim. Şimdi Örneğin adı Tuba olan öğrenciyi bulmak istersek ne yapmak gerekecek. CSV örneklerini hatılarsak For each ile bütun tabloyu sırayla okuyup kontrol edeceğiz. Peki bu işlemi hızlandıramazmıyız. Örneğin yukardaki asıl tablonun asıl tablonun yanında birde anahtar dosya tanımlasak. Mesela numara alanı için

 

Öğrenci no     Adı    

1                 İbrahim

2                 İsmail

3                 Tuba  

4                 İsmail 

5                 Türkan

8                 İbrahim

9                 Azize  

 

Şeklinde kayıt tutan bir indeks dosyası tanımlasak ve burada kayıtlar sıralı olduğu için arama yöntemleri kullansak nasıl olur. Örneğimizde 8 nolu kayda ulaşmak için 5 kayda gidip kontrol etmek gerekirken ikiye bölerek arama yöntemi kullanılırsa neler olur.

 

Bu töntemde kayıtların en ortasındaki eleman bulunur. Örneğimizde bu 4 tür. Aradığımız değer bundan büyükse buraya kadar elemanlar iptal olur, küçükse bundan sonraki değerler iptal olur. Görüldüğü gibi ilk elemede kayıtların yarısı uçmakta. Daha sonra orta eleman 8 oluncaya kadar bu yüntem devam edecektir.

 

Bir adım daha ileri gidelim;

 

Bu öğrencilerin derslerini ve bu derslerden aldıkları notlarıda tabloda tutacak olursak ilk akla gelen öğrenci tablonsunun sonuna tüm dersleri eklemek olacaktır. Oysa lisede bu öğrenciler dallara ayrılacak ve her öğrenci sadece belli bir ders grubunu alacaktır. Kısaca bu yapı hem öğrenci tabslonu şişirecek hemde hiçbilgi girişi yapılamayacak bir sürü boş alana sebep olacaktır.

 

Şimdi o zaman dersleri ayrı bir tabloda tutalım demenin vakti gelmiştir. Yani

 

Öğrenci No    Ders Adı        Not 1  Not 2  Not 2  Sözlü  Ortalama

1                 Matematik     50      40      60      80      55

Yukardaki ilk örneğe bakılırsa daha pratik çünkü öğrenciler sadece aldıkları derslerden not almış ve kayıt edilmiş olacaklar. Ancak hala yapıalacak bir şey var; Gördüğünüz gibi ders adı metin bir alan ancak ders isimleri genelde belli. Yani bunlarıda cinsiyet gibi bir tabloda tutup, 0 ? Matematik, 1 Türkçe şeklinde tutmak mümkün.

Gördüğünüz gibi veriyi şu anda bir çok tabloya bölündü ama bir çok yer tasarrufuda sağlanmış oldu. Bu tasarımın Turkcell gibi 20 milyona yakın abonesi olan bir yerde yapıldığını düşünürseniz veritabanının  boyunun kaç GB küçülmüş olabileceğini düşünün.

Programcılık dünyasında artık veritabanı tasarımı ayrı bir uzmanlık alanı haline gelmiştir. Yukarda saydıklarımız şüphesiz kimseyi veritabanı yöneticisi yapmaz ama arama algoritmaları ve indekslerin gerekliliği ise sadece tavsiye anlamında kaynaklarda yer almaktadır. O bakımdan işin detayını öğrenmek bakımından iyi bir adım atılmış olmaktadır.

2744 - (Toplam) 1 - (Bugün)

Bu yazı Bilişim, Internet, PHP, Programlama, Veritabanı Yönetim kategorisine gönderilmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word