Bölüm İlişkili Tablo

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 15

22

İlişkili Tablolar

Bu Bölümde
İlişkili Tablo Nedir? 418 Kitabımızın genişletilmiş 2.baskısında daha detaylı
Neler Öğrendik? 431 olarak yer vermeyi planladığımız ilk bölüm ilişkili
tablolardı.
Bu bölümde ilişkili tablo kavramını türleriyle beraber
daha detaylı bir şekilde somut örnekler üzerinden
oluşturduğumuz bir veritabanı ve tablolarla
kullanarak öğreneceğiz.
418 Bölüm 22 İlişkili Tablolar

İlişkili Tablo Nedir?


Kitabımıza bonus bölümler yazarken aklımda olan ilk başlık ilişkili tablolardı.
Çünkü ilişkili tabloların yeri veritabanı işlemleri içerisinde çok büyük bir alan
kaplamaktadır. İlişkili tablolar birbiriyle aynı yapıda olan tablo sütunlarının iş
yüklerini azaltmak, veri tekrarını önlemek, bellekte daha fazla boş alan bırak-
mak gibi işlemlerin yapılmasını sağlayan yapılardır.
3 Temel ilişki türü bulunmaktadır;
» Bire Bir İlişki
» Bire Çok İlişki
» Çoka Çok İlişki
Bire Bir İlişki
İlişki türlerimizi somut örnekler üzerinden anlatmaya çalışalım. Şehirlerarası
yolcu taşıma işlemi yapan bir otobüs firması düşünelim. Bu firmanın
herhangi bir seferini ele alalım. Bir seferde ortalama 45-50 civarında koltuk
bulunmaktadır. Her koltukta sadece bir yolcu oturabilir. Yani sefer işlemlerinde
koltuk numalarını ilişkide kullanacağımız bir alan olarak düşünürsek her bir
koltuk numarası sadece bir kez kullanılabilir.
Yani şöyle ki; 23 Haziran 2019 tarihinde 13:00 saatinde kalkacak olan Adana/
Bursa arası yolcu taşıyacak Yazılım Turizm firmasının seferinde 24 numaralı
koltuğa oturan kişi Baran Yücedağ isminde bir genç olsun. Bu koltuk sadece
bir kez satın alınabilir, bir başkası gelip bu koltuğu tekrar satın alamaz. Ve Baran
Yücedağ isimli genç bu seferde sadece bir tane koltuk satın alabilir zira aynı
Türkiye Cumhuriyeti (T.C) kimlik numarası ile bir yolculuk seferinde 2 farklı
koltuğa kaydolamaz. İşte bu olay bire bir ilişkidir.

Bire Çok İlişki


İlişkili tablo türlerimizin 2.’si bire çok ilişkidir. Bire çok ilişkide ise bir tablonun bir
başka tablo ile ilişkisi sırasında 2. tabloda birden fazla değer seçmeye olanak
sağlamasıdır. Hemen somut bir örnekle pekiştirelim. Öğrenciler ve kulüpler
isminde bir tablomuz olsun. Her bir öğrencinin bir kulüp seçeceği formatta
bir yapımız var. İlk bakışta bir önceki ilişki türü ile aynı gibi durabilir ama öyle
değil. Bu örneğimizde bire bir ilişki kullanırsak bir öğrenci yalnızca bir öğrenci
kulübüne kayıt olabilir şeklinde gerçekleşecekti. Ama bizim tablo yapımız bu
şekilde değildir. Bir öğrenci bir kulübe kaydolabilir aynı zamanda bir kulüpte
birden fazla öğrenci olabilir. Yani aşağıdaki gibi basit bir tablo üzerinden
anlatmaya çalışalım.
İlişkili Tablo Nedir? 419

Öğrenci NO Öğrenci Adı


1 Mehmet
2 Mahiye
3 Murat
4 Mesut
5 Zeynep
6 Didem
7 Buse
8 Ali

Bu tablomuzda Öğrenci numarasını ve Öğrenci Adını sırayla girdik. Şimdi Ku-


lüpler için tablomuzu oluşturalım.

Kulüp NO Kulüp Adı


1 BİLİŞİM
2 KİTAP
3 SATRANÇ

2. tablomuza kulüp numarası ve ad bilgilerini girerek tablolarımızı tanımlamış


