Birincil ve yabancı anahtar kısıtlamaları

Birincil anahtar ve yabancı anahtar olan kısıtlamalar veri bütünlüğü içinde uygulamak için kullanılabilecek iki tür SQL Servertabloları. Bunlar önemli veritabanı nesneleridir.

Bu konuda aşağıdaki bölümler bulunur.

Primary Key Constraints

Foreign Key Constraints

Related Tasks

PRIMARY Key kısıtlamaları

Bir tablo genellikle bir sütun ya da tablodaki her satırı benzersiz olarak tanımlayan değerler içeren sütunlar vardır. Bu sütun veya sütunlar, tablonun birincil anahtarı (pk) denir ve tablo varlığın bütünlüğünü zorlar. Birincil anahtar kısıtlamaları benzersiz veri garanti çünkü onlar sık kimlik sütunu üzerinde tanımlanır.

Bir tablo için birincil anahtar kısıtlamasını belirtirseniz Veritabanı Altyapısıotomatik olarak birincil anahtar sütunları benzersiz bir dizin oluşturarak veri benzersiz zorlar. Birincil anahtar sorgularda kullanıldığı zaman bu dizin de verilere hızlı erişim verir. Birincil anahtar kısıtlaması birden fazla sütun tanımlanmışsa, değerleri bir sütun içinde çoğaltılamaz olabilir, ama her birincil anahtar kısıtlaması tanımı tüm sütunları alınan değerler bileşiminin benzersiz olması gerekir.

Aşağıdaki resimde görüldüğü gibi ProductID ve VendorID sütun Purchasing.ProductVendor Tablo formu bu tablonun bileşik birincil anahtar kısıtlaması. Bu emin yapar, her satırda ProductVendor tablo benzersiz bir kombinasyonu olan ProductID ve VendorID. Bu yinelenen satırları ekleme önler.

Bileşik BİRİNCİL ANAHTAR kısıtlaması

  • Bir tablo yalnızca bir birincil anahtar kısıtlaması içerebilir.

  • Birincil anahtar, 16 sütun ve toplam anahtar uzunluğu 900 baytı aşamaz.

  • Birincil anahtar kısıtlaması tarafından üretilen dizin sayısını aşan 999 kümelendirilmemiş dizinler tabloyu dizinlerde ve 1 Kümelenmiş dizin neden olamaz.

  • Kümelenmiş veya kümelendirilmemiş birincil için belirtilen Kümelenmiş anahtar kısıtlaması var hayır ise kullanılan tablo kümelenmiş bir dizin.

  • Birincil anahtar kısıtlaması içinde tanımlanan tüm sütunlar null olarak tanımlanmalıdır. Nullability belirtilmezse, tüm sütunlar, birincil anahtar kısıtlaması içinde katılan ayarlamak kendi nullability var null.

  • Birincil anahtar bir clr kullanıcı tanımlı türü sütun tanımlanmışsa, ikili sıralama türü uygulanması desteklemelidir.

FOREIGN Key kısıtlamaları

Yabancı anahtar (fk) bir sütun veya ve zorla iki tablodaki yabancı anahtar tablosunda depolanan verileri denetlemek için veriler arasında bir bağlantı kurmak için kullanılan sütun birleşimi olduğunu. Bir yabancı anahtar başvurusu'nda, başka bir tablodaki sütun veya tarafından başvurulan sütun veya sütunları bir tablo için birincil anahtar değeri tutan iki tablo arasında bir bağlantı oluşturulur. Bu sütun, ikinci tablodaki yabancı anahtar olur.

Örneğin, Sales.SalesOrderHeader tablosu yabancı anahtar bağlantı vardır Sales.SalesPerson satış siparişleri ve satış temsilcileri arasında mantıksal bir ilişki olduğu tablo. SalesPersonID sütununda SalesOrderHeader tabloda eşleşen birincil anahtar sütunu Satış Temsilcisi tablosu. SalesPersonID sütununda SalesOrderHeader tablo için yabancı anahtardır Satış Temsilcisi tablosu. Bu yabancı anahtar ilişkisi, bir değeri oluşturarak SalesPersonID içine eklenemez SalesOrderHeader o zaten içinde yoksa, tablo Satış Temsilcisi tablosu.

Yabancı anahtar sınırlamaları dizinler

