Müdavim Girişi

E-Posta
Parola

Ücretsiz Kayıt Ol


Online Müdavimler (0 Kişi)
  • Online Kişi Bulunmadı

Yazar Hakkında
x
İsmail Kocacan
İsmail Kocacan is experienced on many development platforms and continues to learn technologies. Since the age of 16-17, dealing with software technologies. And continuous learning, teaching, research, continues to develop.
Kitapçı VeriTabanı Tasarımı

Merhaba Saygi Deger yazilimci arkadaslar;

 
Saygi deger diyorum çünkü yazilimcilar benim için saygiya gerçekten degerdir. Heleki gerçek yazilimcilar olsun. Onlara saygim da sevgimde daha büyüktür.
 
Bu makalede sizlere bir veritabani tasarimi hakkinda bugüne kadar edindigim bilgi ve tecrübelerimden bahsetmek istedim. Nitekim önemli bir konu. Iyi bir veritabani hazirlamak için ince eleyip sik dokumak gerekir. Mantik tüm veritabanlarinda geçerlidir. Popüler olan tüm veritabanlarini az buçuk kurcalamis, içine dalmis çikmis birisi olarak genellikle Microsoft SQL Server üzerine bi ugrasim var. Bu makalede de SQL sunucu üzerinde bir veritabani olusturup tablolari tasarliycaz.
 
VeriTabani tasarimi hikâyesi, aslinda sudur;
Günlük yasamdaki verilerin iliskisel ortamda modellenmesidir. Bu modellemeyi yaparken bazi çok önemli noktalar vardir. Bunlar tablolarda tutulacak olan verilerin veritiplerinin uygun olarak verilmesi ve veri tekrarini önlemek(ki en önemlisidir), veri tutarligi gibi konulardir. Veri bütünlügünün olmasi içinde tablolarin düzgün tasarlanmasi, iliskisiz verilerin tablolarda tutulmamasidir.
 
Benim bu makalede sizlere anlatacagim kisim tablolari nasil tasarlarlamiz ve nasil iliskilendirmemiz gerektigidir. Tablolari iliskilendirirken birden fazla iliski sekli vardir.
Hepsininde kurallari var ama size burda en çok kullanilani anlaticam. Oda Bire-Çok iliskidir.
Öncelikle surda anlasalim.

 

Tabloda her satir bir kayit diye ifade edilir. Satirin kolonlari(hücreleri) de o kayda ait birer özelliktir. Asagida KITAPLAR tablosunun kayitlarinin özellikleri yer almaktir.

Bire-çok iliskide sudur. En az iki tabloyu iliskilendirdiginizde bir tablodaki kayda ait diger bir tabloda o kayda ait birden fazla kaydin olabilecegi durumudur. Yani bir tablodaki bir kayida diger iliskili oldugu bir tabloda çok fazla kaydin karsilik gelmesidir.
Simdi asagida gördügünüz sema benim test için tasarligim bir veritabaninin tablolaridir.

Gördügünüz gibi YAZARLAR, TURLER, YAYINEVLERI, KITAPLAR diye 4 tane tablo var.
Yukaridaki tasarimi inceledigimizde su sonucu çikartiriz;
Yazarlar Tablosu ile Kitaplar Tablosu arasinda bire çok iliski vardir.
Türler Tablosu ile Kitaplar Tablosu arasinda bire çok iliski vardir.
YayinEvleri tablosu ile Kitaplar Tablosu arasinda bire çok iliski vardir.
 
Bire-Çok ibaresini söyle açiklayalim;
Yazarlar, Türler, YayinEvleri Tablolarinda girilecek olan kayitlar benzersiz olmalidir. Mesela Türler Tablosunda TURAD ve TANIM hücreleri bulunmakta. Bu tabloya kayit eklerken. TURAD ve TANIM verileri ayni olan iki satir olmamalidir.