olduk. Şimdi ilişki olmadan sadece örnek veri girişleri ile bire çok ilişki yapısını
bir tablo taslağı üzerinden anlatalım.

Öğrenci Kulüp
Mahiye Kitap
Mehmet Bilişim
Seda Kitap
Beyza Kitap
Mesut Bilişim
Ali Satranç

Öğrencilerimizin adlarını ve her bir öğrencimizin hangi kulübe ait olduğunu


tablolar üzerinden tanımladık. Burada dikkat edilmesi gerek durum şudur; her
bir öğrenci sadece bir kez tanımlanırken, bir kulüp birden fazla kez tablo içe-
risinde yer alabiliyor. Yani Kitap kulübü 3, bilişim kulübü 2 satranç kulübü ise
1 kez olmak üzere tablomuz içinde yer aldı. Bu örnek bire çok ilişki türümüzü
anlamaya yeterli olacaktır. :)
420 Bölüm 22 İlişkili Tablolar

Çoka Çok İlişki


İlişkili tablo türlerimizin 3.’sü çoka çok ilişkidir. Bu ilişki türünde bir tablomuzda
bulunan alan diğer tablodaki alanla ilişki kurulurken birden fazla kez yer alabilir
ancak bire çok ilişkiden farklı olmak üzere burada 2. tablodaki alanımızda da
değerler 1. tablonun içerisinde birden fazla kez yer alabilecektir. Sanırım bu
başlık için verilebilecek en iyi örnek öğrenciler ve ders seçimleri işlemidir.
Yeni öğrenim döneminde öğrenciler ders kayıtları yaparken kullandıkları
sistemden ders seçimleri yaparlar. Ders seçimlerinde bir öğrenci birden fazla
dersi seçebilir aynı zamanda bir ders birden fazla öğrenci tarafından seçilebilir.
Yani öğrenciler ve dersler birden fazla kez ilişkinin tutulacağı tablo içinde yer
alabilirler. Konumuza yine tablolar üzerinden devam edelim.

Öğrenci NO Öğrenci Adı


1 Mehmet
2 Mahiye
3 Murat
4 Mesut
5 Zeynep
6 Didem
7 Buse
8 Ali

Bu tablomuzda öğrenci numaraları ve öğrenci adlarını tanımladık. Şimdi ders


numaraları ve adlarını tanımlayalım.

Ders NO Ders Adı


1 Matematik
2 Türkçe
3 İngilizce
4 Biyoloji

2. tablomuza ders numarası ve ders adı bilgilerini girerek tablolarımızı tanım-


lamış olduk. Şimdi ilişki olmadan sadece örnek veri girişleri ile çoka çok ilişki
yapısını bir tablo taslağı üzerinden anlatalım.
İlişkili Tablo Nedir? 421

Öğrenci Ders
Mahiye Biyoloji
Mehmet Türkçe
Mehmet Biyoloji
Beyza Biyoloji
Didem Türkçe
Didem Biyoloji
Didem Matematik

Tablomuzun öğrenciler kısmında 7 tane öğrenci satırı bulunmaktadır ancak


