Veritabanı yönetim sistemlerinde, tablolar arasındaki ilişkiler genellikle birincil anahtar (primary key) ve yabancı anahtar (foreign key) kullanılarak kurulur. Bu ilişkiler, veri bütünlüğünü sağlamak ve verilerin tutarlılığını korumak amacıyla bazı kısıtlamalarla desteklenir. Bu makalede, tablo ilişkilendirmelerinde kullanılan RESTRICT, CASCADE, SET NULL, NO ACTION ve SET DEFAULT gibi eylemleri açıklayacağız.
Yabancı Anahtar ve Eylemler
Yabancı anahtar, bir tablodaki bir sütunun, başka bir tablodaki birincil anahtara referans vermesini sağlar. Ancak, ilişkili bir kaydın silinmesi veya güncellenmesi durumunda, ilgili eylemlerin ne olacağı belirlenmelidir. İşte bu durumda ON DELETE (silme) ve ON UPDATE (güncelleme) eylemleri devreye girer.
Eylem Türleri
Aşağıda bu eylemlerin anlamlarını ve kullanım durumlarını detaylı şekilde inceleyelim:
1. RESTRICT
- Tanım: İlişkili bir kaydın silinmesini veya güncellenmesini engeller.
- Kullanım Durumu: Veritabanı yapısında bir kaydın diğer tablolarla sıkı bir ilişki içinde olduğu durumlarda kullanılır.
- Örnek Durum:
- Bir sipariş tablosunda, müşteri tablosundaki bir müşteri kimliği (customer_id) yabancı anahtar olarak kullanılıyorsa, müşteri silindiğinde bu işlem RESTRICT olarak tanımlanmışsa silme işlemi engellenir.
- Avantaj: Veri bütünlüğünü maksimum seviyede korur.
SQL Örneği:
1 2 3 4 5 6 | CONSTRAINT `FK_orders_customers` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT; |
2. CASCADE
- Tanım: İlişkili kaydın silinmesi veya güncellenmesi durumunda, bağlantılı tüm kayıtlar da otomatik olarak silinir veya güncellenir.
- Kullanım Durumu: Bir ana kayda sıkı şekilde bağlı olan verilerin, ana kayıtla birlikte kaldırılması gereken durumlarda kullanılır.
- Örnek Durum:
- Bir müşteri silindiğinde, ona ait tüm siparişlerin de silinmesi isteniyorsa CASCADE kullanılır.
- Avantaj: Elle işlem yapmaya gerek kalmaz; ilişkili tüm kayıtlar otomatik olarak güncellenir veya silinir.
SQL Örneği:
1 2 3 4 5 6 | CONSTRAINT `FK_orders_customers` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; |
3. SET NULL
- Tanım: İlişkili bir kaydın silinmesi veya güncellenmesi durumunda, yabancı anahtarın değeri NULL olarak ayarlanır.
- Kullanım Durumu: Bir kaydın referansı kaldırıldığında, bağlantılı kayıtların tamamen silinmesi yerine, yabancı anahtar alanının boş bırakılması gerektiğinde kullanılır.
- Örnek Durum:
- Bir öğretmen kaydı silindiğinde, onun ders kaydı (class) tablolarında öğretmen kimliği NULL olarak ayarlanabilir.
- Avantaj: İlişkili kayıtlar korunur, ancak bağlantı koparılır.
SQL Örneği:
1 2 3 4 5 6 | CONSTRAINT `FK_classes_teachers` FOREIGN KEY (`teacher_id`) REFERENCES `teachers` (`id`) ON DELETE SET NULL ON UPDATE SET NULL; |
4. NO ACTION
- Tanım: İlişkili bir kaydın silinmesi veya güncellenmesi engellenir. Bu davranış RESTRICT ile benzer, ancak uygulama anında farklılık gösterebilir. Çoğu veritabanı bu iki terimi aynı şekilde işler.
- Kullanım Durumu: Veri bütünlüğünü sağlamak için kullanılır.
SQL Örneği:
1 2 3 4 5 6 | CONSTRAINT `FK_orders_customers` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; |
5. SET DEFAULT
- Tanım: İlişkili bir kaydın silinmesi veya güncellenmesi durumunda, yabancı anahtarın değeri varsayılan bir değere ayarlanır.
- Kullanım Durumu: Kaydın referansı değiştirildiğinde, ilişkili kayıtların bir varsayılan değere bağlanması gereken durumlarda kullanılır.
- Not: MySQL bu seçeneği desteklemez, ancak diğer bazı veritabanı sistemlerinde (örneğin PostgreSQL) kullanılabilir.
SQL Örneği:
1 2 3 4 5 6 | CONSTRAINT `FK_orders_customers` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`) ON DELETE SET DEFAULT ON UPDATE SET DEFAULT; |
Hangi Eylem Nerede Kullanılmalı?
- RESTRICT/NO ACTION: Kritik verilerin korunması gerektiğinde.
- CASCADE: Bağlı verilerin bir bütün olarak yönetilmesi gerektiğinde.
- SET NULL: İlişkinin sona erdirilip kaydın korunması gerektiğinde.
- SET DEFAULT: Varsayılan bir referans değeri ile ilişkilendirmenin devam etmesi gerektiğinde.
Sonuç
Tablo ilişkilendirmelerinde kullanılan bu eylemler, veri tutarlılığını sağlama ve veri yönetimini kolaylaştırma açısından kritik öneme sahiptir. Hangi eylemin kullanılacağı, uygulamanın gereksinimlerine bağlıdır. Doğru seçimi yapmak, hem veri güvenliğini artırır hem de uzun vadede sistemdeki hataları ve karmaşıklıkları azaltır.
Veritabanı tasarımında bu tür detaylara dikkat ederek, daha güvenli ve sürdürülebilir bir yapı oluşturabilirsiniz.