SQL Veritabanı

Veritabanı İlişki Türleri

İlişkisel veritabanı tasarımı yapılırken tabloların öneminden bahsetmiştik. Tabloların arasındaki ilişkiler en az tablo oluşturmak kadar önemlidir. Peki tablolar arasında kurduğumuz bu ilişkilere nasıl karar veriyoruz, ve bu ilişkileri nasıl oluşturuyoruz? Üç adet ilişki tipi bulunmaktadır; 1’e 1, 1’den çoğa(1-n) ve çoktan çoğa(n-m). Tasarımı yaparken bunlardan hangisini kullanacağımızı iyi belirlememiz gerekiyor. Şimdi bu ilişki türlerini tek tek inceleyelim.

1’e 1 ilişki
Örnek üzerinden konuyu anlatmaya çalışalım. Mesela bir bilet otomasyonu olsun. Bir tiyatro için bilet satılıyor ve her bileti yani koltuğu yalnızca bir kişi satın alabiliyor. Elimizde iki tane tablo bulunsun bunlardan biri müşteri tablosu ikincisi ise bilet tablosu. Bu iki tablo arasındaki ilişki birebir olur. Çünkü her müşteri yalnızca bir bilet satın alabiliyor ve her bilet yalnızca bir kişiye ait olabiliyor. Peki ilişkiyi kurarken hangi tabloya ekleme yapacağız? Müşteri tablosu mu Bilet tablosu mu? Bu durumu şu açıdan bakmamız gerekiyor. Eğer bilet tablosuna müşteri id’sini eklersem bu durum da satılmayan biletler için bu bölüm null değerini alacaktır. Ancak bu bizim istediğimiz bir durum değil. Onun yerine müşteri tablosuna bilet id’sini eklersek her eklenen müşteri bir bilet satın almış olacağı için herhangi bir null değeri söz konusu değildir. Bu durumda örnek tablomuz aşağıdaki gibidir:

table1
1’e Çoğa (1-n) İlişki 
En fazla rastalanan ilişki türüdür. Bir dershanede öğrenciler ve bu öğrencilere danışmanlık yapan öğretmenleri tutan iki adet tablomuz olsun. Bu iki tablo arasında kurulan ilişki 1’e n ilişki olur. Çünkü bir öğretmen birden fazla öğrenciye danışman olabiliyor ancak bir öğrenci en fazla bir öğretmenden danışmanlık alabiliyor. Peki hangi tabloya ekleme yaparak ilişkiyi kuracağız? Öğretmen tablosunu ele alalım. Eğer bu tabloya öğrenci id’lerini eklemeye başlarsak her öğrenci için o öğretmen tablosuna tekrar tekrar aynı öğretmenin verisini girmiş olacağız. Veri tekrarı en son isteyeceğimiz olaydır. Bu yüzden öğretmen id’lerini öğrenci tablosunda tutmak daha sağlıklı olacaktır. Şimdi doğru ve yanlış tablolara bakalım:

 

1.Tablo Yanlış: Veri Tekrarı Var 2.Tablo Doğru: Veri Tekrarı Yok
 Adsız-4
Adsız-51

 

Çoktan Çoğa (n-m) İlişki
Son ilişki türümüz en karmaşık olan çoktan çoğa ilişki türü. Bu ilişki türünde iki tabloda birden fazla bağa sahiptir. Bu yüzden iki tablo bu ilişkiyi açıklamak için yeterli olmaz. Yine bir ilişki türü örneği ile konuya giriş yapalım. Bir üniversitede ders seçimi yapan öğrenciler ile seçilen derslerin kayıtlarının tutulduğunu düşünelim. Bu durumda elimizde iki adet tablo bulunmaktadır:Öğrenci ve dersler. Bir öğrenci birden fazla ders seçebilirken, bir derste birden fazla öğrenci tarafından seçilebilmektedir. Bu durumda aralarında çoktan çoğa bir ilişki oluşmaktadır. Bu durumu tablolaştırırken bir üçüncü tabloya daha ihtiyacımız olmaktadır. Üçüncü tablo seçim tablosu olacak ve burada ders ile öğrencinin id’leri tutulacaktır. Aşağıdaki tabloda bu ilişkiyi görelim:
table2
Bu yazımda ilişki türlerini anlatmaya çalıştım. Bundan sonraki yazılarda artık SQL Server‘ı kullancağız. Bu yüzden bir sonraki yazımda SQL Server kurulumunu anlatacağım. Şimdilik görüşmek üzere 🙂
İstanbul’un amatör seyyahı. Kod yazmak hayat felsefesi. Android, Java, C# ve Javascript’le yakından, tüm teknoloji dünyasıyla uzaktan ilgileniyor. Drone meraklısı ama sahibi değil.
  • ali yüceer

    sitenin 10 numara tasarım olmuş çok begendim belirtmeden geçmiyeyim dedim , konu açıklamaları içinde teşekkürler

    • sdsad

      wp teması bu

  • Seref

    Oldukça açıklayıcı olmuş. Gerçekten çok teşekkürler!

  • ahmet

    1.örnek 1’e çok örneği değil mi
    1.Tablo:(musteri_no[PK], ad, soyad, adres)
    2.Tablo:(musteri_no[PK], biletNo, fiyat)
    şeklinde birincil anahtarlar ile yapılan ilişki türü 11 değil mi?

  • Gökhan Çevik

    Hocam bu konuyu en iyi anlatan makale diyebilirim, çok teşekkür ederim yalnız iki sorum olacak.
    1-)En son örnekdeki Id, OgrenciId, DersId kolonları olan tabladaki Id kolonu primary key ve artanmı ?
    2-) Bunlara ek olarak derslerin vize ve final notlarını tutacak bir tablo oluştursam ve ortadaki kolonun idsi ile birebir ilişkilendirsem..
    Id(primary key ve artan)
    vize(nullable)
    final(nullable)
    normalization kurallarına uygun olur mu ?