|
ADO.NET için İlişkisel Veritabanı Tasarımı |
|
Gönderiliyor lütfen bekleyin... |
|
|
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.
Bir sonraki yazımızda
SQL sorgulama dilini detaylı olarak inceleyeceğiz. Herkese iyi çalışmalar..
Makale:
ADO.NET için İlişkisel Veritabanı Tasarımı ADO.NET ve SQL Ahmet Faruk Nacaroğlu
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|