film indir
Ocak
4th 2008
ADO.NET için İlişkisel Veritabanı Tasarımı

Posted under Programlama



Günümüzde hemen hemen her web tabanlı hem de büyük çaplı kurumsal uygulamlarda verilerin işlenmesi gerekiyor. Verileri bir veritabanında saklamak ve bunları programlama dilleri ile işlemek için uyugulama geliştirme ara birimleri (API) kullanılır.

Microsoft Windows ortamında geçtiğimiz üç beş yılda ençok kullanılan uygulama geliştirme arabirimi olarak ADO (Activex Data Object) öne çıkmıştır. .NET ile ise ADO.NET’i kullacağız. ADO.NET ADO’ya nazaran birçok yenilik ve kolaylıklar getirmiştir. Bunları ilerleyen yazılarımızda detaylı olarak inceleyeceğiz.

Veritabanları ve İlişkisel Veritabanı Modeli

Veritabanı Nedir?

Veritabanı verilerimizi düzenli bir biçimde tablolar halinde saklamamızı sağlayan programlardır. Veritabanları ile ayrıca verilerimizi güvenli ve hızlı bir biçimde işlememize yardımcı olurlar. Milyonlarca kayıtı aynı anda içinde barındıran ve bir çok gelişmiş araçlar sunan veri tabanı programlarına, veri tabanı yönetim sistemleri denir. Mesela MS Access bir veritabanı programıdır. Diğer taraftan MS SQL Server, Oracle, Sysbase, DB2 ve İnformix tam birer veritabanı yönetim sistemleridir. Veritabanı yönetim sistemleri tam donanımlı olarak veriler üzerinde her türlü işlemi kolayca ve verilerin güvenliğini sağlayarak çalışmamıza izin verirler.

Veritabanı Modelleri

Veritabanı programları günümüze gelene kadar veriler üzerinde çalışırken bir çok veri modellerini kullanmışlardır. Bunların en ünlüleri; Hiyerarşik, Ağ, İlişkisel ve Nesne Yönelimli veri modelleridir. İsterseniz bu veri modellerine kısaca bir göz atalım:

  • Hiyerarşik Veri Modeli: Bu modelde veriler ağaç yapısına benzer bir biçimde modellenir. En üste kök ve kökün dalları bulunur. Ayrıca her dalın alt dalı sayesinde dallanma ve çeşitlilik artar. Bu modelde her bir alt dalın sadece bir tane noktadan bağlanma şartı bu modelin en büyük kısıtlamalarından biridir. Hiyerarşik veri modeli 1960 ve 1970 yılları arasında popüler olan bir modeldi.
  • Ağ Veri Modeli: Ağ veri modeli 1970′li yıların başında geliştirilmiştir. Bir verinin doğası gereği birden çok veri ile ilişkisinin olmasından dolayı hızlıca kabul görmüştür. Bu modelde verilerin birrinie ağ şeklinde bağlandığı varsayılır.
  • İlişkisel Veri Modeli: Şu anda kullanılan veri tabanlarının çoğu ilişkisel veri modeline daha çok destek verirler. Bu modelde alakalı veriler tablolar içinde saklanır. Ayrıca tablolar arasında değişik türde ilişki kurulur. İlişkiler kurulurken birincil anahtar (Primary key) ve yabancı anahtarlar (Foreign Key) kullanılır. Anahtar alanlar sayesinde indeksleme (indexing) yapma olanığı sunan ilişkisel veri tabanlarında erişim ve işlemler daha hızlı yapılabilir.
  • Nesne Yönelimi Veri Modeli: Diğerlerinden daha sonra ortaya atılan ve karmaşık uygulamarda başarısını kanıtlamış nesne yönelimli programlamaya dayanan veri modelidir. Bu modelin öngörüsü giderek çözülmesi daha zor hale gelen programlama problemlerini çözen nesne yönelimli modelin veri modelleme de etkili olacağıdır.

İlişkisel Veritabanı Tasarımı Örneği

İlişkisel veri tabanı tasarımı ile verilerimizin duplikasyonunu (duplication) önleme şansımız vardır. Bu sayede veritabanımızı yönetmek daha kolay olduğu gibi verilerimizin saklama aygıtlarında kapladıkları alanlar da daha küçük olur. Dahası bu sayede veritabanı ile olan işlemerimiz de daha hızlı gerçekleşir ki veritabanı işlemleri genelde diğer işlemlere göre masraflı işlemler olarak bilinirler.

İlişkisel veritabanlarında verilerin tablolar içinde saklandıklarını öğrenmiştik. Tablolarda her bir satır bir kayıtı tutar. Bir kayıtta genelde birden fazla alan olur.

Şekil 1.’deki Telefon_Defteri tablosunda alalar: id, isim, soyisim, alan_kodu ve telf_no’dur. Aynı zamanda tabloda 5 tane kayıt olduğu görülmektedir.