farklı değer bazında bakacak olursak 4 farklı öğrenci (Mahiye, Mehmet, Beyza,
Didem) olduğunu hemen göreceğiz.
Bu tablomuzda Didem 3 farklı ders, Mehmet 2, Mahiye ve Beyza ise 1’er ders
almışlardır. Alınan derslere baktığımız zaman ise Biyoloji dersinin 4, Türkçe 2
ve matematik ders 1 kez alınmıştır. Böylece bu örnek üzerinde çoka çok ilişki
yapısının da anlaşıldığını düşünmekteyim.
Bu konuda daha detaylı bilgi için YouTube kanalımızda bulunan 60 Derste SQL
serisine veya İlişkili Tablolar başlıklı videolarımıza ücretsiz olarak erişim sağla-
yabilirsiniz. Bu bölümde anlatmamız gereken birkaç başlık daha var ancak bun-
ları burada açıklamak yerine ilgili örneklerimiz arasında sırası geldikçe kullanıp
açıklayalım. İlişkili tablolar içerisinde en çok kullanacağımız yapı muhtemelen
bire çok ilişki yapısı olacaktır. Biz de bir okulda bulunan öğrencilerin sınav not-
larının tutulduğu bir sistemi ilişkili tablolar üzerinden tasarlayarak önce sadece
SQL sonrasında ise C# kısmından kontrol edilecek formatta gerçekleştirelim. O
halde çayınızı, kahvenizi alın gelin yavaş yavaş projemize başlayalım.
Önce projemiz hakkında biraz detay verelim. Projemiz E-Okul gibi ya da üniver-
sitede öğrencilerin sınav notlarının tutulduğu not sistemi gibi, ilişkili tablo alt
yapısında oluşturulacak bir veritabanı sistemi olacaktır. Projemizdeki tabloları
sıralayacak olursak;
» Öğrenciler Tablosu,
» Dersler Tablosu,
» Kulüpler Tablosu,
» Notlar Tablosu, olmak üzere 4 temel tablomuz yer alacaktır.
Öğrenciler tablomuzda öğrencilerimizin ad, soyad, kulüp, numara ve şifre bilgi-
leri yer alacaktır. Şifre sütununu C# form kısmında sisteme giriş yaparken kulla-
nacağız. Dersler tablomuzda ders adı ve ID değeri, kulüpler tablosunda kulüp
422 Bölüm 22 İlişkili Tablolar

ID ve adı, notlar tablosunda ise öğrencilerin sınav notları ve ortalaması gibi


değerlerimiz bulunacaktır. İlk olarak yeni bir veri tabanı oluşturarak projemize
başlayalım.

Şekildeki 1. görseldeki gibi database alanımıza sağ tuşla tıklayıp yeni bir verita-
banı oluşturalım. Veritabanımızın ismi DBNotSistemi olsun.

Veritabanımızı oluşturduktan sonra şimdi geldik tablolarımızı oluşturmaya.


Tablo oluşturma işlemi için birden fazla yöntem bulunmaktadır. Biz en klasik
yöntemlerden biri olan tablolar üzerinde sağ tuşla tıklayarak oluşturma yönte-
mini kullanacağız.

Veritabanları oluştururken başında kullandığımız DB Data Base kelimelerinin


NOT baş harfleridir.

Tablolarımızı oluşturmaya başlayalım. İlk olarak öğrenci tablomuzu oluşturalım.


Resimdeki gibi tablomuz üzerinde sağ tuşla tıklayarak yeni bir tablo oluşturalım.
İlişkili Tablo Nedir? 423

Yukarıda görüldüğü gibi tablo sütunlarımızı oluşturduk. Öğrenci id alanımızı


int olarak belirledik. Her öğrencimizin bir id değeri olacak ve bu id değeri iliş-
kili alanlarda kullanılacağı için birincil anahtar seçilmesi ayrıca otomatik artan
olması gerekmektedir. Kitabımızın SQL ile ilgili bölümlerinde otomatik artan
işlemini görmüştük.
Burada karşımıza çıkan yeni kavram birincil anahtar kavramıdır. Kısaca açıklaya-
cak olursak; bir tabloda ilgili sütun değerini o sütuna ait veriler içerisinde ben-
zersiz kılmak için kullanılan yapıdır örneğin Türkiye’de yaşayan insanlara verilen
TC kimlik numarası gibi ya da okullarda öğrencilere verilen öğrenci numarası
gibi. Yani her bir tabloda sadece bir kez bulunan alanlardır. Mesela kulüpler tab-
lomuzu tanımlarken her bir kulüp ilgili tabloda yalnızca bir kez yer alacaktır. O
zaman kulüp id değerimiz bizim birincil anahtarımız olacaktır.
İlk önce öğrenci id alanımızı otomatik artan yapalım. Bunun için id alanımıza bir
kez tıklayıp sütun özellikleri yani column properties alana geliyoruz.

Daha sonra id identity alanını sağ tarafındaki kutucuktan yes olarak değişti-
riyoruz. Bu durum otomatik artan özelliğini etkin hale getirecektir. Sol tarafta
bulunan increament ve seed kelimelerini açıklayalım. increament kelimesi
miktar anlamına gelmektedir yani artış değeri kaçar kaçar olacak diye soruyor
bize SQL. Varsayılan değer olarak da 1’i atamış durumda.
424 Bölüm 22 İlişkili Tablolar