Birincil anahtar kısıtlamaları, yabancı anahtar kısıtlaması oluştururken otomatik olarak karşılık gelen bir dizin oluşturmaz. Ancak, el ile bir yabancı anahtar üstünde dizin oluşturma genellikle aşağıdaki nedenlerle yararlıdır:

  • İlişkili tablolardaki verileri, sütun veya sütunlar benzersiz veya birincil anahtar sütunu veya diğer tablodaki sütunları olan bir tablonun yabancı anahtar kısıtlaması eşleştirerek sorgular birleştirildiğinde yabancı anahtar sütunları birleştirme ölçütünde sık kullanılır. Dizin sağlar Veritabanı Altyapısıyabancı anahtar tablosunda ilgili verileri hızla bulmak için. Ancak, bu dizin oluşturmayı gerekli değildir. İki ilişkili tablolardaki verileri bile yok birincil anahtar veya yabancı anahtar kısıtlamaları tablolar arasında tanımlanmış, ancak iki tablo, ölçüt olarak anahtarları kullanan bir sorgu içinde Birleşik olarak optimize edilmiş iki tablo arasında bir yabancı anahtar ilişkisi gösterir birleştirilebilir.

  • Değişiklikler için birincil anahtar kısıtlamaları, ilgili tablodaki yabancı anahtar kısıtlamaları ile denetlenir.

Bilgi Tutarlılığı

Yabancı anahtar kısıtlaması temel amacı yabancı anahtar tablosunda depolanan verileri denetlemek için olsa da, birincil anahtar tablosunda veri değişiklikleri de denetler. Örneğin, bir satış temsilcisi için satır silinir, Sales.SalesPerson tablo ve satıcı kimliği içinde satış siparişleri için kullanılır Sales.SalesOrderHeader tablosu, iki tablo arasındaki ilişkisel bütünlüğü bozuldu; Silinen satış temsilcisinin satış siparişleri de yetim SalesOrderHeader tablo veri bağlantısı olmadan Satış Temsilcisi tablo.

Yabancı anahtar kısıtlaması, bu durum engeller. Yabancı anahtar tablosunda veri bağlantısını bu değişiklikleri geçersiz, birincil anahtar tablosundaki verilerde değişiklik yapılamaz garanti ile tutarlılığı kısıtlamayı zorlar. Birincil anahtar tablosu satır silmek için ya da birincil anahtar değerini değiştirme denemesi yapılır, silinen veya değiştirilen birincil anahtar değerini başka bir tablonun yabancı anahtar kısıtlaması değerine karşılık gelen zaman eylem başarısız olur. Başarılı bir satırda yabancı anahtar kısıtlamasını silmek veya değiştirmek için yabancı anahtar tablosu yabancı anahtar verileri silmek ya da yabancı anahtar farklı birincil anahtar veri bağlantıları yabancı anahtar tablosundaki yabancı anahtar verileri değiştirebilir.

Basamaklı bilgi tutarlılığı

Basamaklı bilgi tutarlılığı kısıtlamaları kullanarak, eylemler tanımlayabilirsiniz, Veritabanı Altyapısıkullanıcı silmeye çalıştığında alır veya update hangi varolan yabancı anahtar keys noktası. Aşağıdaki basamaklı eylemleri tanımlanabilir.

  • EYLEM YOK
    Veritabanı AltyapısıYükseltir ana tablodaki satır bir hata ve delete veya update eylemi geri devirdi.

  • ART ARDA SIRALI
    Buna karşılık gelen satırların updated veya satır güncelleştirildi veya Ana tabloda silindi başvuru tablosunda silinir. Eğer art arda belirtilen bir timestampsütun yabancı anahtar veya başvurulan anahtarı bir parçası olan. on delete cascade delete INSTEAD OF tetikleyici vardır tablo için belirtilemez. on update cascade update INSTEAD OF Tetikleyiciler tabloları için belirtilemez.

  • NULL AYARLAMA
    Üst tablodaki karşılık gelen satır güncelleştirildiğinde veya silindiğinde yabancı anahtarı oluşturan tüm değerlerini null olarak ayarlanır. Bu sınırlama yürütmek yabancı anahtar sütunları NULL olmalıdır. update INSTEAD OF Tetikleyiciler tabloları için belirtilemez.

  • VARSAYILAN OLARAK AYARLA
    Üst tablodaki karşılık gelen satır güncelleştirildiğinde veya silindiğinde, yabancı anahtarı oluşturan tüm değerler varsayılan değerlerine ayarlanır. Bu sınırlama yürütmek default tanımları tüm yabancı anahtar sütunları olması gerekir. Bir sütun NULL olabilecek ve açık varsayılan değeri ayarlanmış yok, sütunun örtük varsayılan değer null olur. update INSTEAD OF Tetikleyiciler tabloları için belirtilemez.