Su an bu kayitlar RID kolonu ile birer farkli kayit gibi gözüklerde veriler yanlis girilmistir. Yine Yazarlar tablosunu ele alalip inceleyelim. AD, SOYAD ve HAKKINDA özellikleri(kolonlari) var. Bu kolonlara girilecek olan verilerde ayni olmamalidir. Ayni sekilde YayinEvleri tablosu içinde geçerlidir.
 
 
Bire-Çok ibaresini daha önce anlatirken söyle demistik. Bir Kayda, çok kaydin karsilik gelmesidir. Simdi bunu yukaridaki sema üzerinden açiklamaya çalisalim.
Bire-Çok ibaresinin Bir kismina düsen tablolar Yazarlar, Türler, Yayin Evleri tablolaridir.
Çok kismina düsen tablo ise Kitaplar Tablosudur.
 
Bu su anlama geliyor. Bir yazara ait birden fazla kitap olabilir. Yani bir yazar, bir veya birden fazla kitap yazmis olabilir. Yine bir Türde birden fazla kitap olabilir. Yani O türde çok fazla yazar kitap yazmis olabilir. Mesela roman türünü düsünün. Bir sürü yazarin bir sürü roman türünde Kitabi var. Ama su olamaz bir Kitap, ayni anda hem Roman hem hikâye olabilirmi? Tabikide olamaz. Olsada onun ne oldugu belli olmaz. Veya bir kitabin birden fazla yazari olabilirmi? Tabikide olamaz.(Bazi istisnalar hariç).Veya kitaplarin üzerinde yazan yayin evi bilgilerine baktiginizda sunu görüyormusunuz hiç, Iki tane yayin evi adi, adresi yazan? Yazmaz. Ama su olabilir bir yayin evinden çikmis bir sürü kitap görebilirsiniz. Iste biz tablolarin iliski türlerini belirlerken bire-çok, çoga–bir, bire-bir, Çoga-Çokmu olacagina bu gibi kriterleri düsünüp tasarlamaliyiz.
 
 
Simdi ise veritabaninin tablolarini ilk olarak dogru olarak tasarlayip, daha sonra ise yanlis olarak tasarlayip düzelticez
Dogru Tasarim

 
Yanlis Tasarim

 
Temizlik Vakti – Neden Yanlis Tasarim
Yukaridaki yanlis tablo tasarimini baktigimizda YKITAPLAR tablosuna ait alanlari görüyoruz. Farkindaysaniz alakasiz kolonlar var. Hâlbuki bizim amacimiz Kitaplar Tablosunda Kitaplarin özellikerine ait verileri tutmak. Örnegin bir kitabin SOYAD ‘inin oldugunu hiç gördünüzmü? Tabikide hayir. O zaman AD, SOYAD ve HAKKINDA gibi özellikler bu tabloya ait degil. Peki ya Kime ait? Bu özellikleri Senaryo geregi bir yazara ait olabilir. Ozaman hemen sunu yapiyoruz. Elegi sallayip gereksiz özellikleri(alanlari), Kitaba ait olmayan özellikleri bu tablodan kaldiriyoruz. Iyi güzel kaldirdikta haci abi ben kitabi kim yazmis? Yazarin adi ne, soyadi ne? Bu yazar nasil yazar olmus. Kitabin Yazari hakkinda bilgileri de saklamak istiyorum. Nasi yapicaz peki?
 
 
Bende size derimki kardesim alakasiz alanlari kaldir dediysek. Kitaplar Tablosundan kaldir dedik. Ozaman git Kitapla alakasi olmayan o alanlari(özellikleri) alakali yere koy derim. Yani YAZARLAR Tablosuna koyucaz O alanlari. Peki, yazarlar tablosunu nasil tasarlamamiz gerekir. Öncelikle Kitapla alakasi olmayan kolonlari(AD, SOYAD, HAKKINDA) bunlari YAZARLAR tablosu yapip onun içersine olusturuyoruz. Ve birde her yazar kaydini birbirinden ayirmak için RID isminde otomatik sayi tipinde bir kolon ekliyoruz. Otomatik sayi tipinde kolon ekledigimizde her satir için ardisik bir sayisal deger verilecek. O degerde Tekil olacaktir. Genelde yazilimcilar ID isminde kolon adi verirler.
ID Identity(Kimlik) kelimesinin kisaltmasidir. Bende Genelde RID olarak kullanirim J
 
