Veritabanı Tasarımı
Yazılım ve veritabanıyla ilgilenen arkadaşlarlara selamlar olsun :)
Blogumu takip ediyorsanız bir önceki makalemde veritabanıyla ilgili teorik bilgiler vermeye çalışmıştım.Bu makalemde ise bir veritabanı tasarım öncesi süreçlerden bahsediyor olacağım.
Öncelikle veritabanında veriler nasıl depolanır gözden geçirelim.Exceli bilirsiniz,yeni bir boş excel dosyası oluşturup içeriğini açtığınızda karşınıza boş satırlar ve kolonlar gelecektir.
İşte bu gördüğünüz boş excel yapısı ile tasarımını yapacağımız veritabanı yapısı arasında en önemli fark;excelde sınırlı sayıda kolon oluşturabiliyorken veritabanı sistemlerinde sınırsız sayıda kolon oluşturma imkanı sağlamasıdır.
Aynı zamanda excelin yanlış hatırlamıyorsam en yüksek satır sayısı 65.000 küsür iken,bu sayı SQL veritabanında dosya boyutuyla (yaklaşık 1.9 gb) ile sınırlıdır.
Bu demek oluyor ki verilerimizi excelde saklamak yerine aynı verileri hem daha hızlı hem de daha esnek yapıda 100 katından daha fazla bir alana sığdırabiliriz.
Şimdi ise birazda veritabanı tablo yapısından bahsedelim,az önce bahsettiğim gibi veritabanında veriler excel gibi tablolarda saklanır ve sorgularla işleme tabi tutulurlar.
Bu tablolara kaydedilen verilerin biçimini bizim belirleyebilmemiz oldukça avantajlı bir durumdur çünkü hem esnekliği hem de performansı kontrolümüz altına almış oluyoruz.
Bu veri biçimlerinden bazılarından bahsedersek en çok şu tipler kullanılmaktadır;
1-VarChar()
İngiliz alfabesi ve numerik karakterleri tutar,parantez içerisinde boyutu sınırlanabilmektedir.
2-NVarChar()
VarChar'dan farklı olarak UTF-8 olarak bilinen ve içerisinde Türkçe karakterlerinde geçtiği uluslararası bilgisayar karakter kodlamasıdır.Yani kaydettiğiniz veride Türkçe karakterler varsa bu veri tipini tutmanız gerekmektedir.
3-Int
Yazılımcıların en çok kullandığı ve en bilinen veri tipidir.Sadece sayısal değerler tutabilir ve dolayısıyla SQL de de sık sık kullanılmaktadır.
4-DateTime
Eğer veritabanına kaydettiğimiz veri içerisinde tam tarih ve saat tutuyorsa veriyi bu tipte kaydederiz.
5-Date
DateTime'dan farklı olarak sadece tarih tutan veri tipidir.
6-Bit
Yazılımdaki karşılığı boolean olan ve değeri sadece 1(true) veya 0 (false) değerlerini tutan veri tipidir.Genelde sorunun cevabının sadece evet ya da hayır olarak tutmasını istediğimiz anlarda kullanışlıdır.
Veritabanına yeni başlayan yazılımcı ve bu konuda henüz temel bilgisi olduğunuzu varsayarak diğer veri tiplerini saymaya gerek duymuyorum çünkü ileri ki makalelerimde diğerlerini de uygulamalı olarak göreceğiz.
Şimdi de normalizasyon kuralları dediğimiz veritabanı düzeninden bahsetmek istiyorum.
Önceki makalemde bahsettiğim gibi veritabanı dizayn ederken excel gibi tek bir tabloya mahkum değiliz ve istediğimiz kadar tabloyu istediğimiz kombinasyonlarda dizayn etme şansına sahibiz.Ancak birden fazla tabloya sahip olduğumuzda bir veriyi farklı tablolara kaydetmek istediğimizde çoğu durumlarda tekrar tekrar yazmak zahmetine giriyoruz.
Şimdi şöyle bir hayal kuralım :)
Biz bir bakkalız ve artık teknolojiye ayak uydurmaya karar verdik bakkal defterini bırakıp veresiye bilgilerini bilgisayarımıza kaydetmeye kadar verdik.Yaklaşık 100 tane müşterimiz olsun ve her müşterinin aldığı ürünleri tek tek bilgisayara kaydetmek isteyelim.
Excelimizi açıyoruz ve kolonlar şu şekilde yer almaktadır.
Müşteri Adı - Aldığı Ürün - Adet - Toplam Tutar
Burada 4 adet kolon yer almaktadır ve bu sabah Ahmet amca bizden 2 ekmek almaya geldi:
Müşteri Adı - Aldığı Ürün - Adet - Toplam Tutar
Ahmet Amca - Ekmek - 2 - 2,50 TL
Buraya kadar tüm bilgileri elle yazıyorduk ve Ahmet amca 5dk sonra tekrar geldi ve yumurta almayı unuttuğunu söyledi,öncekini silmeden yeniden bir kayıt giriyoruz:
Müşteri Adı - Aldığı Ürün - Adet - Toplam Tutar
Ahmet Amca - Yumurta - 5 - 2,00 TL
Ahmet amca gibi 100 müşterimiz daha olsa ve her seferinde elle "Ahmet Amca","Yumurta" ve TL bilgisini yazdığımızı düşünürsek işimizin ne kadar zorlaşacağını hayal etmek kolay olmasa gerek :)
İşte veritabanı mantığı burdan gelmekte ve aynı verileri (Ahmet Amca) tekrar tekrar yazmak yerine "müşteriler" tablosuna bir kez Ahmet amcanın adını kaydedip ona sayısal bir değer atayıp o değeri her yerde kullanma şansı vermektedir.Böylece veri girişleri hem daha hızlı, hem daha düzenli hem de daha sonra raporlama ve istatistiki bilgileri en sağlıklı şekilde elde edebileceğiz.
Kafanıza şöyle bir soru takılabilir:
"Diyelim Ahmet amcayı veritabanına 12 sayısıyla kaydettik ama 100 tane müşterimiz varsa her biri için ayrı ayrı karşılık gelen sayısal değerleri mi ezberleyeceğiz?"
Bunun cevabını şu şekilde verebiliriz;
Eğer bu veritabanını bir program kullanacaksa programa bizim yerimize herşeyi önceden tanımlayıp ezberleteceğiz ve tüm yükümüzü program üstlenecektir,
veya
arada herhangi bir program kullanmayacaksak, ki bu durumda veritabanının tek başına pek bir anlamı kalmayacaktır.O yüzden veritabanı tasarımlarını daha doğrusu tasarlanan veritabanlarını bir yazılım yönetir ve işletir.
Konunun önemini belirtmek açısından şimdilik bu kadarı yeterlidir diye düşünüyorum,bir sonraki makalemde tasarım öncesinde tablolar arasında nasıl etkileşim kurulduğunu ve bu etkileşim için bağlantıları nasıl gerçekleştireceğimizden bahsedeceğim.Konuya bakılırsa uygulamadan çok teorik ilerliyoruz ancak veritabanı mantığını tam olarak kavrayamazsanız uygulamalarda "neden","nasıl" gibi sorular kafanıza takılmaya başlayacak ve projelerinizden verim sağlayamayacaksınız.Bu yüzden önce ne yaptığımızı anlamak önemli!
Şimdilik yazının sonuna gelmiş bulunmaktayız,kendinize iyi bakın esen kalın :)
Blogumu takip ediyorsanız bir önceki makalemde veritabanıyla ilgili teorik bilgiler vermeye çalışmıştım.Bu makalemde ise bir veritabanı tasarım öncesi süreçlerden bahsediyor olacağım.
Öncelikle veritabanında veriler nasıl depolanır gözden geçirelim.Exceli bilirsiniz,yeni bir boş excel dosyası oluşturup içeriğini açtığınızda karşınıza boş satırlar ve kolonlar gelecektir.
İşte bu gördüğünüz boş excel yapısı ile tasarımını yapacağımız veritabanı yapısı arasında en önemli fark;excelde sınırlı sayıda kolon oluşturabiliyorken veritabanı sistemlerinde sınırsız sayıda kolon oluşturma imkanı sağlamasıdır.
Aynı zamanda excelin yanlış hatırlamıyorsam en yüksek satır sayısı 65.000 küsür iken,bu sayı SQL veritabanında dosya boyutuyla (yaklaşık 1.9 gb) ile sınırlıdır.
Bu demek oluyor ki verilerimizi excelde saklamak yerine aynı verileri hem daha hızlı hem de daha esnek yapıda 100 katından daha fazla bir alana sığdırabiliriz.
Şimdi ise birazda veritabanı tablo yapısından bahsedelim,az önce bahsettiğim gibi veritabanında veriler excel gibi tablolarda saklanır ve sorgularla işleme tabi tutulurlar.
Bu tablolara kaydedilen verilerin biçimini bizim belirleyebilmemiz oldukça avantajlı bir durumdur çünkü hem esnekliği hem de performansı kontrolümüz altına almış oluyoruz.
Bu veri biçimlerinden bazılarından bahsedersek en çok şu tipler kullanılmaktadır;
1-VarChar()
İngiliz alfabesi ve numerik karakterleri tutar,parantez içerisinde boyutu sınırlanabilmektedir.
2-NVarChar()
VarChar'dan farklı olarak UTF-8 olarak bilinen ve içerisinde Türkçe karakterlerinde geçtiği uluslararası bilgisayar karakter kodlamasıdır.Yani kaydettiğiniz veride Türkçe karakterler varsa bu veri tipini tutmanız gerekmektedir.
3-Int
Yazılımcıların en çok kullandığı ve en bilinen veri tipidir.Sadece sayısal değerler tutabilir ve dolayısıyla SQL de de sık sık kullanılmaktadır.
4-DateTime
Eğer veritabanına kaydettiğimiz veri içerisinde tam tarih ve saat tutuyorsa veriyi bu tipte kaydederiz.
5-Date
DateTime'dan farklı olarak sadece tarih tutan veri tipidir.
6-Bit
Yazılımdaki karşılığı boolean olan ve değeri sadece 1(true) veya 0 (false) değerlerini tutan veri tipidir.Genelde sorunun cevabının sadece evet ya da hayır olarak tutmasını istediğimiz anlarda kullanışlıdır.
Veritabanına yeni başlayan yazılımcı ve bu konuda henüz temel bilgisi olduğunuzu varsayarak diğer veri tiplerini saymaya gerek duymuyorum çünkü ileri ki makalelerimde diğerlerini de uygulamalı olarak göreceğiz.
Şimdi de normalizasyon kuralları dediğimiz veritabanı düzeninden bahsetmek istiyorum.
Önceki makalemde bahsettiğim gibi veritabanı dizayn ederken excel gibi tek bir tabloya mahkum değiliz ve istediğimiz kadar tabloyu istediğimiz kombinasyonlarda dizayn etme şansına sahibiz.Ancak birden fazla tabloya sahip olduğumuzda bir veriyi farklı tablolara kaydetmek istediğimizde çoğu durumlarda tekrar tekrar yazmak zahmetine giriyoruz.
Şimdi şöyle bir hayal kuralım :)
Biz bir bakkalız ve artık teknolojiye ayak uydurmaya karar verdik bakkal defterini bırakıp veresiye bilgilerini bilgisayarımıza kaydetmeye kadar verdik.Yaklaşık 100 tane müşterimiz olsun ve her müşterinin aldığı ürünleri tek tek bilgisayara kaydetmek isteyelim.
Excelimizi açıyoruz ve kolonlar şu şekilde yer almaktadır.
Müşteri Adı - Aldığı Ürün - Adet - Toplam Tutar
Burada 4 adet kolon yer almaktadır ve bu sabah Ahmet amca bizden 2 ekmek almaya geldi:
Müşteri Adı - Aldığı Ürün - Adet - Toplam Tutar
Ahmet Amca - Ekmek - 2 - 2,50 TL
Buraya kadar tüm bilgileri elle yazıyorduk ve Ahmet amca 5dk sonra tekrar geldi ve yumurta almayı unuttuğunu söyledi,öncekini silmeden yeniden bir kayıt giriyoruz:
Müşteri Adı - Aldığı Ürün - Adet - Toplam Tutar
Ahmet Amca - Yumurta - 5 - 2,00 TL
Ahmet amca gibi 100 müşterimiz daha olsa ve her seferinde elle "Ahmet Amca","Yumurta" ve TL bilgisini yazdığımızı düşünürsek işimizin ne kadar zorlaşacağını hayal etmek kolay olmasa gerek :)
İşte veritabanı mantığı burdan gelmekte ve aynı verileri (Ahmet Amca) tekrar tekrar yazmak yerine "müşteriler" tablosuna bir kez Ahmet amcanın adını kaydedip ona sayısal bir değer atayıp o değeri her yerde kullanma şansı vermektedir.Böylece veri girişleri hem daha hızlı, hem daha düzenli hem de daha sonra raporlama ve istatistiki bilgileri en sağlıklı şekilde elde edebileceğiz.
Kafanıza şöyle bir soru takılabilir:
"Diyelim Ahmet amcayı veritabanına 12 sayısıyla kaydettik ama 100 tane müşterimiz varsa her biri için ayrı ayrı karşılık gelen sayısal değerleri mi ezberleyeceğiz?"
Bunun cevabını şu şekilde verebiliriz;
Eğer bu veritabanını bir program kullanacaksa programa bizim yerimize herşeyi önceden tanımlayıp ezberleteceğiz ve tüm yükümüzü program üstlenecektir,
veya
arada herhangi bir program kullanmayacaksak, ki bu durumda veritabanının tek başına pek bir anlamı kalmayacaktır.O yüzden veritabanı tasarımlarını daha doğrusu tasarlanan veritabanlarını bir yazılım yönetir ve işletir.
Konunun önemini belirtmek açısından şimdilik bu kadarı yeterlidir diye düşünüyorum,bir sonraki makalemde tasarım öncesinde tablolar arasında nasıl etkileşim kurulduğunu ve bu etkileşim için bağlantıları nasıl gerçekleştireceğimizden bahsedeceğim.Konuya bakılırsa uygulamadan çok teorik ilerliyoruz ancak veritabanı mantığını tam olarak kavrayamazsanız uygulamalarda "neden","nasıl" gibi sorular kafanıza takılmaya başlayacak ve projelerinizden verim sağlayamayacaksınız.Bu yüzden önce ne yaptığımızı anlamak önemli!
Şimdilik yazının sonuna gelmiş bulunmaktayız,kendinize iyi bakın esen kalın :)
çok güzel anlatmışsınız tşk
Merhaba; Eşsiz bir tanımlama yapmışsınız. Emeğinize sağlık, Başarılar.