Böylece tablomuzda id değerleri birer birer artacaktır. Seed ise kök, tohum ma-
nasındadır buradaki ifadesinde ise başlangıç anlamı taşıyor. Yani id değeri kaç-
tan başlayacak ve kaçar kaçar artacak kalıbını önümüze sunmakta.
Id değerimizle ilgili son olarak bu sütunu birincil anahtar yapalım. Bunun için id
alanımız üzerinde sağ tuşla tıklayıp birincil anahtar alanını seçelim.

Böylece ID alanımız birincil anahtar olarak tanımlanmış oldu. Öğrenci ad ve so-


yad değerleri değişken uzunluklu olduğundan dolayı varchar türünde tanımla-
dık ve 20 karakterin yeterli olacağını düşündük. Daha uzun isim veya soy isim
girileceğini düşünüyorsanız bu aralığı arttırabilirsiniz. Tüm öğrencilerimiz için 4
karakterli bir numara belirleyeceğimiz için numara alanını sabit veri türü olan
char olarak tanımlayıp uzunluğunu 4 olarak belirledik.

NOT char sabit, varchar değişken uzunluklu veriler için kullanılan veri türüdür.

Şifrenin biraz daha kısa ama değişken uzunlukta olacağını varsayarak 10


karakter olarak belirledik. Son olarak gelelim kulüp alanımıza. Kulüplerimiz
için tablo oluşturacağımız zaman çok fazla kulüp değerimiz olmayacağını
varsayarak tinyint (0-255) türünde kullanmayı planladım. Her öğrenciye ait bir
kulüp değeri olacağından ancak bu kulüp değerlerini ad olarak değil id olarak
ilişkili formatta tutacağımız için öğrenci tablosunda da bu sütunumuzu tinyint
olarak tanımladık. Şimdi CTRL + S tuşlarına basarak tablomuzu kaydedelim.
İsmini TBLOGRENCILER verebiliriz.
İlişkili Tablo Nedir? 425

NOT char sabit, varchar değişken uzunluklu veriler için kullanılan veri türüdür.

Şimdi 2. tablomuz olan kulüpler tablomuzu oluşturalım. Tables alanı üzerinde


sağ tuşla tıklayarak yeni tablomuzu hazırlayalım.

Kulüp tablomuzda id ve kulüp adı olmak üzere yalnızca 2 tane alan bulunmak-
tadır. Kulüp sayımız çok fazla olmayacağı için tinyint veri türünü seçmemiz ye-
terli olacaktır. Kulüp adı için değişken uzunluktaki verileri tutan varchar türünü
tanımlayıp karakter sayısını 20 olarak belirledik. Şimdi tablomuzun id alanını
birincil anahtar yapıp ismini TBLKULUPLER olarak verelim.

Kulüpler tablomuzdan sonra dersler


ve notlar tablolarımızı oluşturalım.
Dersler tablomuzda da sadece der-
sin id değeri ve adı yer alacaktır.
426 Bölüm 22 İlişkili Tablolar

Tablomuzun ismini TBLDERSLER olarak yazıp son tablomuz olan notlara geçelim.

Son olarak notlar tablomuzu oluşturalım. Notlar tablomuz aşağıdaki gibi olacaktır.

Not id alanımız her bir öğrenci için ilgili ders üzerinden işlem yapmamızı
sağlayacak olan alanımızdır. Dersler tablomuzda ders id alanımızı tinyint türünde
tuttuğumuz için notlar tablomuzda ad bu alanı tinyint olarak tanımladık. Zira
ilişkilerde ilişkiye alınacak sütunların aynı veri türünde olması gerekmektedir.
Öğrenciler tablomuzda öğrenci id değerleri int olduğu için notlar tablomuzda
da int türünde tanımladık.
Sınav notlarımız 0-100 arasında tam sayı türünde olacağı için tinyint kullanımı
en uygun veri türü olacaktır. Öğrencilerin ortalaması küsuratlı olabileceği için
ondalıklı türde veri tutan decimal kullanımı bu alan için uygun olacaktır. Decimal
veri türünün kullanımı ile ilgili detaylı bilgiyi kitabımızın SQL kısmının veri türleri
alanında vermiştik. Durum veri türünde ise öğrencilerin ortalamalarına göre
ilgili dersi geçip geçemedikleri ile ilgili değerleri tutacağız. Eğer ortalamaları
İlişkili Tablo Nedir? 427

