İlişkisel veri tabanı tasarımında 3 çeşit ilişki vardır. İlişki
türlerine kısaca değinmek gerekirse aşağıdaki gibidir. Bu ilişki türlerini
bilerek Türkçeye çevirmedim. Çoğu yerde İngilizceleri ile karşılaşıyor oluyoruz
çünkü.
- One-to-One
- One-to-Many (or Many-to-One)
- Many-to-Many
One-to-One
Tablo A'daki bir satır, Tablo B'de yalnızca bir eşleşen
satıra sahip olabilir ve bunun tersi de geçerlidir.
Tablo B'de depolanan veriler tablo A'da kolayca
depolanabildiğinden, bu ortak bir ilişki türü değildir. Ancak, bu ilişki türünü
kullanmanın bazı geçerli nedenleri vardır. Bire bir ilişki güvenlik amacıyla,
büyük bir tabloyu bölmek ve başka çeşitli özel amaçlar için kullanılabilir.
Yukarıdaki örnekte, aynı şekilde bir HourlyRate alanını
doğrudan Çalışan tablosuna koyabiliriz ve Ödeme tablosuyla uğraşmazdık. Ancak,
saatlik ücret yalnızca belirli veri tabanı kullanıcılarının görmesi gereken
hassas veriler olabilir. Bu nedenle, saatlik ücreti ayrı bir tabloya
yerleştirerek, Ödeme tablosunun çevresinde ekstra güvenlik sağlayabiliriz,
böylece yalnızca belirli kullanıcıların bu tablodaki verilere erişmesini
sağlayabiliriz.
One-to-Many
Bu en yaygın ilişki türüdür. Bu tür bir ilişkide, Tablo
A'daki bir satır Tablo B'deki birçok eşleşen satıra sahip olabilir, ancak Tablo
B'deki bir satır Tablo A'daki yalnızca bir eşleşen satıra sahip olabilir
Bire-çok ilişkiler, hangi şekilde baktığınıza bağlı olarak
Bire-bir ilişki olarak da görüntülenebilir.
Yukarıdaki örnekte, Müşteri tablosu “birçok” ve Şehir
tablosu “bir” dir. Her müşteriye yalnızca bir şehir atanabilir. Bir şehir
birçok müşteriye atanabilir.
Many-to-Many
Çoktan çoğa ilişkide, tablo A'daki bir satır tablo B'deki
birçok eşleşen satıra sahip olabilir ve bunun tersi de geçerlidir.
Çoktan çoğa bir ilişki, bir ara tabloyla birbirine bağlanmış
ikiden çokya ilişki olarak düşünülebilir.
Aracı tabloya genellikle “bağlantı tablosu” (“çapraz
referans tablosu”) da denir. Bu tablo diğer iki tabloyu birbirine bağlamak için
kullanılır. Bunu, diğer iki tablonun her birinin birincil anahtarına başvuran
iki alana sahip olarak yapar.
Aşağıdakiler çoktan çoğa bir ilişkiye örnektir:
İlişkiler sekmesinde çoktan çoğa ilişkinin ekran görüntüsü.
Bu, bir ilişki Microsoft Access oluşturduğunuzda
görüntülenen İlişkiler sekmesidir. Bu durumda, çoktan çoğa bir ilişki henüz
yaratıldı. Siparişler tablosu, Müşteriler tablosuna Ürünler tablosuyla çapraz
referans veren bir bağlantı tablosudur.
Böylece, Müşteriler masası ile Ürünler masası arasında
çoktan çoğa bir ilişki oluşturmak için, Siparişler adında yeni bir masa
yarattık.
Siparişler tablosunda, Müşteri Kimliği ve diğer adı Ürün
Kimliği olan bir alan var. Bu alanların içerdiği değerler başvurulan tablodaki
ilgili alandaki değere karşılık gelmelidir. Bu yüzden Orders.CustomerId'deki
verilen herhangi bir değer de Customer.CustomerId alanında bulunmalıdır. Öyle
olmadıysa, gerçekte var olmayan müşteriler için emir alabilirdik. Var olmayan
ürünler için de emir alabilirdik. İyi bir referans bütünlüğü değil.
Çoğu veri tabanı sistemi, veri tabanının referans
bütünlüğünü zorlayıp uygulamamasını belirlemenizi sağlar. Bu nedenle, bir
kullanıcı (veya bir işlem) birincil anahtar alanında bulunmayan bir yabancı
anahtar değeri eklemeye çalıştığında, bir hata ortaya çıkar.
Örneğimizde Orders.CustomerId alanı Müşteriler için yabancı
bir anahtardır (CustomerId (bu tablonun birincil anahtarı). Ve Orders.ProductId
alanı Products.ProductId alanına (bu tablonun birincil anahtarı olan) yabancı
bir anahtardı