Transaction ve foreign key nedir?

Bazı işlemler, birbirlerine olan bağımlılıkları yüzünden, tek bir işlem gibi yapılmalıdır. Eğer işlemlerden birisi yapılamayacaksa, bütün işlem bloğu iptal edilmelidir.

Örneğin web’den satış yapan bir site var diyelim. Bir sipariş alındığında, müşteri hesabına borç yazılmalı, ürün stoktan düşülmeli, paketleme/kargo servisine nakliye emri verilmeli…

Bu işlem bloğu yarıda kalırsa, sorunlu durumlar oluşur. Örneğin müşteriyi borçlandırdık, stoktan ürünü düştük ama nakliye emrini veremedik, bir sebepten dolayi işlem kesildi. O zaman, müşterinin eline geçmeyecek bir ürün için müşteriyi borçlandırmış oluruz.

Nakliye emri aşamasinda bile sorun çıksa, bütün işlem bloğunun iptal edilmesi gerekir.

Bu tip blok işlemleri transaction yardımı ile yapıyoruz. Ya işlem bloğunun tamamı başarı ile sonuçlanır veya herhangi bir aşamadaki aksilikte, bloğa ait bütüm işlemler iptal edilir.

Foreign key (yabancı anahtar), referential integrity (veri tutarlılığı) ve primary key (asıl anahtar) ile ilgili bir olay.

Bu olay bir örnekle daha kolay açıklanabilir. Bir mağazamız olsun. Kayıtlarda, mal aldığımız firmalarin bilgileri ve aldığımız ürünlerle ilgili iki tablo olsun.

Ürünler tablosundaki her ürün, firmalar tablosundaki bir firma ile ilişkilidir (yani ürünün satın alındığı firma ile)

Bu ilişkide, firmalar tablosundaki, firma kodu alanı primary key (asıl anahtar) ve ürünler tablosundaki firma kodu alanı foreign key (yabancı anahtardır)

Bu ilişki nedeniyle, tablolar arasındaki veri tutarsızlıkları, veritabani sunucusu tarafından engellenir. Örneğin

* firma tablosunda kaydı bulunmayan bir firma için ürün bilgisi
 girilemez.

* bir firma silindiğinde, ya o firmaya ait büyün ürünler otomatik olarak silinir veya silme işlemi engellenir.

* firma kodu değistiğinde, otomatik olarak ürünler tablosundaki firma kodları da degişir. Böylece firma-ürün ilişkisi kaybedilmemiş olur.

ALINTIDIR : acemi