İngilizce dilinde oku

Aracılığıyla paylaş


Yabancı anahtar ilişkileri oluşturma

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri Microsoft Fabric'te Azure SQL VeritabanıAzure SQL Yönetilen ÖrneğiSQL veritabanı

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.

İzinler

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.

Sınırlama

  • 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 UNIQUE kısıtlamasının sütunlarına başvurmak için de tanımlanabilir.

  • FOREIGN KEY kısıtlamasının sütununa NULL dışı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ütunlarda NOT NULL belirtin.

  • FOREIGN KEY kı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 KEY kı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 KEY kı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 KEY kı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 KEY kı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ğu FOREIGN KEY kısıtlamalarının sayısını da sınırlamaz. Ancak, kullanılan FOREIGN KEY kı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:

    • DELETE ve UPDATE DML işlemleri, 253'ten fazla yabancı anahtar başvurusunu destekler. MERGE iş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 KEY kı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 User-Defined türleri.

  • varchar(max) türünde bir sütun, yalnızca başvurdığı birincil anahtar varchar(max) türü olarak tanımlandığında FOREIGN KEY kısıtlamaya katılabilir.

Tablo Tasarımcısı'nda yabancı anahtar ilişkisi oluşturma

SQL Server Management Studio kullanma

  1. Nesne Gezgini'nde, ilişkinin yabancı anahtar tarafında yer alacak tabloya sağ tıklayın ve tasarım seçin.

    Tablo, oluştur ve güncelle veritabanı tablolarıiçinde açılır.

  2. 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.)

  3. 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.

  4. Seçili İlişki listesinden ilişkiyi seçin.

  5. Sağdaki kılavuzda Tablo ve Sütun Belirtimi'i seçin ve özelliğin sağındaki üç noktayı (...) seçin.

  6. Tablolar ve Sütunlar iletişim kutusunda, birincil anahtar açılan listesinde, ilişkinin birincil anahtar tarafında yer alacak tabloyu seçin.

  7. İletişim kutusunun altındaki kılavuzda, tablonun birincil anahtarına katkıda bulunan sütunları 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.

  8. İlişkiyi oluşturmak için tamam seçin.

  9. Tablo tasarımcısı penceresini kapatın ve yabancı anahtar ilişkisi değişikliğinin geçerlilik kazanmasını değişikliklerinizi kaydedin.

Yeni tabloda yabancı anahtar oluşturma

Transact-SQL kullanma

Aşağıdaki örnek, AdventureWorks veritabanındaki Sales.SalesReason tablosunda yer alan sütun SalesReasonID'i referans alan sütun TempID ü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.

SQL
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, AdventureWorks veritabanındaki Sales.SalesReason tablosundaki SalesReasonID sütununa başvuran bir yabancı anahtarı TempID sütununda oluşturur.

SQL
ALTER TABLE Sales.TempSalesReason
ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID)
REFERENCES Sales.SalesReason (SalesReasonID)
   ON DELETE CASCADE
   ON UPDATE CASCADE;