Her yazara ait bir Tekil RID(Kimlik) degeri var. Artik benim için Hasan, Hüseyin isminde bir yazar yok! Onun kimlik numarasi var. Yani yok derken Yazar kaydi var ama ben diyorum ki; beni Senin adin soyadin irgalamaz yazar kardes. Ben senin RID(kimlik) bilgine bakarim, Sen benim için numaradan ibaretsin derim.Nitekim bir hocamizin siz benim için Listede sadece bir numaradan ibaretsiniz. Kim oldugunuz umrumda degil dedigi gibi.
 
 
Farkindaysaniz yukarida YKITAPLAR tablosunda sadece YAZARLA ilgili özellikleri kaldirdim. Lakin hala YKITAPLAR tablosunda Kitaba ait olmayan özellikler var. Bunlar neler? Örnegin yayin evine ait bilgiler(YAYINEVI, TEL, ADRES, MAIL) var. Yine kitapla
alakasi olmayan bu alanlarida çikarip YAYINEVLERI tablosuna eklememiz lazim. Ekledikten sonra her yayin evi kaydini birbirinden ayiran bir otomatik sayi tipinde tekil deger içeren ve yayin evi kayitlarini birbirinden ayirmamizi saglayacak. Bir Kimlik(RID) kolonu ekliyoruz. Artik yayin evinin adiymis adresiymis bunlar bizi ilgilendirmiyor. Biz eger YAYINEVLERI tablosu üzerinde bir islem yapacaksak yayin evinin Kimlik kolonu kullanicaz. Bu islemi Kitap özelligi olmayan Tür bilgileri(TURAD, TANIM) içinde uyguluyoruz. Yukarida anlatilanlar gibi TURLER tablosunu tasarliyoruz. Yine kimlik numarasini vermeyi unutmuyoruz.
 
Iliskilendirme!
Yukarida anlattiklarimi uyguladiktan sonra tablolarin son durumu su sekilde olur.
TURLER 
RID
TURAD
TANIM
1
ROMAN
2
HIKÂYE
 
YAZARLAR
RID
AD
SOYAD
HAKKINDA
1
ISMAIL
KOCACAN
-
2
YÜCEL
YÖRÜK
-
 
YAYINEVLERI
RID
YAYINEVI
TEL
ADRES
MAIL
1
X
-----
-----
-----
2
Y
-----
-----
-----
 
KITAPLAR
RID
KITAPAD
ISBN
SADET
BASIMTARIHI
KAYITTARIHI
BIRIMFIYATI
1
KASAGI
---
1
01.05.2010
01.05.2010
15
2
DELPHI
---
1
01.05.2010
01.05.2010
60
 
Tablolarin son halini inceledigimizde Tasarimlar düzgün, alakasiz özellikler yok. Iyi güzel alakasiz özellikler yokda bu seferde tablolar ayrildi. Veriler dagildi. Simdi bu birbiri ile alakasiz tablolari iliskiye sokarak birbirleri ile cebellestirecegiz.
 
Biz verileri bu tablolari kaydettikten sonra en temel olarak su sorularin cevabini veritabanindan alabilmeyiz.
 
Kitapla ilgili sorular;
Kitabin Yazari kim?
Kitabin Türü nedir?
Kitap Hangi YayinEvine Ait?
 
Yazarla ilgili sorular;
Yazara ait kitaplar hangileri?
 
Türler ile ilgi sorular;
Örnegin Roman Türündeki Kitaplar neler? Hikâye türündeki kitaplar nelerdir?
 
Yayin evi ile ilgili sorular;
Yayin evinden çikan kitaplar hangileri? Mesela X Yayin evinden çikan kitaplar hangileri gibi?
 
