Öncelikle Part1 deki şu cümleyi hatirlayalim ve o cümle üzerinden devam edelim ;

"..... peki teorinin ilk adiminda dediğimiz fimler tablosunda ki her kolonun, bir film için tek olmasının dışında bişey olunca ne olacak ? o zaman anlıycaz ki yeni bir tablo yapmamız gerekiyor !!! " mesela filmler tablosunun içinde kitaplar diye bir kolon yapamazdık çünkü bir filme ait yazılmış birden fazla kitap olabilir.o zaman hemen Kitaplara ait bir tablo yapıyoruz ve bu tabloyu fimler  tablosu ile ilişkilendiriyoruz.Böylece kitaplar tablosuna bir kayıt giriceğimizde o kitabın hangi filme ait oldugunu belirtmek için filmin id sini kullanıcaz.Filmli kitaplar listesine girilecek olan filmID mutlaka Filmler tablosunda bulunmak zorunda.mesela filmler tablosunda 42 id değerli bir film yoksa ve biz filmi kitaplar tablosunda 42 id li filmin kitabı şudur diye bir kayıt girmeye çalıştıgımızda sql server buna izin vermiycek ! işte bunuda foreing key kisitlamasi diyoruz.ve aynı zamanda bu bire çok ilişkide oluyor.yani filmler tablosunda filmID bir tanedir,ama filmler tablosundaki filmID kitaplar tablosunda istediği kadar bulunabilir.örn : 1 nolu filmin kitabı x , 1 nolu filmin kitabı y diye 2 kayıt girebiliriz.

Şimdi gelelim tasarımda ki en ince düşünülmesi gereken detaya.yani çoka çok ilişkiye.diagramdaki "filmler / filmOyunculari / Oyuncular" tablolarına bakın ;

 

 

Diyelim ki filmde oynayan oyuncularin kaydini tutmak istiyorum,ilk önce farkediyorum ki ; bir filmden birden fazla oyuncu olabilir , o zaman oyuncular için farklı bir tablo yapıcağım kesin.

Ama burda şöle bir ayrıntı var ki , burda bire çok ilişki yok.yani bir filmde birden fazla oyuncu oynayabilir, aynı zamanda bir oyuncuda birden fazla filmde oynamış olabilir bu yüzden

oyuncular tablosunun içinde filmID yi tutamıyorum tutsaydım şöyle birşey olacakti;

//OYUNCULAR //

OyuncuID

Ad

Soyad

Ülke

FilmID

1 Brad Pitt USA 1   => oynadığı film Fight Club diyelim

2 Edward norton USA 1   => oynadiği Film Fight Club diyelim

2 Edward norton USA 2 => buda oynadığı başka bir film olsun

böyle bir kullanımda oyuncuID kolonu primary key olamıyor ve böylelikle oyuncuID kolonunu başka bir tabloya foreign key olarakta yollayamıyorum.ana tabloya bakarsanız ayrıca birde oyuncu ödülleri tablom var ve benim bu tabloda oyuncuID değerlerine primary olarak ihtiyacım olacak.o zaman başka bir yol bulmam lazım hem oyuncularin bilgilerini primary key olarak tutucam hemde hangi oyuncularin hangi filmde oldugunu tutucam... Bunun için bir ara tablo yapmam gerekiyor.bu ara toblonunda ismi genellikle iki tablonun isminide içerir  yani FilmOyunculari tablomuz için güzel bir isim.artik kayitlarimizi şöyle tutucaz.

oyuncular tablosu ;

1 brad pitt USA

2 edward norton USA

Film oyunculari tablosu

1 nolu film 1 nolu oyuncu

1 nolu film 2 nolu oyuncu

2 nolu film 2 nolu oyuncu

Farkettiyseniz FilmOyunculari tablomda FilmID de OyuncuID değeri primary key.bu kullanım 2 kolonun aynı anda  primary key oluşturdukları anlamına geliyor yani tek tek kayitlar tekrar edebilir ama aynı 2 değer yan yana 2 kere gelemez.yani ;

1 nolu film 1 nolu oyuncu

ve gene

1 nolu film 1 nolu oyuncu, yazamayız.yazarsak ayni değeri 2 kere girmiş oluruz ve sql server bize hata verir.

Verdiğim bakış açısıyla diğer oluşturdugum tablolarıda incelemenizi öneririm.Umarim faydali olmuştur.