50 ve üzerinde ise durum alanı True ya da 1, 50’nin altında ise False ya da 0


olacaktır. tablomuzun adını TBLNOTLAR olarak yazıp kaydedelim.

Şimdi geldik ilişkiler kısmına. İlişki kurma işleminde de birden fazla yöntem bu-
lunmaktadır. Biz bunların ilki ve en basiti olan diyagram üzerinden ilişki kurma
yöntemini kullanacağız. Diyagramımızı oluşturmak için database diagrams üze-
rinde sağ tuşla tıklayarak yeni diyagram oluşturma seçeneğine tıklayalım.

Karşımıza diyagramımıza eklenmesini istediğimiz tabloların bulunduğu küçük


bir pencere açılacaktır. Bu pencere içerisinde bulunan tüm tablolarımızı seçip
diyagramımızın içerisine ekleyelim.

İlk olarak öğrencilerle kulüpleri ilişkilendireceğiz. Bunun için kulüpler tablosun-


da bulunan birincil anahtar değerimiz olan kulüp id alanını seçelim.
428 Bölüm 22 İlişkili Tablolar

Seçim işlemini yaptıktan sonra kulüp


id alanını tutup sürükleyerek öğrenci
tablomuzda bulunan kulüp sütunu-
nun üzerine bırakalım.

Sürükleme işlemini yaptıktan sonra yukarıdaki resimde görüldüğü gibi


tablomuzun ilişkisini oluşturmuş olacağız. Relationship Name olarak
adlandırılan kısım ilişkimizin ismidir. Buraya istediğiniz herhangi bir ismi
verebilirsiniz. Primary Key birinci anahtar anlamına geliyor bunu daha önce
açıklamıştık. Burada dikkatimizi çeken nokta Foreign Key yani yabancıl anahtar
kavramıdır. Foreign Key kavramı ilişkili tablolarda 2. tablomuzda kısıtlama
yapmak için kullanılan alandır. Yani somut bir örnek üzerinden anlatacak
olursak kulüpler tablomuzda 3 tane kulüp olduğunu düşünelim bunlar;
» Bilişim,
» Satranç,
» Kitap,
Öğrenciler tablosuna veri girişi yaptığımız zaman yeni bir öğrenci tanımlaması
sırasında kulüp değerine 1, 2 ya da 3 değerlerinden istediğimiz herhangi bir
değeri sorunsuz olarak tablomuza girebileceğiz ancak bu 3 değer dışında her-
hangi bir ID değeri girişi sağlanamayacaktır. İşte bu kısıtlama ilişkili tablomuzun
foreign key alanı üzerinden sağlanacaktır.
İlişkili Tablo Nedir? 429

2 tablomuz arasında ilişki işlemi yapıldıktan sonra yukarıdaki gibi bir görüntü
karşımıza çıkacaktır. Anahtar sembolü kulüpler, sonsuz sembolü ise öğrenciler
tablomuzun üzerinde bulunmaktadır. Bunun anlamı bu tabloda bire çok ilişki
bulunduğudur. Anahtar bir, sonsuz sembolü çok anlamındadır. Yani sözümüzü
toparlayacak olursak bu tablonun karşılığı bir kulüpte birden fazla öğrencide
bulunabilir yani bilişim kulübü sadece 1 öğrencide değil pek çok öğrencide ola-
bilecektir. Eğer bir kulüp sadece tek bir öğrencide olsaydı o zaman tablomuzun
ilişki belirtecinde sonsuz sembolü olmayacak her iki tarafta da sadece anahtar
sembolü bulunacaktı. Şimdi not-
lar tablomuz üzerindeki ilişkileri-
mizi kuralım. İlk olarak dersler ile
notlar tablomuzu ilişkilendirelim.
Bunun için ders id alanımızı seçip
notlar tablomuzda bulunan ders
alanının üzerine ekleyelim.

Dersler ile notlar tablomuz arasın-


da bire çok ilişki kurmuş olduk.

Son olarak öğrencilerle notlar


arasında bire çok ilişkimizi oluştu-
ralım. Bunun için öğrenciler tab-
lomuzda bulunan id alanı ile not-
lar tablomuzda bulunan öğrenci
alanlarımızı ilişkilendiriyoruz.

