Veri Tabanında İlişkiler ve MSSQL'de Tanımlanması

Lothric

Yazılım Ekibi Asistanı
11 Şub 2024
6
1
Firelink Shrine
Veri tabanında ilişkiler; veri bütünlüğünü destekleyen, fazlalığı azaltan, veri alımını ve analizini mümkün kılan ilişkisel veri tabanlarının temel bir yönüdür.

Bu ilişkileri üçe ayırırız:


  • Birebir İlişkiler
  • Bire Çok İlişkiler
  • Çoka Çok İlişkiler
Bu ilişkileri tanımadan önce bilmemiz gereken birtakım şeyler var.

1-Anahtarlar

Key (Anahtar)

Key (Anahtar) veri tabanı içeriğinde, bir veya daha fazla alanın bir satırı nicelemesi amacıyla tanımlaması olarak özetlenebilir

Unique Key (UNI / Tekil / Benzersiz Anahtar)
Unique Key
(Tekil Anahtar), yer aldığı tablo içerisinde bir değeri sadece bir kere alır. İlgili değerin tekrar atanmasına izin verilmez. İşlevi Primary Key (birincil anahtar) ile benzerlik taşısa da en önemli farklılık Unique Key’in NULL değeri alabilir oluşudur.


Primary Key(PRI / Birincil Anahtar)
Primary Key (Birincil Anahtar), bir veri tablosunda yer alan her satır için bir vekil / tanımlayıcı görevi görür, kısıtlamadır ve eşssizdir. Satırlara ait verilerin karışmaması adına bu alana ait bilginin tekrarlanmaması gerekir. Temel işlevi, verilerin hangi satıra dizileceğine (veya hangi satırda verilerin düzenleneceğine) karar vermesidir. Birincil anahtar değeri boş geçilemez ve NULL değer alamaz. İlişkisel veri tabanlarında mutlaka birincil anahtar olmalıdır.



Foreign Key(Yabancı Anahtar)

Foreign Key(Yabancı Anahtar) ikincil anahtar olarak da ifade edilmektedir. Bir veri tablosuna girilebilecek değerleri başka bir veri tablosundaki alanlarla ilişkilendirmeye yarar. Özetle, başka bir tablonun birincil anahtarının bir diğer tablo içerisinde yer almasıdır.



Şimdi ilişkiler için önemli olan anahtarları öğrendiğimize göre ilişkilere geçebiliriz.









2-İlişkiler

Bire Bir İlişki Tipi

İki tablo arasındaki ilişkiyi sağlamak için kullanacağımız alanların ikiside kendi tablolarında birincil anahtar (primary key) ise birebir ilişki olur.



Smss’imizi (Sql Server Managment Studio) açıp içinde bir veri tabanı oluşturuyoruz. Bu veri tabanını seçerek bir query oluşturup içine yanda gördüğünüz sorguları yazıyoruz. Burada iki tablomuz var. Personel tablomuzda PersonelNo’yu ilişkide kullanmak için primary key olarak atadık. PersonelDetay tablomuzda da aynı şekilde PersonelNo’yu primary key olarak atadık. Her bir personelin bir ismi olacak. Ve her personelin ayrı bir tabloda tutulan personele dair detayları tutulacak. Bu sorguyu çalıştırıyoruz.





Tablolarımız sorunsuz oluştuktan sonra Database Diagrams’a sağ tıklayıp yeni bir diagram oluşturuyoruz. Burada tablolarımızı görebiliriz.





Personel tablomuzdaki PersonelNo sütununun yanındaki sarı anahtarı sol click ile tutup PersonelDetay tablomuzda olan PersonelNo’nun sarı anahtarının üstüne bırakıyoruz. Bu sayede bire bir ilişkimiz tanımlanmış oluyor.



Özet geçmek gerekirse, Yanda Personel ve PersonelDetay isimli iki tablomuz var. Her personelin bir detayı olacağı ve her personel detayında bir personele ait olacağı için burada tablolarımız arasında bire bir ilişki atadık.











Bire Çok İlişki Tipi
İki tablo arasındaki ilişkiyi sağlamak için kullanacağımız alanlardan birisi birincil anahtar (Primary Key) diğeri yabancı anahtar (Foreign Key) ise bire çok ilişki olur.




Yeni bir query açıp içine bu sorguları yazıyoruz. Burada iki tablomuz var. Kulupler tablomuzda yer alan KulupID sütununa primary key ataması yaptık. Aynı şekilde Ogrenciler tablomuzdaki OgrenciID sütununa da primary key ataması yaptık. Ayrıca identity(1,1) yazarak bu id değerinin her defasında birer birer artmasını sağladık. Sorguyu çalıştırıyoruz.






Tablolarımız sorunsuz oluştuktan sonra Database Diagrams’a sağ tıklayıp yeni bir diagram oluşturuyoruz. Burada tablolarımızı görebilirsiniz.



Bu sefer bire bir ilişkide yaptığımızdan farklı olarak Kulupler tablomuzdaki KulupID’nin yanındaki sarı anahtarı tutup Ogrenciler tablomuzdaki KulupID sütununun üstüne bırakıyoruz. Bu sayede bire çok ilişkimiz tanımlanmış oluyor.



Özet geçmek gerekirse, Yanda Kulupler ve Ogrenciler isimli iki tablomuz var. Her kulüpe kayıtlı birden fazla öğrenci olacağı ve her öğrencinin yalnız bir kulüpe kayıtlı olacağı için burada bire çok ilişki kullandık.







Çoka Çok İlişki Tipi
Bu ilişki türünü bir örnekle anlatalım. Mühendisler ile Projeler isimli tablolarımız olsun. Bunun yanında bu iki tablo arasındaki çoka çok ilişki için üçüncü bir tablo olan MuhendisProje tablolarını oluşturalım.

Bir mühendis birden fazla proje üzerinde çalışabilir. Aynı proje üzerinde birden fazla mühendis çalışabilir.



Bu sefer tablolarımızı kendi ellerimizle oluşturalım. Tables kısmına sağ tıklayıp New Table diyoruz. Sonrasında yukarıda olan sütunlarımızı oluşturuyoruz. Sütunları oluşturduktan sonra PerID sütununa sağ tıklayıp Set Primary Diyoruz. Ctrl S ile kaydediyoruz ve
ismini Muhendisler koyuyoruz



Aşağıda bulunan Column Properties penceresinde Identity Specification’u bulup altındaki (Is Identity)’e iki kere tıklıyoruz. Bu sayede id değerimizin birer birer artmasını sağladık.



Diğer tablomuzda yaptığımız her şeyi bu tablo üzerinde de yapıp Ctrl S ile kaydediyoruz ve ismini Projeler koyuyoruz.


Mühendis tablosu ve Proje tablosu arasında çoka çok ilişki kuracak son tablomuzda boyle oluşturuyoruz ve Database Diagrams’a geçiyoruz.


Yeni bir diagram açtıktan sonra Projeler tablosundaki sarı anahtarı MuhendisProje tablosundaki ProjeID’ye, Muhendisler tablosundaki sarı anahtarı PerID’ye sürükleyip bırakıyoruz. Bu sayede ilişkimiz tanınlanmış oluyor
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.