İlişkisel veritabanı tasarımı üniversitelerde ayrı bir ders olarak okutulduğu gibi profesyonel kurslarda birlerce dolarlarla verilen bir eğitimdir. Biz burada hızlıca ilişkisel veri tasarımının nasıl yapılacağını canlı bir örnek üzerinde görerek olayın özünü öğreneceğiz.

Bir web uygulaması için anket modülü geliştireceğimizi varsayılm. Ankatemizde anket sorusunu, anketin seçeneklerini, ve hangi anketin hangi seçeceğine hangi kayıtlı kullanıcının cevap verdiğini tutmamız gerekiyor. Eğer tüm veritabanını tek bir tabloda toplarsak aşağıdaki gibi bir tablo oluştururduk.


Şekil 2′de yeralan tablo ile en basit veritabanı tasarım yapılmış ver veriler ile doldurulmuştur. Yalnız yukarıdaki tablo ilişkisel veri tasarımı kurallarına göre tasarlanmadığı ortadadır. Her kullanılan oy için anket_sorusu alanında bulunan veri tekrar tekrar veri tabanında depolanır. secenek_1, secenek_2, secenek_3, secenek_4 ve secenek_5, alanları da kendileri için kullanılan her bir oy için depolanıyor. Bu durumda veritabanımız kısa sürede şişek, gereksiz yere aynı verileri depolamak pek anlamdı olmaz. Bir de elimizdeki veritabanı tek bir tablodan oluşan küçük bir model! Peki biz daha karmaşık bir veritabanını bu biçimde depolarsak hem saklama alanı hem de işlem hızı konularında israf etmiş olmazmıyız?

Bu durumda çözüm tabiki ilişkisel veri tabanı modeline göre veri tabanımızı tasarlamamızdır. Bu tasarımda önemli noktalardan biri tabloları olabildiğince çok sayıda alttabloya bölmek olacaktır. Şekil 2′deki tabloya tekrar bir bakalım. Bu tabloda solda bulunan anket_soru alanı her kullanılan oy için tekrar ediyor. Bizim ise aslında sedece her anket için sadece bir tane anket_soru alanına ihitiyacamız var. Aynı şekilde seçenekler her oylandıklarında tekrar tekrar veritabanına yazılır. Yine bizim her seçenek için sadece birer tane seçenek alanına ihtiyacımız olduğu açıktır.

Sonuç olarak Şekil 2′deki tablomuzu üç farklı tabloya bölebiliriz. Bu tablolar aşağıda Şekil 3′de verilmiştir:

Şekil 3′te gördüğümüz gibi Anket tablosunda iki alan bulunmaktadır. Birincisi, anket_id, her anketin özel numarasını içerir. Bu numara her anket için farklıdır. Diğeri anket_soru alanıdır. Bu alanda ise anaketin sorusu yeralıyor.

İkinci tablomuz olan secenekler tablosunda en soldaki secenek_id alanı tamsayı değerlerini depolar. Bu sayılar her seçenek için farklıdır ve seçeneğe özeldir. Tıpki Anket tablomuzda yeralan anket_id alanı gibi. Ortadaki alan ise, secenek_metni, seçeneklerin içerikleridir. Burada dikkat edilmesi gereken noktalardan birisi secenekler tablosundaki anket_id alanıdır. Bu alan hangi seçeneğin hangi ankete ait olduğunu gösterrir.

Son tablomuz olan oylar tablosunda yine 3 tane alan vardır. Bunlardan ilki secenek_id alanı her kullanılan oyun hangi seçeneğin seçildiğidir. user_id, alanı ise kullanılan oyu hangi kullanıcının oyladığını göserir. Son olarak en sağdaki OyId alanının neden orda bulduğunu birazdan öğreneceğiz.
Dikkat ederseniz Anket ve secenekler tablolarının sol taraflarında bulunan artı (+) işaretleri vardır. Bunun sebebi tablolar arasında kurduğumuz ilişkilerdir.

Anket uygulaması için hazırladığımız veritabanımızın ilişkilerini MS Access içerisinde şu şekilde görünür:

Yukarıdaki şekil 4′te iki farklı ilişki kurlumuştur. Anket tablosunun anket_id alanı ile secenekler tablosunun anket_id arasındaki birinci ilişkimizdir. Diğeri secenekler tablosunun secenek_id alanı ile oylar tablosunun yine secenek_id alanları arasındadır. Genelde ilişkili olacak alanların isimleri aynı olur. Ama bu zorunda bir kural değildir. Alan isimlerinin aynı olması durumunda programlama ve veritabınını yönetmek daha kolay olur.

Trackback URI | Comments RSS

Yorum Yaz - Leave a Reply