Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Ahmet Faruk Nacaroğlu
Ahmet Faruk Nacaroğlu
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
40 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  ADO.NET/SQL Ahmet Faruk Nacaroğlu
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : ADO.NET/SQL
Yayınlanma Tarihi : 17.3.2003
Okunma Sayısı : 39093
Yorum Sayısı : 1     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 27.12.2024
Turhal Temizer
Mac OS/X Removing CUDA 27.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 27.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 27.12.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
ADO.NET için İlişkisel Veritabanı Tasarımı
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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
  • Yazılan Yorumlar
  • Yorum Yaz
MAY
29
2007
Çok teşekkürler.. başarılar dilerim.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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