cascade, set null, set default ve eylem yok, birbirleri ile bilgi tutarlılığına ilişkisi olan tablolar birleştirilebilir. Eğer Veritabanı AltyapısıEylem yok, karşılaştığında durur ve ilgili cascade, set null ve set default eylemleri geri alır. set null ve set default eylemleri bir arada cascade, set null, set default ve eylem eylemler, cascade delete deyimi neden olduğunda önce uygulanan Veritabanı Altyapısıkontrol için herhangi bir eylem yok.

Tetikleyiciler ve geçişli başvurusal eylemleri

Geçişli başvurusal eylemleri, aşağıdaki şekilde için güncelleştirmeyi veya sonra delete Tetikleyiciler ateşlenmesine:

  • Doğrudan özgün delete veya update kaynaklanan tüm geçişli başvurusal eylemleri ilk kez yapılmaktadır.

  • Eğer varsa etkilenen tabloları üzerinde tanımlı Tetikleyiciler sonra sonuçta basamaklı eylemleri bu Tetikleyicileri ateş yapılma. Bu Tetikleyicileri geçişli eylem ters sırada yangın. Tek bir tabloda birden çok tetikleyici varsa, onlar adanmış ilk veya son tetikleyici tablo olmadıkça rasgele sırada yangın. Bu sırada olduğu gibi kullanarak belirtilen sp_settriggerorder.

  • Birden çok geçişli Zincirli bir update veya delete eylem doğrudan hedef olarak tablosudur, in which these chains kendi ilgili Tetikleyiciler ateşlenmesine belirtilmeyen sırasıdır. Ancak, bir zincir, her zaman başka bir zincir ateş başlamadan önce tüm tetikleyiciler patlar.

  • SONRA tetikleyici bir update veya delete eylem doğrudan hedef tablo olup tüm satırları etkilenen bakılmaksızın patlar. Bu durumda basamaklı tarafından etkilenen diğer tablolar vardır.

  • Önceki Tetikleyiciler herhangi birini gerçekleştirdiğinizde diğer tablolar, bu eylemleri can güncelleştirme veya silme işlemlerini ikincil basamaklı zincirleri başlatın. Her güncelleştirme için bu ikincil zincirleri işlenir veya silme işlemi bir kerede tüm sonra tüm birincil zincirleri ateşe tetikler. Bu işlem, sonraki güncelleştirme veya silme işlemleri için yinelenen yinelemeli olabilir.

  • OLUŞTURMA, değiştirme, silme veya diğer veri tanım dili (ddl) işlemlerini tetikleyici içinde gerçekleştirme ddl Tetikleyiciler ateşlenmesine neden olabilir. Bu sonradan ek basamaklı zincirleri ve Tetikleyiciler delete veya update işlemleri gerçekleştirebilir.

  • Herhangi bir belirli basamaklı bilgi tutarlılığına eylem zinciri içinde bir hata oluşturulur, bir hata oluşturulur, hiçbir sonra Tetikleyiciler bu zinciri ve silmek ateş veya zincir oluşturan güncelleştirme işlemi geri alınır.

  • INSTEAD of tetikleyici olan bir tabloda ayrıca geçişli eylemi belirtir bir başvuru yan tümcesi olamaz. Ancak, sonra tetikleyici geçişli eylem tarafından hedeflenen bir tabloyu başka bir tablo veya görünüm, nesne üzerinde tanımlı INSTEAD of tetikleyici harekete bir INSERT, update veya delete deyimi yürütebilirsiniz.

ilişkili Görevler

Aşağıdaki tabloda birincil anahtar ve yabancı anahtar kısıtlamaları ile ilgili ortak görevler listelenmektedir.

Görev

Konu

Birincil anahtar oluşturmak nasıl açıklar.

Birincil anahtarları oluştur

Birincil anahtar silme açıklar.

Birincil anahtarları silin

Birincil anahtarı değiştirmek nasıl açıklar.

Birincil anahtar değiştirme

Yabancı anahtar ilişkileri oluşturma açıklanmaktadır

Yabancı anahtar ilişkileri oluşturma

Yabancı anahtar ilişkileri değiştirmek nasıl açıklar.

Yabancı anahtar ilişkileri değiştirme

Yabancı anahtar ilişkileri silmek nasıl açıklar.

Yabancı anahtar ilişkileri Sil

Yabancı anahtar özelliklerini açıklar.

Görünüm yabancı anahtar özellikler

Çoğaltma için yabancı anahtar kısıtlamalarını devre dışı bırakmayı açıklar.

Çoğaltma için yabancı anahtar kısıtlamalarını devre dışı bırakma

Bir INSERT veya update deyimi sırasında yabancı anahtar kısıtlamalarını devre dışı bırakmayı açıklar.

Yabancı anahtar sınırlamaları INSERT ve update deyimiyle devre dışı bırakma