Tüm bu sorularin cevabini alabilmek için Kitaplar tablosunu düzenleyerek ekstra kolonlar ekliyoruz. Bunlar YAZARRID, TURRID, YAYINEVIRID kolonlaridir. Kolon isimlendirmesini istediginiz gibi yapabilirsiniz. Bu kolonlar sayesinde diger tablolarla iliski kuracagiz. Simdi bu kolonlarida ekledikten sonra son hali. Asagidaki gibi olacaktir

Burda dikkat etmemiz gereken bir kural var. Kitaplar Tablosundaki YAZARRID, TURRID, YAYINEVIRID alanlarinin tipleri iliski kuruldugu tablonun kimlik alanin veri tipi ile ayni olmalidir. Yani Birincil anahtar kolonu ile Yabanci anahtar kolonun veritipleri ayni olmalidir
 
Yukaridaki tablolara baktiginizda RID gördügünüz her kolon birer kimlik alanidir. Ve birincil anahtardir. Kitaplar Tablosunda ise YAZARRID, TURRID, YAYINEVIRID kolonlarida birer yabanci anahtardir. Bizde bire-çok kayit durumlarinda iliskiyi Birincil anahtar kolonu ile Yabanci anahtar kolonu arasinda kurariz.
Örnegin ;
Yazarlar ile Kitaplar Tablosu arasinda bire-çok iliski vardir.
Yazarlar Tablosundaki RID kolonu Birincil anahtardir. Kitaplar tablosundaki Yabanci anahtar olan YAZARRID kolonu ile iliskilenmistir. Ve veri tipleride aynidir. Her ikisinde veri tipi tamsayidir(int).
 
Turler ile Kitaplar Tablosu arasinda bire-çok iliski vardir.
Turler Tablosundaki RID kolonu Birincil anahtardir. Kitaplar tablosundaki Yabanci anahtar olan TURRID kolonu ile iliskilenmistir. Ve veri tipleride aynidir. Her ikisinde veri tipi tamsayidir(int).
 
YayinEvleri ile Kitaplar Tablosu arasinda bire-çok iliski vardir.
YayinEvleri Tablosundaki RID kolonu Birincil anahtardir. Kitaplar tablosundaki Yabanci anahtar olan YAYINEVIRID kolonu ile iliskilenmistir. Ve veri tipleride aynidir. Her ikisinde veri tipi tamsayidir(int).
 
Artik düzgün bir veritabani tasarimi yaptik sayilir. Kitaplar tablosuna kayit girerken yabanci anahtar kolonlarina iliskili olduklari tablolarin Birincil anahtar kolonundaki degeri(Kimlik) girmeliyiz.
 
Bir sonraki makaledede bu tablolara nasil kayit eklememiz gerektigi ve bu ekledigimiz kayitlara en temel sorulabilecek iliskisel sorgulari anlaticam.
Bu konuda çok fazla teknik bilgi kullanilara anlatilabilir. Ben burda Günlük yasamdaki bir somut Kitapçi veritabani senaryosu uydurdum kafamdan, daha sonrada bu somut verileri nasil soyutlastirabiliriz bunu anlattim.
 
Çünkü laf olsun torba dolsun diye yazmiyorum. Faydali olsun diye yaziyorum. En basindada dedigim gibi veritabani, veritabani tasarimi önemli bir kavram. Eger ki veritabanini yanlis tasarlarsak. Bu veritabanina veri isleyecek, uygulamalari gelistirirken de zorluklar çekecegimiz garantidir. Yukarida anlattigim tasarimlarda bile hala eksikler var. Yani eksikler hep olacak, biz de en az eksik için ugrasicaz J
Umarim Faydali olmustur.
 
VeriTabani ve VeriTabani SQL Scriptini Buradan indirebilirsiniz
ismailkocacan@gmail.com
Ismail Kocacan(Yazilimci Bozuntusu)

Kategori : VeriTabanı Tasarımı | 06.11.2010 14:27:00  | 3200 defa okundu  | 0 Yorum |

Yazara Ait Diğer Makaleler(51) Makaleye Yapılan Yorumlar İlk yorum yazan siz olun
Ara
 
Anket
Hangi VeriTabanı Yönetim Sistemini Kullanıyorsunuz ?