Kısıtlamalar (constraints), sütunlar veya tablolar üzerinde geçerlilik değerlerini otomatik olarak kontrol etmek için getirilen bütünlük kısıtlamalarıdır. Bunlar şunları sağlar:
Ana kısıtlama türleri:
PRIMARY KEY — benzersiz tanımlayıcı, tekrarları ve NULL'ı yasaklar.UNIQUE — bir sütundaki değerlerin tekrarını yasaklar.FOREIGN KEY — referans bütünlüğü, başka bir tabloyla bağlantı sağlar.CHECK — rastgele bir ifadenin kontrolü.NOT NULL — bir sütundaki NULL değerleri yasaklar.CREATE TABLE orders ( id SERIAL PRIMARY KEY, user_id INT REFERENCES users(id), -- yabancı anahtar price DECIMAL(10,2) CHECK (price > 0), created_at TIMESTAMP NOT NULL );
"Benzersiz anahtar (UNIQUE) otomatik olarak NULL-GÜVENLİ midir, sütundaki herhangi bir sayıda NULL değerini hariç tutar mı?"
Aslında, çoğu DBMS'de (örneğin, PostgreSQL, MySQL) UNIQUE kısıtlaması birkaç satıra NULL değeri girmeye izin verir; çünkü NULL "bilinmeyen" olarak değerlendirilir. Bu genellikle görünmeyen boş değerlerin tekrarına yol açar.
CREATE TABLE test ( id INT PRIMARY KEY, code VARCHAR(10) UNIQUE ); INSERT INTO test (id, code) VALUES (1, NULL), (2, NULL); -- başarılı olur
Hikaye
Uygulama e-posta ile kayıt olmasına izin veriyordu, sütun UNIQUE idi ancak NOT NULL DEĞİLDİ — tabloda NULL-email ile bir düzine kullanıcı bulundu, bu da dış hizmetlerle entegrasyonda sorunlar yarattı.
Hikaye
Bilet siparişi sisteminde, payments tablosuna FOREIGN KEY eklemeyi unuttular — sonuç olarak, hiçbir siparişle bağlantılı olmayan ödemeler oluştu, bu da kullanıcılara iadeleri gerçekleştirmeyi zorlaştırdı.
Hikaye
İndirim için CHECK-kısıtlaması: discount > 0. 0 için sınır durumu unutuldu. Sonuç: sistem yalnızca 0'dan büyük indirimleri kabul etti, indirim yokluğu (0) iş mantığını bozdu.