Böylece ilişkilerimizi tamamlamış ol-


duk. Şimdi Ctrl + S tuşlarına basarak
diyagramımızı kaydedelim. Diyagra-
mın ismi diagram_0 olarak kalabilir.
430 Bölüm 22 İlişkili Tablolar

Diyagramımızı oluşturduğumuza göre örnek veri girişleri yapabiliriz. Bunun için


ilk olarak kulüpler tablomuza birkaç tane örnek kulüp girişi yaparak başlayalım.
Kulüpler tablomuz üzerinde sağ tuşla tıkla-
yarak Edit Top 200 Rows alanını seçelim. Sol
alt tarafta gördüğünüz alanlar benim bilgisa-
yarımda bulunan diğer veri tabanlarıdır.

Bilişim, satranç, kitaplık ve temizlik


olmak üzere 4 tane kulüp adı girişi
yaptık. Siz dilerseniz daha fazla ku-
lüp adı yazabilirsiniz.

Şimdi birkaç tane ders girişi yapalım.

Örnek ders girişlerimizi yaptık. 5 nolu dersimiz olan Atatürk İlke İnkılap karak-
ter sayısı olarak aradaki boşluklarıyla beraber tam 20’dir. Dersin adını uzatmak
istersek tablomuzun tasarım kısmına gidip varchar(20) olarak tanımladığımız
alanın boyutunu arttırmamız gerekecektir.
Gelelim işin en önemli noktası olan ilişkili tablolar arasında veri girişi yapmaya.
Şimdi 3 tane öğrenci girelim ve bu öğrencilerin kulüp kısımlarına kulüp tablo-
muzda var olan id değerlerinden bir tanesini girerek veri girişlerini sağlayalım.
Neler Öğrendik? 431

Yukarıda gördüğümüz tablodaki gibi 3 tane öğrenci girişi yaptık. Ekin’e bilişim,
Burak’a satranç ve Baran’a kitaplık kulübünü atadık. Tablolarımızın ilgili sütun-
ları arasında ilişki olduğu için kulüp adları yerine sadece isimlerini yazdık. Şimdi
şöyle basitçe birkaç başlığı ele alalım. Biz burada ilişki kullanmasaydık ne ola-
caktı? Her tabloda kulüp adlarını yazmak durumunda kalacaktır. Ortalama bir
kulüp adının 6 karakter olduğunu varsayarsak 3 tane öğrenci için 18 karakterlik

yer ayrılması gerekecekti. Ama ilişki


kullanarak 18 karakterlik alan yerine
birer id değeri ile işimizi çok daha ko-
lay bir şekilde çözdük. Şimdi 2 öğren-
ci eklemesi daha yapalım.

2 öğrenci daha ekledik. Yeni öğrencilerimizin kulüplerini önceki 3 öğrencimizin


kaydolduğu kulüpler arasından seçtik. Yani buradan şu sonucu çıkarabiliyoruz.
Bir öğrenci kulübüne birden fazla öğrenci kaydolabiliyor. Eğer ki biz herhangi
bir öğrencinin kulübünü değiştirmek istersek kulüp sütununa gelip var olan
herhangi bir kulübü seçebiliriz. Var olan kulüp değerleri dışında bir id değeri
girersek aşağıdaki gibi hata ile karşılaşacağız.

Öykü adlı öğrencimize var olan


kulüpler dışında bir değer girmeye
çalıştığımız zaman resimdeki gibi

hata verecektir. Böylece bölümümüzün sonuna geldik. Bir sonraki bölümde iliş-
kili tablolar üzerinden sorgulama işlemlerini, birleştirmeleri ve prosedür kulla-
nımlarını detaylı olarak göreceğiz.

Neler Öğrendik?
Bu bölümde ilişkili tabloları, neden gerekli olduklarını, ilişkili tablo türlerinin neler
olduğunu, diyagramların ve modellemelerin oluşturulmasını, bire-bir, bire-çok
ve çoka-çok ilişki türlerinin hangi durumlarda kullanıldığını, ilişkili tablolarda
veri girişinin id değerlerine göre nasıl yapılacağını öğrenmiş olduk. Bir sonraki
bölümde ilişkili tablolarımızda birleştirme işleminin nasıl yapılacağını göreceğiz.

You might also like