İlginizi Çekebilir
  1. Ana Sayfa
  2. SQL Server
  3. Veri Tipleri, Temeller ve Limitler

Veri Tipleri, Temeller ve Limitler

Uzun zamandır SQL veri tipleri, veri tiplerinin kullanımı, doğru ya da yanlış (gereksiz) veri tipleri kullanmanın ne gibi etkileri olacağı üzerine bir yazı yazmayı düşünüyordum. Ancak bütünlük oluşturması açısından önce veri tipi nedir, hangi veri tipinde ne tür veri tutulur sorularının kafamızda netleşmesini istiyorum.

Bu sebeple bu yazımda veri tipi nedir, hangi veri tipi ne işe yarar, bunun teknik maliyeti nedir sorularına cevap bulmaya çalışacağız. Başlamadan belirtmek isterim ki her ne kadar ben konuyu SQL üzerinden anlatacak olsam da aslında bilişim sektöründeki tüm çalışanların (yazılım, veritabanı, sistem…) az çok bilmesi gereken bilgileri paylaşmaya çalışacağım. Çünkü ister uygulama geliştiricisi olun, ister veritabanı mimarı, isterseniz bu uygulamaların çalıştığı sistemlerin yöneticisi, veri hepimizin işine direkt etki eden bir kavram. Az ya da çok tüm uygulamalarımızın ve sistemlerimizin amacı veriyi depolamak, işlemek.

Televizyonlarda gazetelerde bilişim sektöründen bahsederken hep sıfırlar ve birlerden bahsedilir. Peki, nedir bu sıfırlar ve birler. Bilgisayarımızın içine giren elektrik güç kaynağından geçişinden sonra doğru akım
olarak işlem görür. Aslında tüm o sıfırlar ve birler belirli bir alanda elektriğin olması ya da olmamasıdır. Elektrik akımı varsa 1 yoksa 0 dır oranın değeri.(İstisna durumları göz ardı ediyoruz. Örneğin kullandığımız manyetik disklerde (HDD) elektrikten fiziksel bir ize dönüşür. Benzer şekilde CD-DVD ler de böyledir. Ancak bu veriler işlenmek istendiğinde tekrar elektrik sinyallerine dönüşeceği için tamamından elektrik sinyali olarak söz edeceğim.)

Şimdi bilgisayarda veri nasıl tutulur buna bakalım. Dediğim gibi 0 ve 1 leri kullanıyoruz yani 2 tabanında çalışıyoruz. Bu demek oluyor ki bilgisayar üzerinde yaptığımız tüm işlemler aslında ikilik sistemdeki dataların işlenmesi. Bilgilerimizi Ram de tutarken de, işlemciye gönderirken de hep 2 lik sistemde gönderiyoruz.2 tabanındaki var olma işareti 1 yok olma işareti ise 0 dır. ( elektrik var (1) ,elektrik yok (0)).Bu varlık yokluk bilgisi tek bir alandaki bilginin olması ya da olmaması durumudur, işte bu tek alanı bit olarak adlandırıyoruz. Hani hep anlatılır ya 8 Bit = 1 Byte işte bu bit o bit.

En temel veri tipi olarak tüm geliştirme dillerinde ve veritabanlarında kullandığımız int (Integer) tipini inceleyelim.

Msdn den SQL de kullanılabilen integer veri tiplerini alalım (Tablo-1)

Uygulama geliştirirken yada veritabanı tasarımı yaparken veri tipleri ve bu veri tipleri içerisinde ne kadar data tutabileceğimiz, yani kısıtlamanın ne kadar olduğunu biliriz. Her ne kadar bir tablo oluştururken işin kolayın kaçıp genelde veri tipleri default ayarında bırakılsa ya da en yüksek ayarlar seçilse de veri tipi seçimi özellikle performans ve depolama alanı açısından çok kritik bir karar aşamasıdır.

Çok basit bir örnekle il bilgilerini tutacağımız bir tabloya id alan olarak tinyint kullanabileceğimiz gibi, bigint de kullanabiliriz hatta decimal, numeric , char vb. şekilde de kullanabiliriz.

Farkı görelim;

81 tane il için id lerin kapladığı alana bakalım;

Basit bir ID seçiminde bile ufak bir seçim farkının data boyutunu 81 Byte dan 648 Byte a kadar değiştirebildiğini görüyoruz. Bu id alanındaki tüm kayıtları seçen bir sorgum varsa;

Select Id From tbl_Iller

