Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler
Azure SQL Database
Azure SQL Managed Instance
SQL database in Microsoft Fabric
Bu makalede, SQL Server Management Studio veya Transact-SQL kullanarak SQL Server'da yabancı anahtar ilişkilerinin nasıl oluşturulacağı açıklanır. Bir tablonun satırlarını başka bir tablonun satırlarıyla ilişkilendirmek istediğinizde, iki tablo arasında bir ilişki oluşturursunuz.
Permissions
Yabancı anahtarla yeni bir tablo oluşturmak için veritabanında CREATE TABLE izni ve tablonun oluşturulduğu şema üzerinde ALTER SCHEMA izni gerekir.
Varolan bir tabloda yabancı anahtar oluşturmak için tabloda ALTER TABLE izni gerekir.
Limitations
Yabancı anahtar kısıtlamasının yalnızca başka bir tablodaki birincil anahtar kısıtlamasına bağlanması gerekmez. Yabancı anahtarlar, başka bir tablodaki
UNIQUEkısıtlamasının sütunlarına başvurmak için de tanımlanabilir.NULLkısıtlamasının sütununaFOREIGN KEYdışında bir değer girildiğinde, girilen değer başvurulan sütunda bulunmalıdır. Aksi takdirde, yabancı anahtar ihlali hata iletisi döndürülür. Bileşik yabancı anahtar kısıtlamasının tüm değerlerinin doğrulandığından emin olmak için, katılan tüm sütunlardaNOT NULLbelirtin.FOREIGN KEYkısıtlamaları yalnızca aynı sunucudaki aynı veritabanındaki tablolara başvurabilir. Veritabanları arası bilgi tutarlılığı tetikleyiciler aracılığıyla uygulanmalıdır. Daha fazla bilgi için CREATE TRIGGER (Transact-SQL)bölümüne bakın.FOREIGN KEYkısıtlamaları, aynı tablodaki başka bir sütuna atıfta bulunabilir ve bu da kendi kendine başvuru olarak adlandırılır.Sütun düzeyinde belirtilen
FOREIGN KEYkısıtlaması yalnızca bir başvuru sütununu listeleyebilir. Bu sütun, kısıtlamanın tanımlandığı sütunla aynı veri türüne sahip olmalıdır.Tablo düzeyinde belirtilen
FOREIGN KEYkısıtlaması, kısıtlama sütun listesindeki sütun sayısıyla aynı sayıda başvuru sütununa sahip olmalıdır. Her başvuru sütununun veri türü de sütun listesindeki ilgili sütunla aynı olmalıdır.Veritabanı Altyapısı' nın, bir tablonun diğer tablolara başvuran
FOREIGN KEYkısıtlama sayısı üzerinde önceden tanımlanmış bir sınırı yoktur. Veritabanı Altyapısı, belirli bir tabloya başvuran diğer tabloların sahip olduğuFOREIGN KEYkısıtlamalarının sayısını da sınırlamaz. Ancak, kullanılanFOREIGN KEYkısıtlamalarının gerçek sayısı donanım yapılandırmasıyla ve veritabanı ve uygulamanın tasarımıyla sınırlıdır. Bir tablo, yabancı anahtarlar (giden başvurular) olarak en fazla 253 diğer tabloya ve sütuna başvurabilir. SQL Server 2016 (13.x) ve sonraki sürümleri, tek bir tablodaki (gelen başvurular) sütunlara başvurabilen diğer tablo ve sütun sayısının sınırını 253'ten 10.000'e yükseltmektedir. (En az 130 uyumluluk düzeyi gerektirir.) Artış aşağıdaki kısıtlamalara sahiptir:DELETEveUPDATEDML işlemleri, 253'ten fazla yabancı anahtar başvurusunu destekler.MERGEişlemleri desteklenmez.Kendisine yabancı anahtar başvurusu olan bir tablo yine de 253 yabancı anahtar başvurusuyla sınırlıdır.
Şu anda columnstore dizinleri veya bellek için iyileştirilmiş tablolar için 253'ten fazla yabancı anahtar başvurusu mevcut değildir.
FOREIGN KEYkısıtlamaları geçici tablolarda uygulanmaz.ClR kullanıcı tanımlı tür sütununda yabancı anahtar tanımlanmışsa, türün uygulanması ikili sıralamayı desteklemelidir. Daha fazla bilgi için bkz. CLR Kullanıcı Tanımlı Türler.
varchar(max) türünde bir sütun, yalnızca başvurduğu birincil anahtar da varchar(max) türü olarak tanımlandığında bir kısıtlamaya katılabilir.
Tablo Tasarımcısı'nda yabancı anahtar ilişkisi oluşturma
SQL Server Management Studio kullanma
Nesne Gezgini'nde, ilişkinin yabancı anahtar tarafındaki tabloya sağ tıklayın ve Tasarım'ı seçin.
Tablo, oluştur ve güncelle veritabanı tablolarıiçinde açılır.
Tablo Tasarımcısı menüsünde İlişkilerseçin. (Üst bilgideki Tablo Tasarımcısı menüsüne bakın veya tablo tanımının boş alanına sağ tıklayın, ardından İlişkiler... seçin.)
Yabancı Anahtar İlişkileri iletişim kutusunda Ekle'yiseçin.
İlişki, Seçili İlişki listesinde
FK_<tablename>_<tablename>biçiminde sistem tarafından sağlanan bir adla gösterilir; burada ilk tablo adı yabancı anahtar tablosunun adıdır ve ikinci tablo adı birincil anahtar tablosunun adıdır. Bu, yabancı anahtar nesnesinin (Ad) alanı için yalnızca varsayılan ve yaygın bir adlandırma kuralıdır.Seçili İlişki listesinden ilişkiyi seçin.
Tablonun sağında bulunan Tablo ve Sütun Belirtimi'ni seçin ve özelliğin sağındaki üç nokta simgesini (...) seçin.
Tablolar ve Sütunlar iletişim kutusundaki Birincil Anahtar açılan listesinde, ilişkinin birincil anahtar tarafındaki tabloyu seçin.
Tablonun birincil anahtarına katkıda bulunan sütunları, iletişim kutusunun altındaki ızgarada seçin. Her sütunun sağında yer alan bitişik kılavuz hücresinde, yabancı anahtar tablosuna ait karşılık gelen yabancı anahtar sütununu seçin.
Tablo Tasarımcısı ilişki için bir ad önerir. Bu adı değiştirmek için, İlişki Adı metin kutusunun içeriğini düzenleyin.
İlişkiyi oluşturmak için tamam seçin.
Tablo tasarımcısı penceresini kapatın ve yabancı anahtar ilişkisi değişikliğinin geçerlilik kazanması için Kaydet yaparak değişikliklerinizi kaydedin.
Yeni tabloda yabancı anahtar oluşturma
Transact-SQL kullanma
Aşağıdaki örnek, TempID veritabanındaki SalesReasonID tablosunda yer alan sütun Sales.SalesReason'i referans alan sütun AdventureWorks üzerinde bir yabancı anahtar kısıtlaması tanımlar.
ON DELETE CASCADE ve ON UPDATE CASCADE yan tümceleri, Sales.SalesReason tabloda yapılan değişikliklerin Sales.TempSalesReason tabloya otomatik olarak yayılmasını sağlamak için kullanılır.
CREATE TABLE Sales.TempSalesReason (
TempID INT NOT NULL,
Name NVARCHAR(50),
CONSTRAINT PK_TempSales
PRIMARY KEY NONCLUSTERED (TempID),
CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
REFERENCES Sales.SalesReason(SalesReasonID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
Mevcut tabloda yabancı anahtar oluşturma
Transact-SQL kullanma
Aşağıdaki örnek, TempID veritabanındaki SalesReasonID tablosundaki Sales.SalesReason sütununa başvuran bir yabancı anahtarı AdventureWorks sütununda oluşturur.
ALTER TABLE Sales.TempSalesReason
ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
REFERENCES Sales.SalesReason (SalesReasonID)
ON DELETE CASCADE
ON UPDATE CASCADE;