Foreign key, ilişkisel veritabanlarında bir tablodaki bir sütunun, başka bir tablodaki bir sütunun değerlerine referans olması anlamına gelir. Yani, bir tablodaki bir sütun, diğer bir tablodaki bir sütunun değerlerine atıfta bulunur.
Örneğin, bir “müşteriler” tablosu ve bir “siparişler” tablosu düşünelim. “Siparişler” tablosundaki her bir siparişin, “müşteriler” tablosundaki bir müşteriye ait olması gerektiği açıktır. Bu durumda, “siparişler” tablosunda bir “müşteri ID” sütunu ekleyebiliriz ve bu sütunu “müşteriler” tablosundaki “müşteri ID” sütununa bağlayabiliriz. Bu işlemi yaparak “siparişler” tablosundaki her bir siparişin, bir “müşteriler” tablosundaki müşteriye atıfta bulunduğu belirtilir. Böylece “müşteriler” tablosundaki bir müşterinin silinmesi durumunda, ona referans yapan tüm siparişler de silinir veya güncellenir.
Bu şekilde, foreign key’ler veritabanında bütünlük sağlamak için önemlidir.
Aşağıdaki örnekte, “müşteriler” ve “siparişler” adında iki tablo oluşturacağız ve “siparişler” tablosunda “müşteri_id” adında bir foreign key tanımlayacağız.
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(50),
customer_email VARCHAR(50)
);CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
Yukarıdaki örnekte, “customers” tablosu müşteri bilgilerini tutarken, “orders” tablosu sipariş bilgilerini tutar ve “customer_id” sütunu, “customers” tablosundaki müşteri bilgilerine referans vermektedir. “customer_id” sütunu, “customers” tablosundaki “customer_id” sütunuyla ilişkili olduğu için, FOREIGN KEY kısıtlamasıyla ilişkilendirilir.
Böylece, “orders” tablosundaki herhangi bir müşteri ID, “customers” tablosundaki bir müşteri ID ile eşleştirilmelidir. Bu şekilde, veritabanında bütünlük sağlanır.