Bu sorgu yaptığım yanlış tasarım sonucu her seferinde diskten 81 Byte yerine 648 Byte okuyacak. Data Memory’de de benzer şekilde fazla yer kaplayacak vb.

Şimdi data tiplerindeki bu kısıtlamaların nereden geldiğine ve ne kadar data tutabildiğimize neyin karar verdiğine bakalım. Tablo-1 den Tinyint ile başlayalım;

Ara yüzlerde gördüğümüz adıyla tinyint olan data tipi int8 tipinde data tutar.int8 = 27 olarak yazılır. Bunu sıfır ve birler olarak nasıl gösterdiğimizi inceleyelim.


Tablo-3 de her bir bit ile ifade edebileceğimiz maksimum değeri görüyoruz. Şimdi binary yazılışlarını oluşturan bir tablo hazırlayıp tinyint e nasıl 255 sayının sığdığını görelim.

Tablo-4 bir datayı sıfır ve birler ile nasıl gösterebileceğimizin sade bir özeti aslında, tinyint için 8 bit alan ayırdık ve bitlerin tamamını 1 olarak işaretlesek bile ulaşabileceğimiz maksimum sayı 255.

Tablo-1 de Msdn den aldığımız data da gördüğümüz, tinyint tipine neden 0-255 arası sayıları yazabildiğimizi ve neden 1 Byte yer kapladığını da anlatıyor. (0 ve 1 lerin her biri bir bit ve 8 bit = 1 Byte)

Aslında aynı tablodaki smallint, int ve bigint için de aynı analizlerin yapılabileceğini fark etmişsinizdir.

Smallint int16,int int32 ve bigint int64 dersem tablolar zihninizde canlanacaktır. Ancak ben bu veri tiplerindeki bir farklılığa dikkat çekmek istiyorum;

Tekrar Tablo-1 e bakacak olursak

İncelediğimiz tinyint değeri 0-255 arasındaki pozitif sayıları depolayabilirken, smallint, int ve bigint de negatif ve pozitif sayılar depolanabildiğini görürüz. Burada işaret biti kavramını biraz açmalıyız.

Veri tipleriyle ilgili dokümanları incelerseniz bazı veri tiplerine signed, bazılarına ise unsigned dendiğini görebilirsiniz. Signed veri tipleri negatiften pozitife belli bir aralıkta sayı gösterebilirken unsigned tipler sadece pozitif aralıkta veri depolayabilir.

Veri tipinin hangi aralıktaki datayı depolayabileceğinin önemli bir kriteri de bu işaret bitidir(sign bit).Tablo-1 deki smallint,int,bigint veri tipleri signed veri tipleridir. İlk bitlerini işaret biti olarak ayırdıkları için smallint int16 olmasına ragmen 216 degil 2(16-1) yani 215 e kadar veri depolayabilirler. Bu sebeple smallint negatif yönde -32768 e kadar veri depolayabilirken pozitif yönde 32767 ye kadar veri depolayabilir.(0 ı da dikkate alırsanız pozitif ve negatif yönde 32768 e kadar depolama yapabildiği görülür.)

Benzer şekilde birçoğumuzun belki de zaman içerisinde kullana kullana ezberlediği int veri tipinin üst sınırı da 2,147,483,647 ( 231 -1) olarak kolayca hesaplanabilir.

Şimdi bu bilgilerimiz ışığında Msdn den aldığımız integer veri tipleri tablosuna biraz da yorum kararak kendi integer veri tipleri tablomuzu oluşturalım.

Orijinal tabloda olan alanları gri bırakıp yazı içerisinde yaptığımız incelemeler sayesinde istediğimizde hesaplayabileceğimiz bilgileri sarı işaretli sütunlara yazdık.

Umarım konunun netleşmesi adına faydalı bir yazı olmuştur.

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

Yorum Yap

Yazar Hakkında

İstanbul Üniversitesi Bilgisayar Mühendisliği mezunudur. Kariyerine yazılım ile başlamış olup, zaman içerisinde .Net ve Dynamics Axapta üzerinde geliştirmeler yapmıştır. Son yıllarda yoğun olarak, veritabanı teknolojileri, iş zekası ve raporlama sistemleri ile ilgilenmektedir. Eroğlu Holding'de Bilgi Teknolojileri Proje Lideri olarak çalışmaktadır.

Yorum Yap

Yorumlar (1)

  1. Faydalı bir makale olmuş. Elinize sağlık.