FOREIGN KEY Kısıtlamaları

Yabancı anahtar (YA) iki tablo arasında bağlantı kurmak ve zorlamak için kullanılan sütun veya sütunlar bileşimidir.Tablo oluşturduğunuzda veya tabloyu değiştirdiğinizde FOREIGN KEY kısıtlamasını tanımlayarak yabancı anahtar oluşturabilirsiniz.

Yabancı anahtar başvurusunda bir tablo için birincil anahtar değerini içeren sütun veya sütunlara başka bir tablodaki sütun veya sütunlar ile başvurulduğunda iki tablo arasında bir bağlantı oluşturulur.Bu sütun, ikinci tablodaki yabancı anahtar olur.

Örneğin, satış siparişleri ve satış temsilcileri arasında mantıksal bir ilişki bulunduğundan AdventureWorks2008R2 veritabanı içindeki Sales.SalesOrderHeader tablosu, Sales.SalesPerson tablosuna ilişkin bir bağlantıya sahiptir.SalesOrderHeader tablosundaki SalesPersonID sütunu, SalesPerson tablosunun birincil anahtar sütunuyla eşleşir.SalesOrderHeader tablosundaki SalesPersonID sütunu, SalesPerson tablosuna ilişkin yabancı anahtardır.

SalesOrderHeader.SalesPersonID yabancı bir anahtardır.

FOREIGN KEY kısıtlamasının yalnızca başka bir tablodaki PRIMARY KEY kısıtlamasına bağlı olmasına gerek yoktur. Ayrıca başka bir tablodaki UNIQUE kısıtlama sütununa başvuracak şekilde de tanımlanabilir.FOREIGN KEY kısıtlaması null değerler içerebilir. Ancak bileşik FOREIGN KEY kısıtlaması sütunlarından herhangi biri null değerler içeriyorsa, FOREIGN KEY kısıtlamasını oluşturan tüm değerlerin doğrulaması atlanır.Bileşik FOREIGN KEY kısıtlamasının tüm değerlerinin doğrulandığından emin olmak için katılan tüm sütunlarda NOT NULL ifadesini belirtin.

Not

FOREIGN KEY kısıtlaması aynı veritabanındaki veya aynı tablo içindeki sütunlara başvurabilir.Bu tablolara kendi kendine başvuruda bulunan tablolar adı verilir.Örneğin, üç sütun içeren bir çalışan tablosu düşünün: employee_number, employee_name ve manager_employee_number.Yönetici de bir çalışan olduğundan, manager_employee_number sütunu ve employee_number sütunu arasında yabancı anahtar ilişkisi bulunur.

Bilgi Tutarlılığı

FOREIGN KEY kısıtlamasının esas amacı yabancı anahtar tablosunda depolanabilen verileri kontrol etmek olmasına rağmen, birincil anahtar tablosundaki veriler üzerindeki değişiklikleri de kontrol eder.Örneğin, bir satış temsilcisine ilişkin satır Sales.SalesPerson tablosundan silinirse ve satış temsilcisi kimliği Sales.SalesOrderHeader tablosundaki satış siparişleri için kullanılıyorsa, iki tablo arasındaki ilişkisel bütünlük bozulur, silinen satış temsilcisinin satış siparişleri SalesOrderHeader tablosunda, SalesPerson tablosundaki verilere ilişkin bağlantı olmadan sahipsiz kalır.

FOREIGN KEY kısıtlaması bu durumu engeller.Kısıtlama değişikliklerin yabancı anahtar tablosundaki verilere ilişkin bağlantıyı geçersiz kılması durumunda birincil anahtar tablosundaki veriler üzerinde değişiklik yapılamayacağını garanti ederek bilgi tutarlılığını zorlar.Birincil anahtar tablosundaki satırı silmek veya birincil anahtar değerini değiştirmek için bir girişimde bulunulursa, silinen veya değiştirilen birincil anahtar değeri başka bir tablonun FOREIGN KEY kısıtlamasındaki değere karşılık geldiğinde işlem başarısız olur.FOREIGN KEY kısıtlamasındaki bir satırı başarıyla değiştirmek veya silmek için öncelikle yabancı anahtar tablosundaki yabancı anahtar verilerini silmeniz veya yabancı anahtar tablosundaki yabancı anahtar verilerini değiştirmeniz gerekir. Böylece yabancı anahtar farklı birincil anahtar verilerine bağlantılanır.

FOREIGN KEY Kısıtlamaları dizini oluşturma

Yabancı anahtarda dizin oluşturma genellikle aşağıdaki nedenlerle yararlıdır:

  • PRIMARY KEY kısıtlamaları üzerinde yapılan değişiklikler ilişkili tablodaki FOREIGN KEY kısıtlamaları ile kontrol edilir.

  • İlişkili tablolardaki veriler, bir tablonun FOREIGN KEY kısıtlamasındaki sütun veya sütunların başka bir tablodaki birincil ya da benzersiz anahtar sütun veya sütunlarla eşleştirilmesiyle birleştirildiğinde yabancı anahtar sütunları genellikle birleşim ölçütlerinde kullanılır.Bir dizin Veritabanı Altyapısı öğesinin ilgili verileri yabancı anahtar tablosunda hızla bulmasını sağlar.Ancak, bu dizinin oluşturulması gerekli değildir.İlişkili iki tablodaki veriler, tablolar arasında PRIMARY KEY veya FOREIGN KEY kısıtlamaları tanımlanmamış olsa dahi birleştirilebilir. Ancak iki tablo arasındaki yabancı anahtar ilişkisi, tabloların ölçütü olarak anahtarları kullanan bir sorguda birleştirilmek üzere en iyi duruma getirildiğini gösterir.FOREIGN KEY kısıtlamalarını birleştirmeler ile kullanma hakkında daha fazla bilgi için Fundamentals katılın ve Sorgu türleri ve dizinler bölümlerine göz atın.

Bir Tablodaki FOREIGN KEY Kısıtlamaları Sayısı

SQL Server, bir tablonun içerebileceği FOREIGN KEY kısıtlamaları sayısında veya belirli bir tabloya başvuran diğer tabloların sahip olduğu FOREIGN KEY kısıtlamaları sayısında önceden tanımlanmış bir sınıra sahip değildir.Bununla birlikte, FOREIGN KEY kısıtlamalarının gerçek sayısı donanım yapılandırmanız ve veritabanınızın ve uygulamanın tasarımı tarafından sınırlandırılır.Bir tablonun 253'ten fazla FOREIGN KEY kısıtlamasına sahip olmamasını ve bu tabloya 253'ten fazla FOREIGN KEY kısıtlamasının başvurmamasını öneririz.Veritabanınızı ve uygulamaları tasarlarken FOREIGN KEY kısıtlamalarını zorlamanın maliyetini değerlendirin.