Primary key kimliktir; UNIQUE ise benzersizlik kuralıdır. Primary key, tablodaki her satırı diğerlerinden ayıran ve o satır için seçilmiş temel kimliktir. UNIQUE ise kimlik olmak zorunda olmayan bir sütunun veya sütun grubunun aynı değeri tekrar almasını sınırlayan bir iş kuralıdır. Örneğin student_id öğrencinin sistemdeki kimliği olabilirken, email adresinin iki farklı öğrenci kaydında kullanılmaması UNIQUE ile sağlanabilir.
Bu nedenle primary key için “Bu satırı nasıl tanıyacağım?”, UNIQUE için ise “Bu bilgi tekrar edebilir mi?” sorusunu sorabilirsin. Primary key, tablo tasarımının temel referans noktasıdır; diğer tabloların foreign key alanlarıyla bağlanacağı kimlik çoğu tasarımda primary key olur. UNIQUE ise aynı tabloda e-posta, kullanıcı adı veya kayıt kodu gibi farklı alanların benzersizliğini korumaya yardımcı olur.
Primary key ve UNIQUE farkı: Kimlik mi, kural mı?
Primary key, bir satırın kimliğini temsil eder. Örneğin students tablosunda student_id sütunu her öğrenci kaydını ayırt etmek için kullanılabilir. Öğrencinin adı, bölümü veya e-posta adresi değişse bile student_id, kaydın hangi öğrenciye ait olduğunu belirleyen sabit referans olarak tasarlanabilir.
UNIQUE kısıtlaması ise verinin belirli bir kurala uymasını sağlar. email sütununa UNIQUE uygulandığında aynı e-posta adresinin birden fazla satırda bulunması engellenir. Ancak bu sütun, tablonun temel kimliği olmak zorunda değildir. Aynı tabloda hem email hem de username için ayrı UNIQUE kısıtlamaları tanımlanabilir.
- Primary key: Satırın temel ve seçilmiş kimliğidir.
- UNIQUE: Bir alanın veya alan grubunun aynı değeri tekrar almasını sınırlar.
- Primary key: Bir tabloda tek bir primary key kısıtlaması bulunur.
- UNIQUE: Aynı tabloda birden fazla UNIQUE kısıtlaması bulunabilir.
Aday anahtar, tek primary key ve bileşik UNIQUE nasıl konumlanır?

Aday anahtar, bir satırı tekil biçimde tanımlayabilecek ve tasarım açısından uygun olan sütun veya sütun grubudur. Örneğin bir tabloda hem student_id hem de kurum tarafından benzersiz üretilen bir kayıt numarası her satırı ayırt edebiliyorsa ikisi aday anahtar olarak değerlendirilebilir. Bunlardan biri primary key seçilir; diğer benzersiz kimlik seçenekleri ise UNIQUE ile korunabilir.
Bir tabloda yalnızca tek bir primary key kısıtlaması bulunabilir; fakat bu primary key tek sütundan oluşmak zorunda değildir. Birden fazla sütun birlikte satırı tanımlıyorsa bileşik primary key kullanılabilir. Buna karşılık aynı tabloda birden fazla UNIQUE kısıtlaması tanımlanabilir. Bu ayrımı doğru kurmak, SQL öğrenirken yalnızca komut ezberlemekten daha önemlidir. Genel yazılım öğrenme sürecinin kişiye göre yapılandırılmasını incelemek için Berk Akademi’nin kişiye özel online yazılım eğitimi yaklaşımına göz atabilirsin.
Bileşik UNIQUE, birden fazla sütunun birlikte oluşturduğu değerin tekrarını engeller. Örneğin enrollment tablosunda aynı öğrencinin aynı derse iki kez kaydolması istenmiyorsa şu kural kullanılabilir:
UNIQUE (course_id, student_id)
Bu kuralda aynı course_id farklı öğrenciler için, aynı student_id ise farklı dersler için tekrar edebilir. Engellenen durum, aynı ikilinin ikinci kez eklenmesidir. Örneğin (10, 4), (10, 5) ve (11, 4) farklı kombinasyonlardır; ancak (10, 4) yeniden eklenemez.
- Aday anahtarlar arasından biri primary key olarak seçilir.
- Tek bir primary key kısıtlaması bir veya birden fazla sütundan oluşabilir.
- Bir tabloda birden fazla UNIQUE kısıtlaması tanımlanabilir.
- Bileşik UNIQUE, sütunları tek tek değil, birlikte değerlendirir.
NULL davranışı ve foreign key ilişkisi neden dikkat ister?

