CodeGym /Kurslar /SQL SELF /Məlumatların cədvəllərə məhdudiyyətlərlə əlavə olunması: ...

Məlumatların cədvəllərə məhdudiyyətlərlə əlavə olunması: NOT NULL, DEFAULT

SQL SELF
Səviyyə , Dərs
Mövcuddur

Məlumatların cədvəllərə məhdudiyyətlərlə əlavə olunması:NOT NULL, DEFAULT

Bu gün verilənlər bazası ilə işləməyin daha bir vacib aspektini ətraflı müzakirə edəcəyik — NOT NULLDEFAULT məhdudiyyətləri olan cədvəllərə məlumatların necə əlavə olunması. Bu mərhələdə artıq INSERT INTO əmri ilə tanışsan və cədvəllərə müəyyən strukturda sətir əlavə etməyi bilirsən. İndi isə detallara keçək — çünki məhdudiyyətlərlə işləmək çox vaxt developer üçün başağrısı olur. Amma narahat olma, leksiyanın sonunda bu mexanizmləri rahat idarə edə biləcəksən!

Məhdudiyyətlər nədir?

Məhdudiyyətlər — cədvəlin sütunlarına qoyulan qaydalardır. Onlar məlumatların məntiqi və düzgün formada saxlanmasına kömək edir. Məsələn, mütləq məlumat olmalı olan sahəni boş buraxmaq mümkün deyil (NOT NULL), və ya əvvəlcədən default dəyər təyin olunubsa, həmin sütun üçün dəyər göstərməyə ehtiyac yoxdur (DEFAULT).

Məhdudiyyət növləri: - NOT NULL — sütunda NULL ola bilməz. - DEFAULT — əgər dəyər göstərilməzsə, avtomatik olaraq bu dəyər sütuna yazılır.

Məhdudiyyətlər məlumatların bütövlüyünü qorumağa kömək edir. Təsəvvür elə ki, students cədvəlində tələbələrin siyahısını saxlayırsan və qaydalardan biri budur ki, hər tələbənin mütləq adı olmalıdır (NOT NULL). Bu məhdudiyyət olmasa, kimsə ad göstərməyi unudacaq və bazada "adsız tələbə" yaranacaq. Başqa bir nümunə: yeni kurs üçün kredit sayı default olaraq 0 təyin edilib (DEFAULT), beləliklə hər dəfə bu barədə düşünməyə ehtiyac qalmır.

NOT NULL məhdudiyyəti ilə işləmək

NOT NULL məhdudiyyəti qeyd əlavə edəndə konkret sütunda dəyər göstərməyə məcbur edir. Əgər bu sütuna NULL yazmağa və ya ümumiyyətlə heç nə göstərməyə çalışsan, verilənlər bazası "incəyəcək" (səhv baş verəcək). Gəlin nümunəyə baxaq.

Sadə bir students cədvəli yaradaq:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,     -- Ad boş ola bilməz
    age INT
);

Diqqət et: name sütununda NOT NULL məhdudiyyəti var, amma age sütununda belə bir məhdudiyyət yoxdur.

NOT NULL ilə məlumat əlavə etmə nümunəsi

İndi tələbə əlavə edək:

-- Uğurlu əlavə nümunəsi
INSERT INTO students (name, age) VALUES ('Alice', 23);
-- Uğur: ad göstərilib, sahə NOT NULL məhdudiyyətinə uyğundur

-- Səhv nümunəsi:
INSERT INTO students (age) VALUES (30);
-- Səhv: name sahəsi NULL ola bilməz, çünki NOT NULL məhdudiyyəti var

null value in column "name" violates not-null constraint kimi bir səhv alsan, qorxma — bu sadəcə PostgreSQL-in diqqətli olmağını xatırlatmasıdır.

Default dəyərlərdən (DEFAULT) istifadə

DEFAULT məhdudiyyəti verilənlər bazasına deyir: "Əgər bu sütun üçün dəyər göstərilməsə, bu dəyəri istifadə et". Bu developer üçün həyatı asanlaşdırır, çünki hər sətri əl ilə doldurmağa ehtiyac qalmır.

DEFAULT məhdudiyyəti olan cədvəl nümunəsi

courses cədvəli yaradaq:

CREATE TABLE courses (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    credits INT DEFAULT 0   -- credits sütunu üçün default dəyər — 0
);

DEFAULT ilə məlumat əlavə etmə nümunəsi

İndi kurs əlavə edək:

-- credits üçün dəyər açıq şəkildə göstərilib
INSERT INTO courses (name, credits) VALUES ('Mathematics', 5);

-- credits üçün dəyər göstərilməyib — default dəyər (0) istifadə olunacaq
INSERT INTO courses (name) VALUES ('History');

-- Nəticəyə baxaq
SELECT * FROM courses;

Nəticə:

id name credits
1 Mathematics 5
2 History 0

Diqqət et: History kursunu əlavə edəndə kredit sayı göstərilmədi. PostgreSQL avtomatik olaraq credits sütununu 0 ilə doldurdu.

NOT NULLDEFAULT məhdudiyyətlərini birlikdə istifadə etmək

Belə sütunlar üçün dəyər mütləq olmalıdır, hətta özün göstərməsən belə. Məsələn, courses cədvəlində credits sütunu həm DEFAULT, həm də NOT NULL ola bilər ki, heç kim təsadüfən onu boş NULL buraxmasın.

CREATE TABLE courses (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    credits INT NOT NULL DEFAULT 0
);

Məlumat əlavə etmə nümunəsi

Təsəvvür elə ki, hər yeni kurs default olaraq 0 kreditə sahib olmalıdır, amma NULL icazəli deyil.

-- Uğurlu: kreditlər default dəyərə bərabərdir
INSERT INTO courses (name) VALUES ('Physics');

-- Səhv: NOT NULL olan sütuna açıq şəkildə NULL əlavə etmək cəhdi
INSERT INTO courses (name, credits) VALUES ('Chemistry', NULL);

Nümunə: Adı mütləq olan tələbə əlavə etmək

students cədvəlini məhdudiyyətlərlə yaradaq:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,                         -- Ad mütləqdir
    enrollment_date DATE DEFAULT CURRENT_DATE   -- Qəbul tarixi default olaraq cari tarixdir
);

İndi ora tələbə əlavə edək:

-- Ad göstərilib, qəbul tarixi avtomatik doldurulacaq
INSERT INTO students (name) VALUES ('Bob');

-- Ad göstərmədən cəhd edək (səhv alacağıq)
INSERT INTO students (enrollment_date) VALUES ('2024-10-01');

Bu, PostgreSQL-in məlumatların düzgünlüyünü necə təmin etdiyinin əla nümunəsidir: bütün tələbələrin adı mütləq olur, qəbul tarixi isə açıq şəkildə göstərilməyə ehtiyac yoxdur.

Məsləhətlər və "tələ"lər

NOT NULLDEFAULT məhdudiyyətləri ilə işləyəndə bir neçə vacib məqamı unutma. Məsələn, əgər məlumatlarında tez-tez NULL rast gəlinirsə, NOT NULL məhdudiyyəti sənin üçün başağrısı ola bilər. Hər sütun üçün default dəyər təyin etsən, təsadüfən səhv məlumat ala bilərsən (məsələn, real dəyər əvəzinə 0).

Adətən, mövcud cədvələ yeni sütun əlavə edəndə, artıq olan sətirlər üçün həmin sütunun hüceyrələri NULL olur. Amma DEFAULT X göstərsən, bütün sütun X ilə doldurulacaq. Bu çox rahatdır və bazanın bütövlüyünü qorumağa kömək edir.

Məsələn, yeni sütun mövcud cədvələ FOREIGN KEY-dir. O, NULL və ya 0 ola bilməz. O, mövcud cədvəldə olan sətirlərə istinad etməlidir.

Bəs məhdudiyyətləri əlavə etməyi unutmusansa?

Narahat olma — məhdudiyyətləri sonradan ALTER TABLE əmri ilə əlavə edə bilərsən. Məsələn:

-- Mövcud sütuna DEFAULT məhdudiyyəti əlavə edək
ALTER TABLE courses ALTER COLUMN credits SET DEFAULT 0;

-- Mövcud sütuna NOT NULL məhdudiyyəti əlavə edək
ALTER TABLE students ALTER COLUMN name SET NOT NULL;

Bu sorğular artıq mövcud olan məlumatları pozmayacaq - onları dəyərli məlumat olan cədvəllərə tətbiq etmək olar.

İndi PostgreSQL-in gücündən məhdudiyyətləri idarə etmək üçün istifadə etməyə hazırsan! Məlumatların daha strukturlaşdırılmış və səhvlərdən qorunmuş olacaq, sorğuların isə daha məntiqli və proqnozlaşdırıla bilən olacaq.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION