Anasayfa / Yazılım / SQL / Tablolarımıza Check Constraint Eklemek

Tablolarımıza Check Constraint Eklemek

SQL veri tabanı geliştiricisi olarak hepimiz biliyoruz ki herhangi bir veri tablosundaki her bir sütun içindeki saklanan veri belirli bir veri tipindedir ve hatta maksimum boyutuda belirlenmiştir. İlgili sütuna NULL veri girilebilir mi, girilemez mi, bu bile tablonun oluşturulması esnasında belirtilmektedir. Örneğin INT veri tipi tanımlanmış bir sütuna biz herhangi bir string değer girememeliyiz. Ama biz eğer tablolarımı oluştururken herhangi bir kısıtlama tanımlamadı isek, kullanıcının bu istenmeyen durumları gerçekleştirebilmesinin önüne geçemeyiz. Sonuç itibari ile sayı istenen bir alana kullanıcı herhangi bir kelime girebilir ve eğer biz kısıtlayıcı yani constraint tanımlamaz isek kullanıcının girmiş olduğu bu veriyi kabul ederiz.

İşte bu gibi durumların önüne geçebilmek için tablolarıma Check Constraint yani kontrol kısıtlayıcıları ekleyebiliyoruz. Bu check constraintler ile bir çok şeyi yapabiliriz. Örneğin sadece INT veri girilmesini sağlayabiliriz ya da sadece belirli bir aralıkta değer girilmesini sağlayabiliriz. Diyelim ki bir yaş bilgisi istiyorsunuz o alana tabii ki 0 ile mantıksal olarak düşünürsek 100 arası değer isteriz. Tabi maşallah daha fazla yaşayanlar da olabilir 🙂 İstisnaları da düşünmek gerek. 🙂 Ama tabi yaş alanına tutupda 1500 girilmesi saçma olur 🙂 Makul ölçüde sınırları belirtmek uygun olacaktır. Veya belli bir kolona NULL değer girilmesinin önüne de geçebiliriz. Yani bir kolonun NULL değer olabilme ihtimali ya da NULL olmama ihtimali de aslında bir nevi constraint yani kısıtlamadır.

Şimdi MS-SQL’de kod yazarken bir tablo oluşturulması esnasında nasıl kısıtlayıcı ekleyebiliriz görelim. Syntax aşağıdaki gibidir.

CREATE TABLE ( , ,
CONSTRAINT CHECK (<şart>))

Oluşturulmuş bir tabloya sonradan constraint eklemek istediğimizi varsayarsak synatx şu şekilde olur:

CREATE TABLE ( , )
ALTER TABLE ADD CONSTRAINT CHECK (<şart>)

Örnek olarak aşağıdaki gibi bir tablo oluşturuyorum.

CREATE TABLE tablo1 (kolon1 SMALLINT, kolon2 VARCHAR(20),
CONSTRAINT check_tablo1_kolon2_aylar
CHECK (kolon2 IN ('Ocak','Şubat','Mart','Nisan','Mayıs', 
'Haziran','Temmuz','Agustos','Eylül','Ekim',
'Kasım','Aralık')
)
);

Daha sonra tablomda değişiklik yapıyorum ve yeni bir constraint ekliyorum. Kolon1 değerleri 1 ve 12 dahil olmak üzere bunların arasında olsun istiyorum.

ALTER TABLE tablo1 ADD CONSTRAINT check_tablo1_kolon1
CHECK (kolon1 BETWEEN 1 and 12);

Şimdi tablomuza veri ekleyelim.

INSERT INTO tablo1 (kolon1,kolon2)
VALUES (1,'Ocak');

Bir veri daha ekleyelim

INSERT INTO tablo1 (kolon1,kolon2)
VALUES (13,'Ocak');

Burada ilk veri eklenir, çünkü herhangi bir constrainte yakalanmıyor. Ancak ikincisi eklenmeyecektir. Çünkü biz kolon1 için 1 ve 12 (1 ve 12 dahil) arasında olacağı şartını eklemiştik. Kodda ise kolon1’e 13 eklenmek isteniyor.

Görüleceği üzere Check constraint oluşturmak çok basit.

Bir Cevap Yazın

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