PostgreSQL Constraints (Kısıtlamalar)

Merve KÜÇÜKDOĞRU
Machine Learning Turkiye
5 min readOct 10, 2021

Herkese merhaba,

Bugünkü yazımda sizlere PostgreSQL’ de tablo oluştururken kullandığımız kısıtlayıcıları anlatmaya çalışacağım.

Kısıtlayıcılar veri ekleme, güncelleme sırasında kontrol işlemi sağlar. Veri tabanında tablolar oluştururken kullandığımız kısıtlayıcılar aşağıdaki gibidir:

  1. NOT NULL
  2. UNIQUE
  3. CHECK
  4. PRIMARY KEY
  5. FOREIGN KEY

Bu kısıtlayıcılar işimizi oldukça kolaylaştırır. Daha iyi anlamak için birkaç örnek vermek istiyorum.

✳ Örnek olarak bir kişinin TC Kimlik numarası 11 haneli ve benzersizdir. Aynı ad ve soyada sahip kişileri TC Kimlik numarası ile ayırt edebiliriz.

✳ Web yada mobil uygulamalarda kullanıcı hesabı oluştururken aynı email adresi ile ikinci bir hesap oluşturamayız. Burada email kolonunun benzersiz olması gerektiğini anlayabiliriz.

✳ Aynı şekilde kullanıcıların ad, soyad bilgileri olmak zorundadır. Panel girişi için ise email ve şifre bilgisi olmalıdır. Kişilerin doğum tarihi bilgisini de veri tabanında tutmak isteyebiliriz. Ama yaş kolonu bilgisini tutmaya gerek yoktur. (Veri tabanında tekrar eden kolon bilgileri yer almaz. Örnek olarak ad ve soyad bilgisinin yanında tam isim alanını tutmak mantıksızdır. Ad + Soyad ile tam isme ulaşabiliriz.)

✳ Bir kişinin doğum tarihi bilgisi elimizde varsa bugünkü tarihten doğum tarihi bilgisini çıkardığımızda yaş bilgisini elde etmiş oluruz.

✳ Bir ürünün fiyatı sıfır ya da negatif değer olamaz. Aynı isme sahip kategori ismi olmasını istemeyebiliriz.

✳ Yada bir kişinin doğum tarihi yarın olamaz.

✳ Ekstrem bir durum olmadıkça toptan ürün fiyatı perakende ürün fiyatından düşük olur.

1. NOT NULL Constraints

Tabloda kolonlarımızın boş geçilmesini istemediğimizde kullanırız. Boş geçilmesini istemediğimiz kolonlara veri tipinden sonra NOT NULL ifadesini ekleriz.

NOT NULL kolonlara varsayılan(default) değerler verebiliriz.

Örneğin kayıt tarihini her ekleme işlemi yaptığımızda yazmak istemezsek o an ki tarih ve saati default değer olarak verebiliriz.

create_date datetime NOT NULL DEFAULT current_timestamp

Kayıt eklemek istediğimizde NOT NULL olan kolonlara değer girmezsek hata alırız.

Bütün kolonları tek tek kontrol ediyoruz.

Default olan kolona değer verdiğimiz için hata almadık.

2. CHECK Constraints

En genel kısıtlayıcıdır. Ücret bilgisi sıfırdan küçük olamaz. Doğum tarihi yarın olamaz. Veri tipinden sonra CHECK ifadesini yazarak kısıtlayıcı tanımına başlayabiliriz.

Constraint anahtar kelimesini kullanarak kısıtlayıcıyı kendi istediğimiz şekilde isimlendirebiliriz.

Negatif değer ya da sıfır fiyat değerini girersek hata alırız.

Birden fazla Constraint kolonu yazabiliriz. Örnek olarak birim fiyatı ile toptan fiyat içeren bir kolonumuz olursa birim fiyat her zaman toptan fiyattan düşük olmalıdır.

Şifre alanında minimum ve maksimum uzunluk vermek istersek;

8' den az veya 8' e eşit olduğunda ve 12 karaktere eşit veya 12 karakterden uzun şifre alanı verirsek hata alırız.

IN ifadesi ile de kısıtlamalar yazabiliriz. Şirketler adında bir tablomuz olsun ve sadece İstanbul, Ankara, Konya illerini ekleyebilelim. Bunun için;

3. UNIQUE Constraints

Benzersiz kolon oluşturmak istediğimizde “UNIQUE” kısıtlayıcısını kullanırız. Veri tipinden sonra UNIQUE anahtar kelimesini yazabiliriz.

Bir tabloda birden fazla kolon benzersiz olabilir.

Constraint tanımlaması ile kendi istediğimiz isimde ekleyebiliriz.

Benzersiz kısıtlamalar, bir sütunda veya bir sütun grubunda bulunan verilerin tablodaki tüm satırlar arasında benzersiz olmasını sağlar.

❌ Birden fazla kullanıcı aynı email adresini kullanamaz.

4. PRIMARY KEY Constraints

PostgreSQL’de “Primary Key(Birincil Anahtar)”, bir kaydı benzersiz şekilde tanımlayan tek bir alan veya alanların birleşimidir. Birincil anahtarın parçası olan alanların hiçbiri NULL değeri içeremez. Bir tabloda sadece bir tane primary key(birincil anahtar) olabilir.

Kısaca “Primary Key” ifadesinin ne olduğundan bahsetmek gerekirse örnek olarak aynı ad ve soyada sahip olan kişileri birbirinden “TC Kimlik” numarası ile ayırt edebiliriz. Okulda her bir öğrencinin benzersiz numarası vardır. Veri tabanında da her kaydı birbirinden ayırt etmek için Primary Key kısıtlayıcısını kullanırız.

Örnek olarak kitaplardaki ISBN (International Standard Book Number) numaraları tekil değildir. Aynı adda, aynı basım tarihinde basılan, aynı yazara ait, aynı yayınevi tarafından basılan bütün kitaplar aynı ISBN numarasına sahiptir. Aynı ISBN numarasına sahip kitapları birbirinden ayırt etmek için kütüphanelerde Demirbaş Numarası olarak adlandırılan benzersiz numaralar kullanılabilir.

Primary Key tanımlaması veri tipinden sonra yada bizim istediğimiz isimlendirme ile Constraint anahtar kelimesi kullanılarak oluşturulabilir.

5. FOREIGN KEY Constraints

Foreign Key(Yabancı anahtar), bir tablodaki başka bir tablonun birincil anahtarına başvuran bir sütun veya sütun grubudur.

Genel olarak bir ürünün kategori ismini sürekli ürün eklerken yazmayız. Bunun yerine kategori bilgilerini içeren bir tablomuz olur ve ürün tablosuna kayıt eklerken kategori bilgisi için kategori adını tekrar tekrar yazmak yerine kategori tablosundaki referansını yani birincil anahtar değerini kullanırız.

Yabancı anahtarı içeren tabloya referans tablosu veya alt tablo denir. Ve yabancı anahtarın başvurduğu tabloya başvurulan tabloya ana tablo denir.

Bir tablonun diğer tablolarla olan ilişkilerine bağlı olarak birden fazla yabancı anahtarı olabilir.

Yabancı anahtar kısıtlaması, alt tablodaki bir sütundaki veya bir sütun grubundaki değerlerin, üst tablonun bir sütunundaki veya bir sütun grubundaki değerlere eşit olduğunu gösterir.

“FOREIGN KEY” anahtar kelimesini kullanarak yabancıl anahtar tanımlaması yapabiliriz.

Bir tabloda birden fazla yabancıl anahtar olabilir.

Kayıt ekleme ve güncelleme sırasında ana tabloda yazdığımız değerin referans tabloda mutlaka karşılığı olmalıdır. Aksi takdirde hata alırız.

Örnek olarak “İnce Memed 1” kitabının yazarının yazarlar tablosunda karşılığı olmalıdır.

Yazarlar tablosunda 1 numaralı değere karşılık yazar olmadığı için hata aldık.

Bu şekilde örneklerimizi artırabiliriz.

Son olarak Primary Key ve Unique Key arasındaki farktan bahsetmek gerekirse;

✔ Primary Key kısıtına sahip kolon benzersizdir ve asla boş geçilemez.

✔ Unique Key kısıtına sahip kolon benzersizdir ama boş geçilebilir.

Zaman ayırıp okuduğunuz için teşekkür ederim. Umarım faydalı olmuştur. Bir sonraki yazıda görüşmek üzere…

Sağlıcakla kalın.😊

--

--