20 Şubat 2012 Pazartesi

SQL Server Veri Tipleri (I. Bölüm)

Konumuz olan SQL server veri tipleri, yalnızca tablolar sütunlarında değil, değişkenler ve parametreler gibi diğer veritabanı nesneleri için de zorunludur.



Uzun zamandır blogumu yazısız bırakmaktan ötürü biraz mahçup olarak, gecenin bu saatinde yeni bir yazı kaleme alıyorum. SQL Server veri Tipleri.

Önemsiz gibi görünen konularda yazmak, şeytanın gizli olduğu ayrıntıları işaret etmek, özellikle de bizim gibi azgelişmiş ülkelere mahsus yöntemlerle -belki de makus talihimiz budur- ivme
kazanmaya çalışan memleketlerde daha bir önemlidir. Lafı çok uzatmadan yazımıza girelim.

Basit bir analoji ile, bir veritabanı tablosunu, Excel'deki bir çalışma sayfasına benzetebiliriz: Satır ve sütunlardan müteşekkil bir veri ortamı.

Nasıl ki iyi dizayn edilmiş bir çalışma sayfasında, satırların başlık bilgileri belirtilmiş ve siz bu başlık bilgilerinden aşağı-yukarı bu alanlara girilecek veri tipleri hakkında fikir sahibi oluyorsanız, veri tabanı tablolarında da, yani satır ve sütunlardan oluşan bu veri ortamında da benzer bir yapı mevcuttur.

Siz Excel çalışma sayfasında, satır başlıklarında belirtilen ne olursa olsun herhangi bir kısıtlayıcı unsurun dayatması olmaksızın, tüm girdiğiniz verileri, klavyenizin Enter tuşuna nazikçe basarak kabul ettirebilirsiniz; ancak veritabanlarında durum çok daha farklıdır. Veritabanlarında bilgilerin hücresel olarak tutulduğu kolonlar bir veri tipi ile ilişkilendirilmiş ve bu veri tiplerinin
zorlayıcılıkları ile veri girişleri kısıtlanmıştır.

Konumuz olan SQL server veri tipleri, yalnızca tablolar sütunlarında değil, değişkenler ve parametreler gibi diğer veritabanı nesneleri için de zorunludur.

SQL server, mevzu bahis olan bu veri tiplerini şu ana başlıklar altında kategorilendirir. Bu kategoriler:

- Sayılar
- Metinsel Veriler
- Parasal Veriler
- Tarih ve Saat
- İkilik (Binary) veriler
- Özel amaçlı veriler (XML gibi)


Sayısal Veri Tipleri
______________________
bigint, 8 byte veri depolayabilir. Pozitif veya negatif büyük sayıları saklayabilirsiniz. Veri saklama aralığı, -2E63 ile 2E63-1 aralığındadır.

int, 4 byte veri depolayabilir. Pozitif ve negatif veri saklayabilir.

smallint, bu programcılar olarak bize en tanıdık gelen veri tipidir. -32768 ile 32767 arasındaki sayı aralıklarını saklayabilir.

tinyint, bu tip de biz programcılara tanıdık gelecektir. 0 ile 255 arasında veri depolayabilir. Bugünün yüksek seviyeli dillerinden önceki dönemlerde kullanılan Byte tipinin aynısıdır.

decimal, sayı hassasiyetine bağlı olarak 5-17 byte arasında verileri saklayabilir.

numeric, işlev, özellik ve kapasite bakımından decimal ile aynıdır. Birbirlerinin yerine kullanılabilirler. Ben hiç kullanmadım :)

Decimal ve numeric veri tipleri, tip tanımlamaları için parametre kullanabilirler. Bu parametreler, sayı hassasiyeti ve ölçeklenebilirlik için kullanılabilir. Örnek olarak, decimal(12,4)
tanımlaması ile sayımızın 12 basamaklı olacağını ve virgülden sonra dört basamak alabileceğini belirtiyoruz.
Decimal veri tiplerinde, basamak ve duyarlılık belirlerken şu kurala uymak zorundayız:

0 <= duyarlılık <= basamak <= 38.

Sayısal veri tipleri içinde en çok kullanılan iki veri tipi, decimal ve int'tir.
Decimal veri tipi, tam sayıları da saklayabilir. Tabii decimal veri tipini bu şekilde kullanmanın ekstra maliyeti olacağını da hatırlatmak gerekiyor.

Int, veri tipi negatif ve pozitif tam sayıları saklamasına rağmen, nadiren negatif tamsayılar için kullanılır. Bununla birlikte, int veri tipinin eski bir alışkanlıktan ötürü, hoyratça kullanıldığını
da ekleyebiliriz.
Şayet saklamayı planladığınız değer, 32767 'den daha büyük değilse, smallint veri tipini kullanarak iki byte'lık bir tasarruf sağlayabilirsiniz. Ve yine kullanacağınız sayısal değer 0 - 255
aralığında ise, her satır için 3 bytelık bir tasarrufla, tinyint veri tipini kullanabilirsiniz.
Günümüzün evlere şenlik dünyasında, sadece birkaç yüz dolara satın alınabilen devasa kapasiteli hard diskler göz önüne alındığında, bizim zikrettiğimiz bu birkaç bytelık tasarruflar, laf-ı güzaf
sayılabilir. Oysa burada sözünü ettiğimizin yalnızca disk kapasitesini verimli kullanmak olmadığı, milyonlarca satır içeren veritabanları ile çalışan işinin ehilleri için hiç de öyle "adam sen de!" denilmeyecek bahislerdendir. :)

Bir de şu yaklaşık sayıları içeren veri tiplerine kısaca değinerek sayılar bahsini sonlandıralım. Zira matematik ile arası hiç iyi olamamış biri olarak, sayılardan bu kadar uzun uzadıya bahsediyor olmayı bile, kendi adıma bir mucize addediyorum.

Yaklaşık sayı veri tipleri, decimal veri tiplerini de saklayabilir. Float tipinde, sayı yuvarlanır; kesin değer değil de yaklaşık değer saklanır.

Bu sebeple parasal veri saklarken,duyarlı olan decimal tipi tercih edilmelidir.


Hiç yorum yok: