Ekinlikler
31 Mar 23 - 2 Nis 23
En büyük SQL, Fabric ve Power BI öğrenme etkinliği. 31 Mart – 2 Nisan. 400 ABD doları tasarruf etmek için FABINSIDER kodunu kullanın.
Bugün kaydolunBu tarayıcı artık desteklenmiyor.
En son özelliklerden, güvenlik güncelleştirmelerinden ve teknik destekten faydalanmak için Microsoft Edge’e yükseltin.
Ş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ği
SQL veritabanı
Birincil anahtarlar ve yabancı anahtarlar, SQL Server tablolarında veri bütünlüğünü zorlamak için kullanılabilecek iki tür kısıtlamadır. Bunlar önemli veritabanı nesneleridir.
Tablo genellikle tablodaki her satırı benzersiz olarak tanımlayan değerler içeren bir sütuna veya sütun bileşimine sahiptir. Bu sütun veya sütunlar, tablonun birincil anahtarı (PK) olarak adlandırılır ve tablonun varlık bütünlüğünü zorlar. Birincil anahtar kısıtlamaları benzersiz verileri garanti ettiğinden, bunlar sıklıkla bir kimlik sütununda tanımlanır.
Bir tablo için birincil anahtar kısıtlaması belirttiğinizde, Veritabanı Altyapısı birincil anahtar sütunları için otomatik olarak benzersiz bir dizin oluşturarak veri benzersizliğini zorlar. Bu dizin, sorgularda birincil anahtar kullanıldığında verilere hızlı erişime de izin verir. Birincil anahtar kısıtlaması birden fazla sütunda tanımlanmışsa, değerler bir sütun içinde çoğaltılabilir, ancak birincil anahtar kısıtlama tanımındaki tüm sütunlardaki değerlerin her birleşimi benzersiz olmalıdır.
Aşağıdaki çizimde gösterildiği gibi, Purchasing.ProductVendor
tablosundaki ProductID
ve VendorID
sütunları bu tablo için bileşik birincil anahtar kısıtlaması oluşturur. Bu, ProductVendor
tablosundaki her satırın benzersiz bir ProductID
ve VendorID
birleşimine sahip olmasını sağlar. Bu, yinelenen satırların eklenmesini engeller.
Yabancı anahtar (FK), yabancı anahtar tablosunda depolanabilecek verileri denetlemek üzere iki tablodaki veriler arasında bağlantı kurmak ve zorlamak için kullanılan bir sütun veya sütun birleşimidir. Yabancı anahtar başvurusunda, bir tablonun birincil anahtar değerini tutan sütuna veya sütunlara başka bir tablodaki sütun veya sütunlar tarafından başvurulduğunda, iki tablo arasında bir bağlantı oluşturulur. Bu sütun ikinci tabloda yabancı anahtara dönüşür.
Örneğin, Sales.SalesOrderHeader
tablosunun Sales.SalesPerson
tablosuna yabancı anahtar bağlantısı vardır çünkü satış siparişleri ile satış temsilcileri arasında mantıksal bir ilişki bulunmaktadır.
SalesOrderHeader
tablosundaki SalesPersonID
sütunu, SalesPerson
tablosunun birincil anahtar sütunuyla eşleşir.
SalesOrderHeader
tablosundaki SalesPersonID
sütunu, SalesPerson
tablosunun yabancı anahtarıdır. Bu yabancı anahtar ilişkisi oluşturduğunuzda, SalesPersonID
değeri SalesPerson
tablosunda yoksa SalesOrderHeader
tablosuna eklenemez.
Tablo, yabancı anahtarlar olarak en fazla 253 tablo ve sütunu referans alabilir. SQL Server 2016 (13.x), tek bir tablodaki (gelen başvurular) sütunlara başvurabilen diğer tablo ve sütunların sayısını 253'ten 10.000'e yükseltir. (En az 130 uyumluluk düzeyi gerektirir.) Artış aşağıdaki kısıtlamalara sahiptir:
Yalnızca DELETE
DML işlemleri için 253'ten fazla yabancı anahtar başvurusu desteklenir.
UPDATE
ve 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, bellek için iyileştirilmiş tablolar, Stretch Database veya bölümlenmiş yabancı anahtar tabloları için 253'ten fazla yabancı anahtar referansı mevcut değildir.
Önemli
Stretch Database, SQL Server 2022 (16.x) ve Azure SQL Veritabanı'nda kullanım dışıdır. Bu özellik, Veritabanı Altyapısı'nın gelecekteki bir sürümünde kaldırılacaktır. Bu özelliği yeni geliştirme çalışmalarında kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın.
Birincil anahtar kısıtlamalarından farklı olarak, yabancı anahtar kısıtlaması oluşturmak otomatik olarak karşılık gelen bir dizin oluşturmaz. Ancak, yabancı anahtar üzerinde el ile dizin oluşturmak genellikle aşağıdaki nedenlerle yararlıdır:
Yabancı anahtar sütunları, bir tablonun yabancı anahtar kısıtlamasında yer alan sütun veya sütunları diğer tablodaki birincil veya benzersiz anahtar sütunu veya sütunlarıyla eşleştirerek ilişkili tablolardaki veriler sorgularda birleştirildiğinde birleştirme ölçütlerinde sıklıkla kullanılır. Dizin, Veritabanı Altyapısı'nın yabancı anahtar tablosundaki ilgili verileri hızla bulmasını sağlar. Ancak, bu dizini oluşturmak gerekli değildir. Tablolar arasında birincil anahtar veya yabancı anahtar kısıtlamaları tanımlanmasa bile iki ilişkili tablodaki veriler birleştirilebilir, ancak iki tablo arasındaki yabancı anahtar ilişkisi, iki tablonun ölçüt olarak anahtarları kullanan bir sorguda birleştirilecek şekilde iyileştirildiğini gösterir.
Birincil anahtar kısıtlamalarındaki değişiklikler, ilgili tablolardaki yabancı anahtar kısıtlamalarıyla denetleniyor.
Yabancı anahtar kısıtlamasının temel amacı yabancı anahtar tablosunda depolanabilecek verileri denetlemek olsa da, birincil anahtar tablosundaki verilerde yapılan değişiklikleri de denetler. Örneğin, bir satış temsilcisinin satırı Sales.SalesPerson
tablosundan silinirse ve Sales.SalesOrderHeader
tablosundaki satış siparişleri için satış temsilcisinin kimliği kullanılırsa, iki tablo arasındaki ilişkisel bütünlük bozulur; Silinen satış temsilcisinin satış siparişleri, SalesPerson
tablosundaki verilere bağlantı olmadan SalesOrderHeader
tablosunda yalnız bırakılır.
Yabancı anahtar kısıtlaması bu durumu engeller. Kısıtlama, yabancı anahtar tablosundaki verilere bağlantıyı geçersiz kılması durumunda birincil anahtar tablosundaki verilerde değişiklik yapılamadığını garanti ederek bilgi tutarlılığını zorunlu tutar. Birincil anahtar tablosundaki satırı silmeye veya birincil anahtar değerini değiştirmeye çalışılırsa, silinen veya değiştirilen birincil anahtar değeri başka bir tablonun yabancı anahtar kısıtlamasında bir değere karşılık geldiğinde eylem başarısız olur. Yabancı anahtar kısıtlamasında bir satırı başarıyla değiştirmek veya silmek için, önce yabancı anahtar tablosundaki yabancı anahtar verilerini silmeniz veya yabancı anahtarı farklı birincil anahtar verilerine bağlayan yabancı anahtar tablosundaki yabancı anahtar verilerini değiştirmeniz gerekir.
Basamaklı bilgi tutarlılığı kısıtlamalarını kullanarak, kullanıcı mevcut yabancı anahtarların işaret ettiği bir anahtarı silmeye veya güncelleştirmeye çalıştığında Veritabanı Altyapısı'nın gerçekleştireceği eylemleri tanımlayabilirsiniz. Aşağıdaki basamaklı eylemler tanımlanabilir.
NO ACTION
Veritabanı Motoru bir hata oluşturur ve ana tablodaki satırdaki silme veya güncelleştirme işlemi geri alınır.
CASCADE
İlgili satır üst tabloda güncelleştirildiğinde veya silindiğinde başvuru tablosunda karşılık gelen satırlar güncelleştirilir veya silinir.
zaman damgası sütunu yabancı anahtarın veya başvuruda bulunulan anahtarın parçasıysa CASCADE
belirtilmemelidir.
ON DELETE CASCADE
INSTEAD OF DELETE
tetikleyicisi olan bir tablo için belirtilemiyor.
INSTEAD OF UPDATE
tetikleyicileri olan tablolar için ON UPDATE CASCADE
belirtilemiyor.
SET NULL
Üst tablodaki karşılık gelen satır güncelleştirildiğinde veya silindiğinde yabancı anahtarı oluşturan tüm değerler NULL
olarak ayarlanır. Bu kısıtlamanın yürütülmesi için yabancı anahtar sütunlarının null atanabilir olması gerekir.
INSTEAD OF UPDATE
tetikleyicileri olan tablolar için belirtilemiyor.
SET DEFAULT
Üst tablodaki karşılık gelen satır güncelleştirilir veya silinirse, yabancı anahtarı oluşturan tüm değerler varsayılan değerlerine ayarlanır. Bu kısıtlamanın yürütülmesi için tüm yabancı anahtar sütunlarının varsayılan tanımları olmalıdır. Bir sütun null olabilir ve belirli bir varsayılan değer belirtilmemişse, NULL
otomatik olarak sütunun varsayılan değeri olur.
INSTEAD OF UPDATE
tetikleyicileri olan tablolar için belirtilemiyor.
CASCADE
, SET NULL
, SET DEFAULT
ve NO ACTION
, birbiriyle bilgi ilişkileri olan tablolarda birleştirilebilir. Veritabanı Altyapısı NO ACTION
ile karşılaşırsa, ilgili CASCADE
, SET NULL
ve SET DEFAULT
eylemlerini durdurur ve geri alır.
DELETE
deyimi CASCADE
, SET NULL
, SET DEFAULT
veya NO ACTION
eylemlerinin birleşimine neden olduğunda, Veritabanı Altyapısı herhangi bir NO ACTION
kontrol etmeden önce tüm CASCADE
, SET NULL
ve SET DEFAULT
eylemleri uygulanır.
Basamaklı bilgi eylemleri, AFTER UPDATE
veya AFTER DELETE
tetikleyicilerini aşağıdaki şekilde tetikler:
Özgün DELETE
veya UPDATE
nedeniyle doğrudan tüm basamaklı başvuru eylemleri önce gerçekleştirilir.
Etkilenen tablolarda tanımlanmış AFTER
tetikleyicileri varsa, tüm basamaklı eylemler gerçekleştirildikten sonra bu tetikleyiciler tetiklenir. Bu tetikleyiciler, basamaklı eylemlerin gerçekleşme sırasının tersine çalışır. Tek bir tabloda birden çok tetikleyici varsa, tablo için ayrılmış bir ilk veya son tetikleyici olmadığı sürece rastgele sırayla tetiklenir. Bu sipariş, sp_settriggerorderkullanılarak belirtildiği gibidir.
Birden çok ardışık zincir, bir UPDATE
veya DELETE
eyleminin doğrudan hedefi olan tablodan geliyorsa, bu zincirlerin ilgili tetikleyicilerini tetikleme sıralaması belirtilmez. Ancak bir zincir, başka bir zincir ateş etmeye başlamadan önce her zaman tüm tetikleyicilerini tetikler.
Bir UPDATE
veya DELETE
eyleminin doğrudan hedefi olan tablodaki bir AFTER
tetikleyicisi, herhangi bir satırın etkilenip etkilenmediğine bakılmaksızın tetiklenir. Bu durumda basamaklamadan etkilenen başka tablo yoktur.
Önceki tetikleyicilerden herhangi biri diğer tablolarda UPDATE
veya DELETE
işlemleri gerçekleştiriyorsa, bu eylemler ikincil basamaklı zincirleri başlatabilir. Bu ikincil zincirler, tüm birincil zincirlerdeki tüm tetikleyiciler tetiklendikten sonra her UPDATE
veya DELETE
işlemi için bir kerede işlenir. Bu işlem sonraki UPDATE
veya DELETE
işlemleri için yinelemeli olarak yinelenebilir.
Tetikleyicilerde CREATE
, ALTER
, DELETE
veya diğer veri tanımlama dili (DDL) işlemlerinin gerçekleştirilmesi, DDL tetikleyicilerini tetikleyebilir. Bu işlem daha sonra ek basamaklı zincirler ve tetikleyiciler başlatan DELETE veya UPDATE işlemleri gerçekleştirebilir.
Belirli bir basamaklı bilgi işlem zincirinde hata oluşturulursa, bir hata oluşur, bu zincirde AFTER
tetikleyici tetiklenmez ve zinciri oluşturan DELETE veya UPDATE işlemi geri alınır.
INSTEAD OF
tetikleyicisi olan bir tablo, basamaklı eylemi belirten bir REFERENCES
yan tümcesine de sahip olamaz. Ancak, basamaklı eylem tarafından hedeflenen bir tablodaki AFTER
tetikleyicisi, başka bir tabloda INSERT
, UPDATE
veya DELETE
deyimi yürütebilir ya da bu nesnede tanımlanan bir INSTEAD OF
tetikleyicisini tetikleyen görünümü görüntüleyebilir.
Ekinlikler
31 Mar 23 - 2 Nis 23
En büyük SQL, Fabric ve Power BI öğrenme etkinliği. 31 Mart – 2 Nisan. 400 ABD doları tasarruf etmek için FABINSIDER kodunu kullanın.
Bugün kaydolunEğitim
Modül
Azure Data Studio ile Azure SQL Veritabanı'nda Performanslı Veri Modeli Tasarlama - Training
Azure Data Studio ile veri modeli, tablolar, dizinler, kısıtlamalar oluşturmayı ve veri türlerini kullanmayı öğrenin.
Belgeler
Yabancı anahtar ilişkileri oluşturma - SQL Server
SQL Server Management Studio veya Transact-SQL kullanarak SQL Server'da yabancı anahtar ilişkileri oluşturun.
SQL Server'da birincil anahtarlar oluşturma - SQL Server
SQL Server Management Studio veya Transact-SQL kullanarak SQL Server Veritabanı Altyapısı'nda birincil anahtar tanımlayın.
Birincil Anahtarları Sil - SQL Server
SQL Server Veritabanı Altyapısı'ndaki bir tablodan birincil anahtarı silme hakkında daha fazla bilgi edinin.