Data çox ola bilər, amma hamısı faydalı deyil. Cədvəl zibilliyə çevrilməsin deyə, PostgreSQL məhdudiyyətlər təyin etməyə imkan verir. Bu, elə bil sadə qaydalardır ki, heç kim "ad" sahəsinə rəqəm yazmasın və ya boş buraxmasın.
Constraint nədir?
Məhdudiyyətlər (constraints) PostgreSQL-də elə bil orduda davranış qaydaları kimidir. Əgər olmasa, hər kəs istədiyini edə bilər: istifadəçinin yaşını -999 kimi yaza, ad yerinə boş sətir əlavə edə və ya eyni tələbəni iki fərqli id ilə iki dəfə yaza bilər. Bunun qarşısını almaq üçün PostgreSQL-də məhdudiyyətlər adlı nəzarət mexanizmləri var.
Məhdudiyyətlər sənə imkan verir ki:
- Datanda düzgünlük və uyğunluq qorunsun.
- Data müəyyən qaydalara uyğun olsun (məsələn, insanın yaşı mənfi ola bilməz).
- Əgər data gözlədiyin kimi deyilsə, səhvləri tez tapasan.
Bu gün ən çox istifadə olunan iki məhdudiyyəti müzakirə edəcəyik: NOT NULL və UNIQUE.
NOT NULL məhdudiyyəti
NOT NULL məhdudiyyəti PostgreSQL-ə deyir: "Ay bala, bu sahə həmişə dəyər almalıdır. Burda qeyri-müəyyənlik keçməz!". Əgər cədvələ NULL olan sətir əlavə etməyə çalışsan, PostgreSQL səhv verəcək. Bu, xüsusilə vacib sahələr üçün faydalıdır, məsələn, tələbənin adı və ya doğum tarixi.
NOT NULL istifadəsinə nümunə
CREATE TABLE teachers (
id SERIAL PRIMARY KEY, -- Unikal identifikator
name VARCHAR(100) NOT NULL, -- Müəllimin adı (mütləqdir)
subject VARCHAR(50) NOT NULL -- Tədris etdiyi fənn (mütləqdir)
);
Bu nümunədə name və subject sütunları boş qala bilməz. Əgər bu sütunlara dəyər vermədən sətir əlavə etməyə çalışsan, səhv alacaqsan.
INSERT INTO teachers (name, subject)
VALUES (NULL, 'Mathematics');
Nəticə: səhv! Müəllimin adını göstərməmisən, amma name dəyər tələb edir.
UNIQUE məhdudiyyəti: unikal olmalıdır
UNIQUE məhdudiyyəti təmin edir ki, sütunda və ya sütunlar kombinasiyasında dəyərlər təkrarlanmasın. Bu, məsələn, iki tələbənin eyni tələbə nömrəsi olmamasına əmin olmaq üçün faydalıdır.
Əgər NOT NULL "bütün qonaqlar geyimli olmalıdır" tələbi kimidirsə, UNIQUE "partidə eyni paltardan iki dənə olmasın" deməkdir.
UNIQUE istifadəsinə nümunə
CREATE TABLE departments (
id SERIAL PRIMARY KEY, -- Unikal identifikator
name VARCHAR(100) UNIQUE -- Departamentin adı unikal olmalıdır
);
İndi eyni adda iki departament əlavə edə bilməzsən.
INSERT INTO departments (name) VALUES ('Mathematics');
INSERT INTO departments (name) VALUES ('Mathematics');
Nəticə: səhv! name sütununda təkrarlanan dəyər əlavə etməyə cəhd etdin.
Kombinə olunmuş UNIQUE məhdudiyyəti
İki (və ya daha çox) sütunun kombinasiyası üçün də unikal olmağı təyin edə bilərsən. Məsələn:
CREATE TABLE enrollments (
id SERIAL PRIMARY KEY, -- Yazı üçün unikal identifikator
student_id INTEGER NOT NULL, -- Tələbənin identifikatoru
course_id INTEGER NOT NULL, -- Kursun identifikatoru
UNIQUE (student_id, course_id) -- Bir tələbə eyni kursa iki dəfə yazıla bilməz
);
İndi hər student_id və course_id cütü unikal olmalıdır. Kiminsə eyni tələbəni eyni kursa iki dəfə yazmağa cəhd etməsi mümkün deyil, PostgreSQL buna imkan verməyəcək.
Məhdudiyyətlərin kombinasiyası: NOT NULL və UNIQUE
Bir sütunda həm NOT NULL, həm də UNIQUE istifadə edə bilərsən. Məsələn:
CREATE TABLE users (
username VARCHAR(50) NOT NULL UNIQUE, -- Unikal login, doldurulması mütləqdir
email VARCHAR(100) NOT NULL UNIQUE -- Unikal email ünvanı, doldurulması mütləqdir
);
Burada login və email ünvanı həm unikal olmalıdır, həm də boş qala bilməz.
Məhdudiyyətlərdən istifadə zamanı tipik səhvlər
Əgər UNIQUE məhdudiyyətini əlavə edirsən, amma NOT NULL əlavə etmirsənsə, bir neçə NULL dəyəri olan sətir əlavə edə bilərsən, çünki PostgreSQL NULL-u başqa NULL-a bərabər saymır. Boş dəyərləri qadağan etmək istəyirsənsə, NOT NULL əlavə et.
UNIQUE olan sütuna təkrarlanan dəyər əlavə etməyə cəhd etsən, səhv çıxacaq. INSERT etməzdən əvvəl həmişə daxil olan datanı yoxla.
Çoxlu məhdudiyyətlərdən istifadə etmək insert əməliyyatlarının performansını azalda bilər.
Bütün bunlar niyə lazımdır?
Məhdudiyyətlərdən istifadə etmək bir çox problemi aradan qaldırır: təkrarlanan data, boş sətirlər və insan faktorundan yaranan digər səhvlər. Onlar bazanı "özünü qoruyan" edir və böyük layihələrdə bu, sənə çox vaxt qazandırır. Müsahibələrdə də məhdudiyyətlər barədə tez-tez soruşurlar, ona görə NOT NULL və UNIQUE bilmək təkcə faydalı bacarıq deyil, həm də gələcək işəgötürənləri təsirləndirmək üçün potensialdır.
Növbəti dərsdə DEFAULT məhdudiyyətini öyrənəcəyik, hansı ki, istifadəçi heç nə göstərməsə, sütun üçün default dəyər təyin etməyə imkan verir. Görüşənədək!
GO TO FULL VERSION