7 Ekim 2010 Perşembe

Primary Key & Foreign Key

Primary Key benzersiz bir tablodaki her satırı tanımlamak için kullanılır.Birincil anahtar, bir tablo üzerinde bir veya birden çok alan ile oluşabilir. Birden fazla alanı birincil anahtar olarak oluşturulduğunda buna Composite key (birleşik anahtar) denir.Birincil anahtar kısıtlayıcısınıı neredeyse her tabloda kullanırız. Bu bize hız kazandırır. Primary Key olan alanlar Null değerler olamaz ve bu bölüme aynı değerler girilemez. Genel de otomatik olarak artan değerler için geçerlidir.Otomatik artan değerler Identity komutu ile sağlanır. Identity komutundan sonra işlemin kaçtan başayacağı ve kaçar kaçar artacağı belirtilir. Identity(1,3) 1'den başlayacağını ve 3'er 3'er artacağını gösterir bize.

Örneğin; Bir ilçe tablosu oluşturalım ve içerisine IlceAdi, IlAdi,PostaKodu alanlarını ekleyelim. Buraya gireceğimiz verilerde farklı şehirlere ait aynı isimli caddeler olabilir. Yapacağımız sorgularda bu karışıklığı önlemek amacıyla tablomuzdaki IlceAdi ve IlAdi alanlarını birlikte secerek Primary Key olarak işaretliyoruz. Yapılacak sorgularda bu iki alan birlikte kısıtlanmış olarak çalışacaklardır.









Primary Key'i oluşturulmamış bir tabloya sonradan tablo özelliklerinden ya da Alter komutu ile bunu  ekleyebiliriz. Örneğin; Customer adında bir tablo oluşturalım ve CustomerID, FirstName, LastName alanlarını ekleyelim. CustormerID alanına otomatik artma özelliğini verelim. 

CREATE TABLE Customer(
CustomerID int identity(1,1) NOT NULL,
FirstName varchar(50) NOT NULL,
LastName varchar(50) NOT NULL
)

Primary Key eklemeden oluşturmadığımız bu tabloda CustomerID alanını aşağıdaki kod ile Primary Key yapabiliriz.

ALTER TABLE Customer ADD PRIMARY KEY (CustomerID)

Kod olarak oluşturduğumuz bir tabloda, birincil anahtar olmasını istediğimiz alanın yanına Primary Key yazarak o alanın anahtar olan olduğunu belirtebiliriz.


CREATE TABLE Accounts(AccountID int PRIMARY KEY NOT NULL,
             Name varchar(20) NOT NULL,
             [Description] varchar(100) NOT NULL

Ya da el ile oluşturduğumuz tablolarda birincil anahtar olacak alanın yanına sağ tıklayıp Primary Key'i seçerekte bu işlemi yapabiliriz.








Foreign Key bir tabloya girilebilecek değerleri başka bir tablonun bir belli alanında yer alabilecek veri grubu ile sınırlandırmaya ve en önemlisi de ilişkilendirmeye yarar. Bir tabloya foreign key eklediğimizde referans edilen ve referans eden iki tablo arasında bir ilişki kurulur. Bir tablo için foreign key ayarlanmışsa bu tabloya girilecek her kaydın referans edilen tablodaki kayıtla eşleşmesi gerekir. Eğer foreign key olan kolon null değerler alabiliyorsa eşleşmeye bakılmaz.

Kod olarak oluşturacağımız bir Foreign Key'de ilk önce tabloda FK oluşturacağımız alanın adını yazdıktan sonra REFERENCES komutunu yazarız. Bu komuttan sonra ise bağlamak isrtediğimiz tablonun adını ve parantez içinde de bağlayacağımız alanı yazarak oluştururuz.

CREATE TABLE SentMessages
(SentMessageID int NOT NULL PRIMARY KEY,
AccountID int NOT NULL REFERENCES Accounts(AccountID),
MessageID int NOT NULL,
Recipient int NOT NULL REFERENCES Contacts(ContactID)

Oluşturduğumuz tabloda birden çok Foreign Key kullanabilirz. FK olan alanlar, farklı tablolar ile ilişkilendirilmiştir.

FK oluşturduğumuz bir tablodaki bir alanı iki ayrı tabloda birleştirici alan olaarak kullanabiliriz. Mesela yukarıda olan örnekte SentMessages tablosundaki RecipientID alanını FK olarak ayarlayarak Contacts tablosundaki ContactID alanı ile birleştirmişiz. SentMesseges tablosundaki RecipientID alanı ile bir başka tabloda FK oluşturmak istersek ALTER komutunu kullanmamız gerekecek.

ALTER TABLE dbo.SentMessages ADD CONSTRAINT
                         FK_SentMessages_Messages
                         FOREIGN KEY(RecipientID)
                         REFERENCES dbo.Messaages(MessageID)

Yukarıda ki örnekte Alter Table komutundan sonra FK'nın oluşacağı tabloyu yazdıktan sonra yapacağımız işlemi yani FK bir kısıtlayıcı olduğu için Add Constraint diyerek belirttik. FK_SentMessages_Messages ise yapacağımız işin adı olarak belirtildi. Bu koddan sonra ise işin özellikleri yani Foreign Key yazarak SentMessages tablosundaki hangi alan ile bağlayacağimızı belirtip REFERENCES komutundan sonrada Messages tablosunda ki MessageID alanıyla bağlayacağımızı belirttik.

El ile oluşturacağımız Foreign Key'lerde ise oluşturduğumuz tablonun Key alanına sağ tıkladığımızda yeni FK ekle bölümünden yapabiliriz. Burada PK olacak tabloyu ve o tablodaki bağlanacak alan ile FK olacak tablomuzu ve alanını girmemiz gerekir.





4 yorum:

  1. Güzel bir anlatım olmuş. Şu şekilde bir yapıyı nasıl kurabiliriz? Mesela uyeid,kategoriii,icerikid ve yorumid alanlarını en doğru şekilde nasıl birbirine bağlanabilir? Teşekkür ederim.

    YanıtlaSil
  2. Guzel bir anlatım olmus. Teşekkür ler

    YanıtlaSil
  3. faydalı oldu teşekkürler.

    YanıtlaSil
  4. Farkli boyutlardaki iki ayri tablo olusturulduktan sonra FK belirleyebiliyor muyuz? Yoksa kayit sayilari ayni olmak zorunda mi?

    YanıtlaSil