Anasayfa / Yazılım / SQL / Tablolara Primary Key Ekleme

Tablolara Primary Key Ekleme

Primary Key ile veritabanımızdaki tablolarda, primary key atanmış olan sütun (kolon) ile birlikte eşsiz şekilde verilere sahip satırlar oluşturabiliriz. Şöyle basit şekilde açıklayayım, kişiler tablonuz mevcut, oldukça da uzun bi liste. Aynı ad ve soyada sahip kişilerde var hatta. Bunu en basit şekilde ayırabilmek için ne kullanırız, TC kimlik No, aynı TC kimlik no asla bir başkasında yoktur. İşteri veritabanında mevcut tablolarımızda da primary key tanımlayarak eşsiz veriler oluşturabiliriz. Bir primary key aşağıdaki özelliklere sahiptir:

 

  • Bir tablo sadece bir primary key içerebilir.
  • Primary Key özelliğine sahip kolon eşsiz veriler içerir.
  • Bir tabloda sadece bir primary key bulunur ama bununla birlikte tabloda birden fazla kolon için bileşik anahtar yani composite key oluşturulabilir.
  • Eğer primary key bir composite key yani bileşik anahtar ise, tüm değerlerin kombinasyonu unique yani eşsiz olmalıdır.
  • Primary Key olarak tanımlanmış bir kolon asla NULL değer içeremez.

Tablolarımızda her ne olursa olsun mutlaka Primary Key kullanmak çok büyük avantajımıza olacaktır. Bizleri hata yapmaktan kurtaracak önemli bir detaydır. Şimdi bir tablo oluşturma esnasında ya da tablonun değiştirilmesi esnasında tabloya nasıl primary key eklenir (kod yöntemi ile) bunu göstermek istiyorum.

CREATE TABLE  (  NOT NULL PRIMARY KEY
[CLUSTERED|NONCLUSTERED]  )

Burada tek bir kolona ekledim. Şimdi de bileşik bir primary key ekleyelim.

CREATE TABLE (  NOT NULL,
  NOT NULL,  ,
CONSTRAINT  PRIMARY KEY [CLUSTERED|NONCLUSTERED]
(,)
)

Şimdi de ALTER ile kullanalım.

CREATE TABLE (  NOT NULL,
 )
ALTER TABLE  ADD CONSTRAINT 
PRIMARY KEY [CLUSTERED|NONCLUSTERED] ()

Şimdi örnek olarak AdventureWorks2012 veri tabanı üzerindeki bir tabloya bakalım. HumanResources.Department incelediğimiz de bir primary key mevcut.

2014051903

Burada otomatik bir şekilde PK_Department_DepartmentID oluşturulmuş.

Şimdi SQL’de kod ile Primary Key nasıl eklenir biraz daha örnek yapalım. Öncelikle var ise mevcut tabloları sileceğim. tempdb kullanıyorum.

USE tempdb;
GO
IF OBJECT_ID('tablo1') IS NOT NULL BEGIN
DROP TABLE tablo1;
END;
IF OBJECT_ID('tablo2') IS NOT NULL BEGIN
DROP TABLE tablo2;
END;
IF OBJECT_ID('tablo3') IS NOT NULL BEGIN
DROP TABLE tablo3;
END;
CREATE TABLE tablo1 (Kolon1 INT NOT NULL PRIMARY KEY, Kolon2 VARCHAR(20));

Bu kod ile tablo1 adında bir table oluşturuyorum, iki adet kolon mevcut, Kolon1 ve Kolon2. Burada Kolon1’e Primary Key veriyorum ve boş geçilemez diyorum INT tipinde, Kolon2 ise normal VARCHAR tipinde 20 karakterlik oluyor. Burada CLUSTERED deyimini kullanmadım. Kullanmama rağmen otomatikmen Primary Key olarak tanımlanan kolon CLUSTERED olmuş olur. Bu CLUSTERED nedir, nerden çıktı dediğinizi duyar gibiyim 🙂 Bilmeyenler aşağıdaki yazımı incelesinler.

Non-Clustered Index Nedir?

Yazıma devam ediyorum.

Bir başka yöntem;

CREATE TABLE tablo2 (Kolon1 INT NOT NULL, Kolon2 VARCHAR(20) NOT NULL, Kolon3 INT NULL,
CONSTRAINT PK_table2_col1col2 PRIMARY KEY (Kolon1, Kolon2));

Burada da bir composite (karma) primary key oluşturma durumu söz konusu, kolon 1 ve kolon 2 birlikte kullanılıyor. Bu arada dikkat edilirse Primary Key olarak tanımlanan kolonlara NOT NULL diyoruz hep, aslında bunu demek zorunda değiliz, bunu yazmasakta olur. Çünkü SQL SERVER Management Studio bizim yerimize aslında Primary Key olarak tanımladığımız kolonu zaten NOT NULL yani boş geçilemez olarak kabul eder. Ama ben kod yapısını kavrayabilmemiz için burada yazdım. Yine burada da CLUSTERED index kullanmadım, dolayısı ile SQL Server Management Studio otomatik olarak Primary Key kolonunu Clustered kabul edecek.

Bir başka yöntem;

CREATE TABLE tablo3 (Kolon1 INT NOT NULL, Kolon2 VARCHAR(20) NOT NULL, Kolon3 INT NULL);

Şimdi burada direkt Primary Key tanımlamadım, değiştirme ile birlikte nasıl yapılır onu göstermek istiyorum. Tablo 3 adında 3 kolonlu bir tablo oluşturduk. Şimdi buna Primary Key tanımlayalım, bu arada Clustered olayına da değinelim.

Tablomda aşağıdaki kod ile birlikte değişikliğimi yapıyorum.

ALTER TABLE tablo3 ADD CONSTRAINT PK_tablo3_Kolon1Kolon2 
PRIMARY KEY NONCLUSTERED (Kolon1,Kolon2);

Tabloma nonclustered index olarak bir Primary Key ekledim. Dediğim gibi Clustered ve nonclustered hakkında bilgi almak istiyor iseniz üstte verdiğim linki ziyaret ediniz.

Şimdi tempdb altında oluşturulan tabloları ve primary key olan kolonları Object Explorer bölümünde resmedip, yazımızı sonlandıralım.

2014073001

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir