Veritabanındaki birincil anahtar nedir? Veritabanları Yabancı anahtar türleri.

ŞUNLAR İÇİN GEÇERLİDİR: SQL Server (2016'dan itibaren) Temel SQL verileri Azure SQL Veri Ambarı Paralel Veri Ambarı

Birincil anahtarlar ve yabancı anahtarlar, SQL Server tablolarında veri bütünlüğünü sağlamak için kullanılabilecek iki tür kısıtlamadır. Bunlar önemli veritabanı nesneleridir.

Bu konu aşağıdaki bölümlerde ele alınmaktadır.

Birincil Anahtar Kısıtlamaları

Yabancı Anahtar Kısıtlamaları

İlgili görevler

Tipik olarak bir tabloda, tablodaki her satırı benzersiz şekilde tanımlayan değerleri içeren bir sütun veya sütun kombinasyonu bulunur. Bu sütun veya sütunlara tablonun birincil anahtarı (PK) adı verilir ve tablonun varlığına bütünlük sağlanır. Birincil anahtar kısıtlamaları genellikle bir kimlik sütununda tanımlanır çünkü verilerin benzersiz olmasını sağlarlar.

Bir bileşendeki bir tabloya birincil anahtar kısıtlaması ayarladığınızda Veritabanı Motoru, birincil anahtar sütunlarında otomatik olarak benzersiz bir dizin oluşturarak verilerin benzersiz olmasını sağlar. Bu indeks aynı zamanda şunları sağlar: hızlı erişim Sorgularda birincil anahtar kullanıldığında verilere. Birden fazla sütunda birincil anahtar kısıtlaması tanımlanmışsa, değerler aynı sütun içinde çoğaltılabilir ancak birincil anahtar kısıtlaması tanımındaki tüm sütunların değerlerinin her bir kombinasyonu benzersiz olmalıdır.

Aşağıdaki şekilde gösterildiği gibi sütunlar Ürün Kimliği Ve Satıcı Kimliği masada Satınalma.ÜrünSatıcı Belirli bir tablo için bileşik birincil anahtar kısıtlaması oluşturur. Bu, tablodaki her satırın Ürün Satıcısı benzersiz bir anlam birleşimine sahiptir Ürün Kimliği Ve Satıcı Kimliği. Bu, yinelenen satırların eklenmesini engeller.

    Bir tablonun yalnızca bir birincil anahtar kısıtlaması olabilir.

    Birincil anahtar 16'dan fazla sütuna sahip olamaz ve toplam anahtar uzunluğu 900 baytı aşamaz.

    Birincil anahtar kısıtlamasıyla oluşturulan bir dizin, tablodaki dizin sayısının 999 kümelenmemiş dizin ve 1 kümelenmiş dizin sınırını aşmasına neden olamaz.

    Birincil anahtar kısıtlaması, dizinin kümelenmiş mi yoksa kümelenmemiş mi olduğunu belirtmiyorsa, tabloda yoksa kümelenmiş bir dizin oluşturulur.

    Birincil anahtar kısıtlamasına sahip tüm sütunlar null olamaz olarak tanımlanmalıdır. Null yapılabilirlik belirtilmezse, birincil anahtar kısıtlamasına sahip tüm sütunlar null olamaz olarak ayarlanır.

    Birincil anahtar, CLR kullanıcı tanımlı veri türünün bir sütununda tanımlanmışsa, bu türün uygulanmasının ikili sıralamayı desteklemesi gerekir.

Yabancı anahtar (FK), yabancı anahtar tablosunda saklanabilecek verileri kontrol etmek amacıyla iki tablodaki veriler arasındaki ilişkiyi zorlamak için kullanılan bir sütun veya sütun birleşimidir. Bir tablonun birincil anahtarını içeren bir veya daha fazla sütuna başka bir tablonun bir veya daha fazla sütununda başvuruluyorsa, yabancı anahtar bağlantısı iki tablo arasında bir ilişki oluşturur. Bu sütun ikinci tabloda yabancı anahtar haline gelir.

Örneğin, tablo Sales.SalesOrderHeader tabloya bağlı Satış.SatışPersonu satış siparişleri ile satış yöneticileri arasında mantıksal bir ilişki olduğu için yabancı anahtar kullanılması. Kolon Satış Kişisi Kimliği masada Sales.SalesOrderHeader tablodaki birincil anahtar sütunuyla eşleşir Satış Elemanı. Kolon Satış Kişisi Kimliği masada Sales.SalesOrderHeader tablonun yabancı anahtarıdır Satış Elemanı. Bu ilişkinin yabancı anahtar kullanılarak kurulmasıyla değer Satış Kişisi Kimliği tabloya eklenemiyor SatışSiparişiBaşlığı, eğer şu anda tabloda yer almıyorsa Satış Elemanı.

Bir tablonun yabancı anahtar (giden başvurular) olarak başvurabileceği maksimum tablo ve sütun sayısı 253'tür. SQL Server 2016, aynı tablodaki sütunlara (gelen başvurular) başvuruda bulunabilecek diğer tablo ve sütunların sayısındaki sınırı artırır. 253'ten 10.000'e kadar (En az 130 uyumluluk düzeyi gerektirir.) Büyütme aşağıdaki sınırlamalara tabidir:

    253 yabancı anahtar referansının aşılması yalnızca DML DELETE işlemleri için desteklenir. GÜNCELLEME ve BİRLEŞTİRME işlemleri desteklenmez.

    Sütun deposu dizinleri, bellek için optimize edilmiş tablolar, Esnetme veritabanı veya yabancı anahtarla bölümlenmiş tablolar için 253 yabancı anahtar referansını aşmak şu anda mümkün değildir.

Yabancı Anahtar Kısıtlamalarında Endeksler

Birincil anahtar kısıtlamalarından farklı olarak, bir yabancı anahtar kısıtlaması oluşturduğunuzda, buna karşılık gelen bir dizin otomatik olarak oluşturulmaz. Ancak, aşağıdaki nedenlerden dolayı genellikle yabancı anahtar üzerinde manuel olarak bir dizin oluşturmak gerekir:

    İlgili tablolardan veri sorgulamak için birlikte kullanıldığında yabancı anahtar sütunları genellikle birleştirme kriterlerinde kullanılır. Bu, bir tablodaki yabancı anahtar kısıtlamasındaki bir sütun veya sütunların başka bir tablodaki bir veya daha fazla birincil veya benzersiz anahtar sütunla eşleştirilmesiyle uygulanır. Bir dizin, Veritabanı Motorunun yabancı anahtar tablosundaki ilgili verileri hızlı bir şekilde bulmasına olanak tanır. Ancak indeks oluşturmak zorunlu değildir. Tablolar arasında tanımlanan birincil anahtar veya yabancı anahtar kısıtlamaları olmasa bile ilgili iki tablodan gelen veriler birleştirilebilir, ancak iki tablo arasındaki yabancı anahtar ilişkisi, iki tablonun, anahtarları kullanan bir sorguda birlikte kullanılmak üzere optimize edildiğini gösterir. kriter olarak.

    Yabancı anahtar kısıtlamaları, ilgili tablolardaki birincil anahtar kısıtlamalarında yapılan değişiklikleri kontrol eder.

Referans bütünlüğü

Yabancı anahtar kısıtlamasının temel amacı, yabancı anahtar tablosunda saklanabilecek verileri kontrol etmektir, ancak kısıtlama aynı zamanda birincil anahtar tablosundaki verilerde yapılan değişiklikleri de kontrol eder. Örneğin, satış yöneticisi satırını tablodan silerseniz Satış.SatışPersonu Tablodaki satış siparişlerinde kimliği kullanılan Sales.SalesOrderHeader, iki tablonun referans bütünlüğü ihlal edilecektir. Tablodaki uzaktan yönetici satış siparişleri SatışSiparişiBaşlığı tablodaki verilere bağlantı kurulmadığında geçersiz hale gelecektir Satış Elemanı.

Yabancı anahtar kısıtlaması bu durumun oluşmasını engeller. Kısıtlama, bilgi bütünlüğünü şu şekilde zorlar: birincil anahtar tablosundaki verilerde değişiklik yapılması, bu tür değişikliklerin yabancı anahtar tablosundaki bir bağlantıyı geçersiz kılacak olması durumunda engellenir. Birincil anahtar tablosundaki bir satırı silmeye veya o anahtarın değerini değiştirmeye çalışırsanız, silinen veya değiştirilen birincil anahtar değerinin başka bir tablodaki yabancı anahtar kısıtlamasında karşılık gelen bir değere sahip olduğunu tespit ederseniz eylem başarısız olur. Yabancı anahtar kısıtlaması olan bir satırı başarıyla değiştirmek veya silmek için, öncelikle yabancı anahtar tablosundaki yabancı anahtar verilerini silmeniz veya yabancı anahtarı başka bir birincil anahtardaki verilerle ilişkilendiren yabancı anahtar tablosundaki verileri değiştirmeniz gerekir.

Basamaklı referans bütünlüğü

Basamaklı bilgi bütünlüğü kısıtlamalarını kullanarak, bir kullanıcı hala var olan yabancı anahtarların işaret ettiği bir anahtarı silmeye veya güncellemeye çalıştığında Veritabanı Motorunun gerçekleştireceği eylemleri tanımlayabilirsiniz. Aşağıdaki basamaklı eylemler tanımlanabilir.

EYLEM YOK
Veritabanı Motoru bir hata oluşturur ve ardından ana tablodaki satırdaki silme veya güncelleme işlemini geri alır.

KADEMELİ
Karşılık gelen satırlar, eğer ilgili satır ana tablodan güncellenirse veya silinirse, referans tablosundan güncellenir veya silinir. Sütun şu türdeyse CASCADE değeri belirtilemez: zaman damgası yabancı veya referans anahtarının bir parçasıdır. ON DELETE CASCADE eylemi, INSTEAD OF DELETE tetikleyicisinin tanımlanmış olduğu bir tabloda belirtilemez. ON UPDATE CASCADE yan tümcesi, INSTEAD OF UPDATE tetikleyicilerinin tanımlandığı tablolarda belirtilemez.

BOŞ AYARLA
Ana tablodaki ilgili satır güncellendiğinde veya silindiğinde, yabancı anahtarı oluşturan tüm değerler NULL olarak ayarlanır. Bu kısıtlamayı karşılamak için yabancı anahtar sütunlarının null olması gerekir. INSTEAD OF UPDATE tetikleyicilerinin tanımlandığı tablolarda ayarlanamaz.

VARSAYILAN AYARLA
Yabancı anahtarı oluşturan tüm değerler, ana tablodaki ilgili satır silindiğinde veya güncellendiğinde varsayılan değerlerine ayarlanır. Bu kısıtlamayı karşılamak için tüm yabancı anahtar sütunlarının varsayılan tanımlara sahip olması gerekir. Bir sütun null yapılabilirse ve varsayılan değer açıkça tanımlanmamışsa, sütunun varsayılan değeri NULL olur. INSTEAD OF UPDATE tetikleyicilerinin tanımlandığı tablolarda ayarlanamaz.

CASCADE, SET NULL, SET DEFAULT ve NO ACTION anahtar sözcükleri, karşılıklı referans ilişkileri olan tablolarda birleştirilebilir. Veritabanı Motoru NO ACTION anahtar sözcüğüyle karşılaşırsa ilgili CASCADE, SET NULL ve SET DEFAULT işlemlerini durduracak ve geri alacaktır. DELETE ifadesi aşağıdaki kombinasyonu içeriyorsa anahtar kelimeler CASCADE, SET NULL, SET DEFAULT ve NO ACTION, ardından tüm CASCADE, SET NULL ve SET DEFAULT işlemleri, Veritabanı Motoru NO ACTION işlemini aramadan önce gerçekleştirilir.

Tetikleyiciler ve basamaklı referans eylemleri

Basamaklı referans eylemleri, GÜNCELLEME SONRA veya SİLME SONRASI tetikleyicilerini aşağıdaki gibi tetikler:

    Doğrudan orijinal DELETE veya UPDATE deyimlerinin neden olduğu tüm basamaklı referans eylemleri ilk önce yürütülür.

    Değişen tablolarda tanımlanan AFTER tetikleyicileri varsa bu tetikleyiciler, tüm basamaklı eylemler tamamlandıktan sonra tetiklenir. Bunlar, basamaklı eylemlerin tersi sırayla yangını tetikler. Tek bir tablo için birden fazla tetikleyici tanımlanmışsa, tablonun ilk ve son tetikleyicileri seçilmediği sürece bunlar rastgele sırayla tetiklenir. Bu sıra prosedüre göre belirlenir.

    Basamaklı eylem dizileri, bir DELETE veya UPDATE eyleminin doğrudan hedefi olan bir tablodan kaynaklanıyorsa, eylem dizilerinin tetikleyicileri tetikleme sırası belirlenmez. Ancak bir eylem dizisi her zaman tüm tetikleyicilerini bir sonrakinden önce harekete geçirir.

    Bir DELETE veya UPDATE eyleminin doğrudan hedefi olan bir tablodaki AFTER tetikleyicisi, herhangi bir satırın değişip değişmediğine bakılmaksızın tetiklenir. Bu durumda basamaklandırmadan başka hiçbir tablo etkilenmez.

    Önceki tetikleyicilerden biri diğer tablolarda DELETE veya UPDATE işlemlerini gerçekleştirirse, bu işlemler kendi basamaklı eylem dizisini tetikleyebilir. Bu ikincil eylem dizileri, tüm birincil eylem dizisi tetikleyicileri tamamlandıktan sonra her SİLME veya GÜNCELLEME işlemi için işlenir. Bu işlem daha sonraki DELETE veya UPDATE işlemleri için yinelemeli olarak tekrarlanabilir.

    Tetikleyicilerin içinde CREATE, ALTER, DELETE veya diğer DDL işlemlerinin gerçekleştirilmesi DDL tetikleyicilerinin tetiklenmesine neden olabilir. Bu, ek basamaklı eylem dizilerini başlatacak ve tetikleyicilerini tetikleyecek daha fazla DELETE veya UPDATE işlemlerine yol açabilir.

    Basamaklı referans eylemlerinin belirli bir dizisinde bir hata meydana gelirse, bu dizide hiçbir AFTER tetikleyicisi tetiklenmeyecek ve bu dizi tarafından oluşturulan DELETE veya UPDATE işlemleri geri alınacaktır.

    Tanımlanmış bir INSTEAD OF tetikleyicisine sahip bir tablo aynı zamanda belirli bir basamaklı eylemi belirten bir REFERENCES yan tümcesine de sahip olabilir. Ancak basamaklı bir eylemin hedef tablosundaki bir AFTER tetikleyicisi, başka bir tablo veya görünümde bir INSERT, UPDATE veya DELETE ifadesi yayınlayabilir ve bu, söz konusu nesne üzerinde bir INSTEAD OF tetikleyicisini tetikler.

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

Bunlar, bir veya daha fazla bilgisayar kullanılarak erişilen elektronik bilgi depolarıdır. Tipik olarak veritabanları, belirli bir konu alanı, yani insan faaliyetinin bir alanı veya gerçek dünyanın bir kısmı hakkında bilgi içeren verileri depolamak ve bunlara erişmek için oluşturulur.

DBMS: yazılım bir veritabanı oluşturmak, doldurmak, güncellemek ve silmek için.

Veritabanında saklanan bilgi birimi tablodur. Her tablo, satırların bir nesne örneğine, belirli bir olaya veya olguya karşılık geldiği ve sütunların ise nesnenin, olayın veya olgunun niteliklerine (özellikler, karakteristikler, parametreler) karşılık geldiği bir satır ve sütun koleksiyonudur. Her satır belirli bir olayla ilgili bilgileri içerir.

Veritabanı terimlerinde, bir tablonun sütunlarına alan, satırlarına ise kayıt adı verilir.

Bireysel veritabanı tabloları arasında ilişkiler mevcut olabilir, yani önceki tablodaki bilgiler başka bir tabloya eklenebilir. Bireysel tablolar arasında ilişkileri olan veritabanlarına ilişkisel denir. Aynı tablo, bir veritabanı tablosuna göre ana tablo, diğerine göre ise alt tablo olabilir.

İlişkilerle birbirine bağlanan tablolar, efendi-köle ilkesine göre etkileşime girer. Aynı tablo, bir veritabanı tablosunun ana tablosu ve diğerinin çocuğu olabilir.

Nesne – bir dizi özelliğe sahip, mevcut ve ayırt edilebilir bir şeydir. Bir nesne ile başka bir nesne arasındaki fark, belirli özellik değerleri tarafından belirlenir.

Öz – bir nesnenin bir kişinin veya bilgisayarın hafızasına yansıması.

Bağlanmak – varlığın herhangi bir özelliğinin spesifik değeri.

Alan belirli bir nitelik değerini saklayan bir kaydın tek bir öğesidir.

İletişim alanı Bu, iki tablonun ilişkilendirildiği alandır.

Birincil ve ikincil anahtarlar

Her veritabanı tablosunun bir birincil anahtarı olabilir; bu, bir kaydı benzersiz şekilde tanımlayan bir alan veya alanlar topluluğudur.

Bir veritabanı tablosundaki birincil anahtar değeri benzersiz olmalıdır, yani tabloda aynı birincil anahtar değerine sahip iki veya daha fazla kayıt olmamalıdır.

Birincil anahtarlar tablolar arasında ilişki kurmayı kolaylaştırır. Birincil anahtarın benzersiz olması gerektiğinden, tablodaki tüm alanlar onun için kullanılamaz.

Tabloda değerleri benzersiz olan alanlar yoksa, birincil anahtar oluşturmak için, genellikle içine DBMS'nin kendi takdirine bağlı olarak değerlerini elden çıkarabileceği ek bir sayısal alan eklenir.

İkincil anahtarlar, verileri ararken veya sıralarken sıklıkla kullanılan alanlara göre ayarlanır: ikincil anahtarlar üzerine oluşturulan dizinler, sistemin ilgili alanlarda saklanan gerekli değerleri çok daha hızlı bulmasına yardımcı olur.

Birincil anahtarların aksine, ikincil anahtarların alanları benzersiz olmayan bilgiler içerebilir.

Tablolar arasındaki ilişkisel ilişkiler

Bire bir. Bire-bir ilişki, ana tablodaki bir kayıt alt tablodaki bir kayıtla eşleştiğinde ortaya çıkar.

Bu ilişki, bire çok ilişkiden çok daha az yaygındır; veritabanı tablosunun ikincil bir tabloyla şişmesini istemiyorsanız kullanılır. Bire bir ilişki, birden fazla tablodaki ilgili bilgilerin okunmasının birden fazla okuma işlemi gerektirmesi anlamına gelir; bu da gerekli bilgilerin alınmasını yavaşlatır. Ayrıca birebir ilişki içeren tabloların yer aldığı veritabanları tam anlamıyla normalleştirilmiş sayılamaz.

Bire-çok ilişki gibi, bire-bir ilişki de sert ya da yumuşak olabilir.

InterBase aşağıdaki kısıtlama türlerini kullanabilir:
  • PRIMARY KEY – tablonun birincil anahtarı.
  • EŞSİZ - benzersiz tablo anahtarı.
  • YABANCI ANAHTAR- yabancı anahtar, başka bir tabloya bağlantı sağlar ve ana öğe ile ana öğe arasındaki referans bütünlüğünü garanti eder çocuk masaları.

Terminoloji üzerine bir not

Eğer siz de bu kursun yazarı gibi ilginizi çeken bir sorunun yanıtlarını farklı yazarların farklı eserlerinde aramayı seviyorsanız, tanımlardaki bazı karışıklıkları fark etmeden duramazsınız. ana (ana) -> ast (detay) tablolar. Ana tablonun sıklıkla ana tablo, alt tablonun ise alt tablo olarak adlandırıldığını hatırlayın.

Bunun nedeni muhtemelen bu tanımların yerel ve SQL sunucu DBMS'lerinde nasıl yorumlandığından kaynaklanmaktadır.

Yerel DBMS'lerde ana tablo, ana verileri içeren tablodur ve alt tablo, ek verileri içerir. Örneğin birbiriyle ilişkili üç tabloyu ele alalım. Birincisi satışlara ilişkin verileri, ikincisi ürünlere ve üçüncüsü müşterilere ilişkin verileri içerir:


Pirinç. 18.1.

Burada ana bilgiler satış tablosunda saklanır, dolayısıyla ana (ana) tablodur. Ürün ve müşteri tablolarında ek bilgiler saklanır, bu da onların çocuk olduğu anlamına gelir. Bu anlaşılabilir bir durumdur: Bir kızın iki biyolojik annesi olamaz, ancak bir anne iki kız çocuğu doğurma konusunda oldukça yeteneklidir.

Ancak SQL veritabanı sunucularında ilişkilerin farklı bir tanımı vardır: bir tablodaki bir alan başka bir tablodaki bir alana atıfta bulunduğunda buna denir. yabancı anahtar. Ve onun atıfta bulunduğu alana denir ebeveyn veya birincil anahtar. Yabancı anahtarı olan bir tabloya (başka bir tablodaki kayda bağlantı) genellikle alt öğe denir ve bu tabloya ebeveyn anahtarı- ebeveyn. Ayrıca ilişkilerin tanımında, bir ebeveynin yalnızca tek bir benzersiz kayda sahip olabileceği ve bu kayda birden fazla kayıt tarafından başvurulabileceği belirtiliyor. çocuk masası.

Yukarıdaki örnekte satış tablosunun iki yabancı anahtarı vardır: ürün kimliği ve müşteri kimliği. Ve şeklin sağ tarafındaki her iki tablo da ebeveyn anahtarı"Tanımlayıcı". Satış tablosunda aynı müşteri veya ürün tekrar tekrar görünebileceğinden, şeklin sağ tarafındaki her iki tablonun da ebeveyn, soldaki tablonun ise çocuk olduğu ortaya çıkar. Çünkü şu anda ders çalışıyoruz InterBase-SQL veritabanı sunucusu, sonraki derslerde bu tanımlara göre hareket edeceğiz. Bu kafa karışıklığı üzerinde daha fazla kafa yormamak için hemen anlaşalım: çocuk masası başka bir tabloya yabancı anahtar (YABANCI ANAHTAR) sahiptir.

BİRİNCİL ANAHTAR

BİRİNCİL ANAHTAR- Birincil anahtar, bir veritabanındaki ana kısıtlama türlerinden biridir. Birincil anahtar, bir tablodaki kaydı benzersiz şekilde tanımlamak için tasarlanmıştır ve benzersiz olmalıdır. Birincil anahtarlar PRIMARY KEY, genellikle ebeveyn (Ebeveyn) olarak adlandırılan tablolarda bulunur. Birincil anahtar, yerel veritabanlarının birincil dizinleriyle karıştırılmamalıdır; birincil anahtar bir dizin değil, bir kısıtlamadır. Birincil anahtar oluştururken InterBase onun için otomatik olarak oluşturur benzersiz dizin. Ancak eğer yaratırsak benzersiz dizin, bu yaratılmayacak birincil anahtar kısıtlamaları. Bir tablonun yalnızca bir birincil anahtarı olabilir: PRIMARY KEY.

Diyelim ki çalışanların listesini içeren bir masanız var. Soyadı alanı yinelenen değerler (isimler) içerebilir, bu nedenle birincil anahtar olarak kullanılamaz. Nadirdir, ancak aynı isimlere sahip olan adaşlar da vardır. Daha da nadir olarak, tam ad benzerleri vardır, dolayısıyla “Soyadı” + “Ad” + “Patronimik” alanlarının üçü de kaydın benzersizliğini garanti edemez ve birincil anahtar olamaz. Bu durumda çözüm, daha önce olduğu gibi, bu kişinin seri numarasını içeren bir tanımlayıcı alan eklemektir. Bu tür alanlar genellikle otomatik artan hale getirilir (sonraki derslerde otomatik artan alanların düzenlenmesinden bahsedeceğiz). Bu yüzden,

Birincil anahtar kombinasyonu her kayıt için benzersiz olan bir tablodaki bir veya daha fazla alandır.

Birincil anahtar tek bir sütun içeriyorsa (çoğunlukla olduğu gibi), PRIMARY KEY belirtici şu durumlarda kullanılır: sütun tanımı:

CREATE TABLE Prim_1(Stolbec1 INT NULL DEĞİL BİRİNCİL ANAHTAR, Stolbec2 VARCHAR(50))

Birincil anahtar birkaç sütun üzerine kuruluysa, belirtici tüm alanları tanımladıktan sonra yerleştirilir:

CREATE TABLE Prim_2(Stolbec1 INT NULL DEĞİL, Stolbec2 VARCHAR(50) NOT NULL, PRIMARY KEY (Stolbec1, Stolbec2))

Örneklerden de görülebileceği gibi birincil anahtar NOT NULL sütun(lar) kısıtlamasına sahip olmalıdır.

EŞSİZ

EŞSİZ- benzersiz anahtar. UNIQUE belirticisi bu alanın tüm değerlerinin benzersiz olması gerektiğini, dolayısıyla bu tür alanların da değer içeremeyeceğini belirtir; HÜKÜMSÜZ. BENZERSİZ anahtarın birincil anahtara alternatif olduğunu söyleyebilirsiniz, ancak farklılıklar vardır. Temel fark, yalnızca bir birincil anahtarın olması gerekirken birden fazla benzersiz anahtarın olabilmesidir. Ek olarak, bir UNIQUE kısıtlaması, PRIMARY KEY veya başka bir UNIQUE kısıtlaması için kullanılan aynı sütun kümesi üzerine oluşturulamaz. Benzersiz anahtarlar, birincil anahtarlar gibi, diğer tabloların üst öğeleri olan tablolarda bulunur.

Birincil anahtar gibi UNIQUE kısıtlamasıyla bildirilen bir sütun, üst öğesi ile ana öğesi arasında referans bütünlüğünü sağlamak için kullanılabilir. çocuk masaları. Bu durumda yabancı anahtar çocuk masası bu alan(lar)a atıfta bulunacaktır. Birincil anahtarda olduğu gibi, benzersiz bir anahtar oluşturulduğunda benzersiz dizin. Ama tam tersi değil. Bir birincil ve iki benzersiz anahtar içeren bir tablo oluşturma örneği:

CREATE TABLE Prim_3(Stolbec1 INT NOT NULL PRIMARY KEY, Stolbec2 VARCHAR(50) NOT NULL UNIQUE, Stolbec3 FLOAT NOT NULL UNIQUE)

YABANCI ANAHTAR

YABANCI ANAHTAR- yabancı anahtar. Bu, tablolar arasında referans bütünlüğünü sağlamak için çok güçlü bir araçtır; bu, yalnızca doğru bağlantıların varlığını izlemenize değil aynı zamanda bunları otomatik olarak yönetmenize de olanak tanır. Yabancı anahtarlar, diğer tabloların çocukları (Çocuk) olan tablolarda bulunur. Referans bütünlüğü tam olarak birincil veya anahtara atıfta bulunan bir yabancı anahtar tarafından sağlanır.

Son güncelleme: 07/02/2017

Veritabanları birbiriyle ilişkili tablolar içerebilir çeşitli bağlantılar. Bir ilişki, farklı türdeki varlıklar arasındaki ilişkiyi temsil eder.

Bir ilişki seçerken, bir birincil veya üst tablo (birincil anahtar tablo / ana tablo) ve bağımlı bir alt tablo (yabancı anahtar tablo / alt tablo) seçilir. Alt tablo ana tabloya bağlıdır.

Yabancı anahtarlar iletişimi düzenlemek için kullanılır. Yabancı anahtar, bir tablodaki, aynı zamanda başka bir tablodaki potansiyel anahtar olan bir veya daha fazla sütunu temsil eder. Yabancı anahtarın ana tablodaki birincil anahtarla eşleşmesi gerekmez. Ancak kural olarak bağımlı tablodaki yabancı anahtar, ana tablodaki birincil anahtara işaret eder.

Tablolar arasındaki ilişkiler aşağıdaki türlerdedir:

    Bire bir

    Bire çok

    çoktan çoğuna(Çoktan çoğa)

Bire bir iletişim

Bu tür bir bağlantıya sıklıkla rastlanmaz. Bu durumda bir varlığın nesnesi başka bir varlığın yalnızca bir nesnesiyle ilişkilendirilebilir. Örneğin bazı sitelerde bir kullanıcının yalnızca bir blogu olabilir. Yani bir ilişki ortaya çıkıyor: bir kullanıcı - bir blog.

Genellikle bu tür bir ilişki, büyük bir tablonun birkaç küçük tabloya bölünmesini içerir. Bu durumda birincil ana tablo sık kullanılan verileri içermeye devam ederken, alt bağımlı tablo genellikle daha az kullanılan verileri depolar.

Bu bakımdan bağımlı tablonun birincil anahtarı aynı zamanda ana tablonun birincil anahtarına referans veren bir yabancı anahtardır.

Örneğin, Kullanıcılar tablosu kullanıcıları temsil eder ve aşağıdaki sütunları içerir:

    Kullanıcı Kimliği(kimlik, birincil anahtar)

    Ad (kullanıcı adı)

Bloglar tablosu da kullanıcı bloglarını temsil eder ve aşağıdaki sütunları içerir:

    BlogId (tanımlayıcı, birincil ve yabancı anahtar)

    Ad (blog adı)

Bu durumda BlogId sütunu, kullanıcılar tablosundaki UserId sütunundaki değeri depolayacaktır. Yani BlogId sütunu hem birincil hem de yabancı anahtar görevi görecektir.

Bire birçok ilişki

Bu en yaygın bağlantı türüdür. Bu tür bir ilişkide, bir alt tablodaki birden çok satır, üst tablodaki tek bir satıra bağlıdır. Örneğin bir blogda birden fazla makale bulunabilir. Bu durumda bloglar tablosu üst öğe, makaleler tablosu ise alt tablodur. Yani, bir blog - birçok makale. Veya başka bir örnek, bir futbol takımında birden fazla futbolcu oynayabilir. Aynı zamanda bir futbolcu aynı anda yalnızca bir takımda oynayabilir. Yani bir takım - birçok oyuncu.

Örneğin, blog makalelerini temsil eden ve aşağıdaki sütunları içeren Makaleler adında bir tablomuz olsun:

    ArticleId(kimlik, birincil anahtar)

    Blog Kimliği (yabancı anahtar)

    Başlık (makale başlığı)

    Metin (makale metni)

Bu durumda, makaleler tablosundaki BlogId sütunu, bloglar tablosundaki BlogId sütunundaki değeri depolayacaktır.

Çoka çok ilişki

Bu tür bir ilişkiyle, A tablosundaki bir satır, B tablosundaki birçok satırla ilişkilendirilebilir. Buna karşılık, B tablosundaki bir satır, A tablosundaki birçok satırla ilişkilendirilebilir. Tipik örnek- öğrenciler ve kurslar: Bir öğrenci birden fazla kursa katılabilir ve buna göre birden fazla öğrenci bir kursa kayıt olabilir.

Diğer bir örnek ise makaleler ve etiketlerdir: bir makale için birden fazla etiket tanımlanabilir ve birden fazla makale için bir etiket tanımlanabilir.

Ancak SQL Server'da veritabanı düzeyinde iki tablo arasında doğrudan çoktan çoğa ilişki kuramayız. Bu, yardımcı bir evreleme masası aracılığıyla yapılır. Bazen bu hazırlama tablosundaki veriler ayrı bir varlığı temsil eder.

Örneğin, makaleler ve etiketler söz konusu olduğunda, iki sütunu olan bir Etiketler tablosu olsun:

    TagId(tanımlayıcı, birincil anahtar)

    Metin (etiket metni)

Ayrıca aşağıdaki alanları içeren bir ara tablo ArticleTags olsun:

    TagId (tanımlayıcı, birincil ve yabancı anahtar)

    ArticleIdId (tanımlayıcı, birincil ve yabancı anahtar)

Teknik olarak iki bire-çok ilişki elde edeceğiz. ArticleTags tablosundaki TagId sütunu, Etiketler tablosundaki TagId sütununa referans verecektir. Ve ArticleTags tablosundaki ArticleId sütunu, Articles tablosundaki ArticleId sütununa atıfta bulunacaktır. Yani, ArticleTags tablosundaki TagId ve ArticleId sütunları bileşik bir birincil anahtarı temsil eder ve ayrıca Makaleler ve Etiketler tablolarıyla olan ilişkinin yabancı anahtarlarıdır.

Referans veri bütünlüğü

Birincil ve yabancı anahtarları değiştirirken aşağıdaki hususa dikkat edilmelidir: referans veri bütünlüğü(referans bütünlüğü). Temel fikri, tutarlılığı korumak için aynı verileri depolayan bir veritabanındaki iki tablodur. Veri bütünlüğü, tablolar arasında doğru şekilde oluşturulmuş ilişkileri ve aralarında doğru bağlantıları temsil eder. Hangi durumlarda veri bütünlüğü ihlal edilebilir:

    Silme anomalisi(silme anomalisi). Ana tablodan bir satır silindiğinde gerçekleşir. Bu durumda bağımlı tablodaki yabancı anahtar, ana tablodan silinen satıra referans vermeye devam eder.

    Ekleme Anomalisi(yerleştirme anomalisi). Bağımlı bir tabloya bir satır eklendiğinde gerçekleşir. Bu durumda bağımlı tablodaki yabancı anahtar, ana tablodaki herhangi bir satırın birincil anahtarıyla eşleşmez.

    Anormallikleri güncelle(güncelleme anormalliği). Böyle bir anormallik ile aynı tablonun birkaç satırı aynı nesneye ait verileri içerebilir. Bir satırdaki verileri değiştirdiğinizde başka bir satırdaki verilerle çakışma yaşanabilir.

Silme anomalisi

Silme anormalliğini çözmek için yabancı anahtar üzerinde iki kısıtlamadan birini ayarlamanız gerekir:

    Bağımlı bir tablodaki bir satırın mutlaka ana tablodan bir satır gerektirmesi durumunda, yabancı anahtar için kademeli silme ayarlanır. Yani, ana tablodan bir satır silindiğinde, ilgili satır(lar) bağımlı tablodan da silinir.

    Bağımlı tablodaki bir satır, ana tablodaki satırla ilişkiye izin vermiyorsa (yani böyle bir ilişki isteğe bağlıdır), ilgili satır ana tablodan silindiğinde yabancı anahtar NULL olarak ayarlanır. Yabancı anahtar sütunu null olmalıdır.

Ekleme Anomalisi

Bağımlı bir tabloya veri eklerken oluşan ekleme anormalliğini çözmek için yabancı anahtarı temsil eden sütunun null olması gerekir. Ve böylece eklenen nesnenin ana tabloyla bağlantısı yoksa yabancı anahtar sütunu NULL değerini içerecektir.

Anormallikleri Güncelle

Güncelleme anormalliği problemini çözmek için daha sonra tartışılacak olan normalizasyon kullanılır.

Yabancı Anahtar, iki tabloyu birleştirmek için kullanılan bir anahtardır. Bazen referans anahtarı olarak da adlandırılır.

Yabancı anahtar, değerleri başka bir tablodaki birincil anahtara karşılık gelen bir sütun veya sütunların birleşimidir.

2 tablo arasındaki ilişki, tablolardan birindeki birincil anahtara, ikinci tablodaki yabancı anahtara karşılık gelir.

Bir tablonun herhangi bir alanda tanımlanmış bir birincil anahtarı varsa, o alan(lar) için aynı değere sahip iki kayda sahip olamazsınız.

Örnek

Aşağıdaki iki tablonun yapısına bakalım.

MÜŞTERİLER tablosu

MÜŞTERİ TABLOSU OLUŞTURUN(ID INT NULL DEĞİL, İSİM VARCHAR (20) NULL DEĞİL, AGE INT NULL DEĞİL, ADRES CHAR (25) , MAAŞ ONDALIK (18, 2), BİRİNCİL ANAHTAR (ID));

SİPARİŞLER tablosu

TABLO SİPARİŞLERİ OLUŞTURUN (ID INT NOT NULL, DATE DATETIME, CUSTOMER_ID INT, CUSTOMERS(ID), AMOUNT double, PRIMARY KEY (ID) referansına sahiptir);

ORDERS tablosu zaten oluşturulmuşsa ve yabancı anahtar henüz ayarlanmamışsa, sözdizimi, tabloyu değiştirerek yabancı anahtarı ayarlamak için kullanılır.

TABLO SİPARİŞLERİNİ DEĞİŞTİRİN YABANCI ANAHTAR (Müşteri_ID) REFERANS MÜŞTERİLERİ (ID) EKLE;

Yabancı Anahtar Kısıtlamasını Kaldırma

Yabancı anahtar kısıtlamasını kaldırmak için aşağıdaki SQL sözdizimini kullanın.

TABLO SİPARİŞLERİNİ DEĞİŞTİRİN, YABANCI ANAHTARI BIRAKIN;