Veritabanında İlişki Nedir?
İlişkisel veritabanı tasarımında, ilişki, ilgili verileri içerdikleri için iki veya daha fazla tablonun birbirine bağlanmasıdır. Bu, kullanıcıların birden çok tabloda ilgili veriler için sorgular çalıştırmasını sağlar. İlişkiler, ilişkisel veritabanı tasarımında önemli bir unsurdur.
Örnek olarak, Şehir tablosu ile Müşteri tablosu arasında bir ilişkisi vardır. Her müşteriye bir şehir atanır.
Şehir adının tamamını Müşteri tablosuna kaydetmek kesinlikle mümkün olsa da, şehir ayrıntılarını saklayan ayrı bir tablonun olması daha iyi olacaktır.
Birincil Anahtar ve Yabancı Anahtar
İlişkiler, bir birincil anahtar (primary key) ve bir yabancı anahtar (foreign key) kullanılarak sağlanır. Birincil anahtar benzersiz bir tanımlayıcıdır (unique identifier). Eşsiz olduğu için, yabancı anahtar, yalnızca bir kayda başvurduğundan tam olarak güvenli bir kayıt dönecektir.
Yani bir ilişkide, bir tablodaki yabancı anahtar, diğer tablodaki birincil anahtarla eşleşir. Yabancı anahtar alanındaki herhangi bir değer, başvurulan tablodaki birincil anahtar alanında eşleşen bir değere sahip olmalıdır. Yabancı anahtar ve birincil anahtar alanları da aynı veri türüne sahip olmalıdır.
Yaygın bir kural olarak, yabancı anahtar alanına referans verdiği birincil anahtar alanıyla aynı ada sahip olması önerilir. Fakat bu bir zorunluluk değildir.
İlişki Türleri
Veritabanı tasarımında üç tür ilişki vardır.
- Bire Bir: A tablosundaki bir satır, B tablosunda yalnızca bir eşleşen satıra sahip olabilir ve bunun tersi de geçerlidir.
- Birden Çoğa (veya Çoktan Bire): A tablosundaki bir satırın B tablosundaki birçok eşleşen satırı olabilir, ancak B tablosundaki bir satırın A tablosundaki yalnızca bir eşleşen satırı olabilir.
- Çoktan Çoğa: Tablo A'daki bir satır, B tablosunda birçok eşleşen satıra sahip olabilir ve bunun tersi de geçerlidir.
İlişkilendirmenin Avantajları
İlişkiler, herhangi bir ilişkisel veritabanı yönetim sisteminin (RDBMS) temelidir. İlişkiler, veritabanı tasarımında kullanmak için çok güçlü bir araçtır.
Veritabanı tasarımındaki ilişkilerin bazı önemli faydaları şunlardır:
- Depolama gereksinimlerini azaltır.
- Veri bütünlüğünü korumaya yardımcı olur.
- Son kullanıcılar için kullanılabilirliği artırmaya yardımcı olur.
- Daha kolay veri bakımı sağlar.
- Güvenlik konusunda yardımcı olur.
- Veritabanının ölçeklenebilirliğine veya genişletilmesine yardımcı olur.
1 - Depolama gereksinimlerini azaltır: Bir kimliğin (ID) saklanması, özellikle metin uzunsa, tam metnin saklanmasından genellikle daha verimlidir.
2 - Veri bütünlüğünü korumaya yardımcı olur: Verileri bir kez girip ardından o kaydı referans göstermek, hataya daha az sebep olacaktır. Müşteri ve Şehir tabloları arasında bir ilişki yoksa, kullanıcıların her müşteri eklediklerinde veya güncellediklerinde şehir bilgilerini tekrar girmeleri gerekebilir.
3 - Son kullanıcılar için kullanılabilirliği artırmaya yardımcı olur: Bir ilişki oluşturarak, artık kullanıcılara istenen seçeneği (örn: şehir) seçmeleri için bir olanak sağlayabilirsiniz. Böylece her kayıt için tekrar şehir isimleri girmesinin önüne geçersiniz. Bu hem zaman hem de doğruluk anlamında faydalı olacaktır.
4 - Daha kolay veri bakımı: Veri güncellemelerinin yalnızca tek bir yerde yapılmasını sağlar. Örneğin, ilişkideki bir tablonun verisini değiştirmeniz ana tablodaki tüm kayıtlarda otomatik gözükür.
5 - Güvenlik konusunda yardımcı olur: Hassas verilerinizin başka bir tabloda saklanmasına olanak sağlar. Bir kullanıcı oturum açtığında sistem, kullanıcılara yalnızca erişmelerine izin verilen tablolara hak verebilir. Örneğin, bir çalışan diğer çalışanların ayrıntılarını görebilir ancak maaşlarını göremez. Ancak, maaş işi ile ilgili (örneğin insan kaynakları) bir personelin bunu görmesini sağlayabilirsiniz. Bu maaş bilgilerinin başka ilişkili bir tabloda tutulması ile olur.
6 - Veritabanının ölçeklenebilirliğine veya genişletilmesine yardımcı olur: Belirli verilerin ayrı bir tabloda olması, şu anda gerekli olmayan ancak gelecekte ihtiyaç duyulabilecek kayıtları eklemenize olanak tanır.