Primary key kimliktir; UNIQUE ise benzersizlik kuralıdır. Primary key, her satırı diğer satırlardan ayıran kimlik değerini taşıdığı için geçerli ve benzersiz bir değere ihtiyaç duyar. Bu nedenle bir primary key alanı NULL bırakılamaz ve aynı değer ikinci kez kullanılamaz.
UNIQUE kısıtlaması ise genellikle satırın ana kimliği olmayan bir alanın ya da alan grubunun tekrar etmesini sınırlar. Örneğin bir öğrencinin e-posta adresi benzersiz olmalıdır; ancak bu adres, öğrencinin sistemdeki asıl kimliği olmak zorunda değildir. NULL söz konusu olduğunda ise tüm veri tabanı sistemleri için tek bir davranış varmış gibi düşünmemelisin. Bir sistem bir UNIQUE alanda birden fazla NULL değere izin verebilirken başka bir sistem NULL değerlerin tekrar kontrolünü farklı uygulayabilir. Bu nedenle NULL sayısını ve NULL değerlerin benzersizlik karşılaştırmasına nasıl katıldığını kullandığın veri tabanı sisteminin kurallarına göre değerlendirmelisin.
Foreign key, bir tablodaki değeri başka bir tablodaki karşılık gelen anahtara bağlayarak tablolar arasında ilişki kurar. En yaygın kullanım, foreign key’in başka tablonun primary key alanını referanslamasıdır. Bunun yanında bazı sistemler, referanslanabilir kabul ettiği uygun bir UNIQUE veya aday anahtar alanının hedef gösterilmesine de izin verebilir. Ancak her veri tabanı sisteminin hangi UNIQUE alanı foreign key hedefi olarak kabul ettiği ve bu hedef için hangi koşulları aradığı aynı olmayabilir.
Bu yüzden tablo tasarlarken yalnızca “alan UNIQUE mı?” diye bakmak yeterli değildir. Alanın NULL kabul edip etmediğini, gerçekten benzersiz bir kimlik işlevi görüp görmediğini ve başka tablolar tarafından güvenli biçimde referanslanıp referanslanamayacağını ayrıca kontrol etmelisin.
students tablosunda başarılı ve reddedilen INSERT örnekleri
Aşağıdaki örnekte student_id satır kimliği olarak primary key, email ise tekrar etmeyen ancak asıl kimlik olarak kullanılmayan bir alan olarak tanımlanmıştır:
CREATE TABLE students (
student_id INTEGER PRIMARY KEY,
email VARCHAR(255) UNIQUE,
full_name VARCHAR(150)
);
INSERT INTO students (student_id, email, full_name)
VALUES (1, '[email protected]', 'Ayşe Demir');
INSERT INTO students (student_id, email, full_name)
VALUES (2, '[email protected]', 'Ayşe Kaya');
INSERT INTO students (student_id, email, full_name)
VALUES (1, '[email protected]', 'Ayşe Kaya');
- İlk kayıt kabul edilir; çünkü hem
student_idhem deemaildaha önce kullanılmamıştır. - İkinci kayıt, farklı bir
student_idiçerse de aynı e-posta adresini kullandığı içinUNIQUEkısıtlamasını ihlal eder. - Üçüncü kayıt farklı bir e-posta içerse de
student_id = 1değeri zaten bulunduğu için primary key tekrarına neden olur.
Bu ihlallerin hata mesajı ve mesajın gösteriliş biçimi kullanılan veri tabanı sistemine göre değişebilir; ancak kavramsal sonuç aynıdır: ilk INSERT başarılı, sonraki iki INSERT ilgili kısıtlamalar nedeniyle reddedilir. email alanına NULL gönderilen örneklerde ise sonucu tüm sistemler için aynı kabul etme. Birden fazla NULL değerin kabul edilip edilmemesi veya tekrar kontrolünün nasıl yapılacağı, kullanılan sistemin UNIQUE ve NULL kurallarına bağlıdır.
Hangi durumda hangisi? İki adımlı karar çerçevesi
Primary key kimliktir; UNIQUE ise benzersizlik kuralıdır. Seçim yaparken önce alanın satırı tanımlayıp tanımlamadığına, ardından yalnızca belirli bir iş kuralını koruyup korumadığına bakabilirsin.
- Bu sütun veya sütun grubu satırı mı tanımlıyor? Yanıt evetse söz konusu alanlar aday anahtar olabilir. Aday anahtarlar arasından tablo için en uygun olanı primary key olarak seçmeyi değerlendir. Bir tabloda yalnızca bir primary key bulunur; ancak bu primary key tek sütundan veya birden fazla sütundan oluşabilir. Diğer aday anahtarların benzersizliğini korumak için UNIQUE kullanılabilir.
- Yoksa yalnızca bir iş kuralını mı koruyor? Yanıt evetse, alanı kimlikten bağımsız bir benzersizlik kuralı olarak değerlendir ve UNIQUE kullan. Böylece tablo satırının temel kimliği başka bir sütunda kalırken belirli bir bilginin tekrar etmesi engellenir.
Örneğin students tablosunda student_id, her öğrencinin satırını tanımlayan alan olarak primary key seçimine uygundur. email ise öğrencinin temel kimliği olmak zorunda değildir; fakat tasarım kuralı aynı e-posta adresinin birden fazla satırda kullanılmasına izin vermiyorsa UNIQUE ile sınırlandırılabilir. Birlikte değerlendirilen alan grubuna ait bir kural varsa bileşik UNIQUE tercih edilebilir. Örneğin class_id ve student_no birlikte benzersiz olmalı, fakat öğrenci numarası farklı sınıflarda tekrar edebilmeli ise kural bu iki sütunun birleşimine uygulanır.
Tablo tasarımı, algoritma ve diğer yazılım konularını birlikte tekrar etmek isteyenler yazılım ve programlama yazıları arasından konuya uygun içerikleri inceleyebilir.
- Primary key: Satır kimliğini belirler.
- UNIQUE: Bir veya birden fazla alandaki benzersizlik kuralını korur.
- Primary key sayısı: Bir tabloda tektir; bileşik olabilir.
- UNIQUE sayısı: Aynı tabloda birden fazla kullanılabilir.
- NULL davranışı: Veri tabanı sisteminin resmî dokümanından kontrol edilmelidir.
Sık Sorulan Sorular
Bir tabloda birden fazla primary key olabilir mi?
Hayır. Bir tabloda yalnızca bir primary key kısıtlaması bulunabilir. Ancak bu kısıtlama birden fazla sütundan oluşan bileşik primary key olabilir.
Aynı tabloda birden fazla UNIQUE kısıtlaması kullanılabilir mi?
Evet. Örneğin email, username ve başka bir alan için birbirinden bağımsız UNIQUE kısıtlamaları tanımlanabilir.
Bileşik UNIQUE ile tek sütunlu UNIQUE arasındaki fark nedir?
Tek sütunlu UNIQUE, tek bir alanın tekrarını sınırlar. Bileşik UNIQUE ise sütunların tek tek değil, birlikte oluşturduğu kombinasyonun tekrarını sınırlar.
UNIQUE kısıtlaması NULL değerleri nasıl değerlendirir?
NULL değerlerinin UNIQUE kısıtlamasıyla nasıl değerlendirileceği veri tabanı sistemine ve ilgili ayarlara göre değişebilir. Bu nedenle kullanılan sistemin resmî dokümanı kontrol edilmelidir.
Foreign key yalnızca primary key alanına mı bağlanır?
Hayır. Foreign key, uygun koşullar sağlandığında primary key'e veya benzersizliği garanti edilen uygun bir UNIQUE sütun ya da sütun grubuna bağlanabilir.
Pratik bir kural olarak önce satırın kimliğini, sonra kimlikten bağımsız iş kurallarını belirlemek; primary key ve UNIQUE seçimlerini daha anlaşılır hâle getirir.