CodeGym /Kurslar /SQL SELF /Birinci Normal Forma (1NF) prinsipləri

Birinci Normal Forma (1NF) prinsipləri

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

Birinci normal forma (First Normal Form, 1NF) — verilənlər bazasının normallaşdırılmasının ilk mərhələsidir və cədvəl strukturuna ciddi məhdudiyyətlər qoyur. Cədvəl 1NF-dədir, əgər:

  1. Bütün məlumatlar atomikdir. Cədvəldəki hər bir hüceyrənin dəyəri bölünməz olmalıdır. Sağ ol, "bir hüceyrədə siyahı"! Verilənlər bazasında belə şey olmaz.
  2. Hər bir sətir unikaldır. Yəni cədvəldə primary key (Primary Key) və ya unikal identifikator olmalıdır.
  3. Təkrarlanan məlumat qrupları yoxdur. Eyni obyektin dəyərləri eyni sütunda təkrar olmamalıdır.

Sadə dillə desək, təsəvvür elə ki, verilənlər bazası cədvəli sənin otağındır, atomik dəyərlər isə ayrı-ayrı əşyalardır: lampa, masa, kitab. Əgər otaq qarışıqdırsa (məsələn, hər şey bir yerdədir), lampanı tapmaq və ya ehtiyat masanın olub-olmadığını bilmək çətin olacaq. Normallaşdırma isə "hər şeyi yerbəyer eləməyə" kömək edir.

1NF pozuntusuna nümunə

Təsəvvür elə ki, bizdə tələbələrin cədvəli var və orada onların keçdiyi kurslar saxlanılır:

student_id name courses
1 Maria "Riyaziyyat, Fizika"
2 Rob "Biologiya, Kimya"

Bu strukturun problemi nədir? Kurslar (courses sütunu) bir hüceyrədə vergüllə ayrılıb. Deməli, məsələn, fizika keçən bütün tələbələri tapmaq istəsək, query kabusa çevriləcək: məcbur olacağıq text-lə çətin manipulyasiyalar aparaq. Və ya tələbə fizikanı silmək istəsə — yeni problem çıxacaq. Belə məlumatlar atomik deyil və əsas 1NF qaydasını pozur.

Cədvəli 1NF-ə necə gətirmək olar?

Problemi həll etmək üçün məlumatları ayrı-ayrı sətirlərə böləcəyik, hər bir hüceyrədəki dəyər atomik olacaq:

student_id name course
1 Maria Riyaziyyat
1 Maria Fizika
2 Rob Biologiya
2 Rob Kimya

İndi hər şey qaydasındadır. Cədvəli elə dəyişdik ki, hər bir hüceyrədəki dəyər bölünməzdir. Bu, 1NF prinsiplərinə uyğundur.

1NF pozuntusunun və düzəlişin ətraflı nümunəsi

Tutaq ki, bizdə online mağazanın sifariş cədvəli var:

order_id customer_name items
1001 Otto Lin "Noutbuk, Siçan, Klaviatura"
1002 Anna Song "Smartfon, Çexol"

Aydındır ki, burada items bir neçə dəyəri vergüllə saxlayır və bu, 1NF-i pozur.

1NF-ə uyğunlaşdırmaq üçün hər bir məhsul üçün ayrıca sətir saxlayacağıq:

order_id customer_name item
1001 Otto Lin Noutbuk
1001 Otto Lin Siçan
1001 Otto Lin Klaviatura
1002 Anna Song Smartfon
1002 Anna Song Çexol

İndi cədvəlin strukturu 1NF prinsiplərinə uyğundur. Hər bir sifariş və məhsul ayrıca sətirdədir və dəyərlər atomikdir.

Primary key əlavə etmək

Cədvəli dəyişəndən sonra unikal identifikator (primary key) əlavə etmək vacibdir ki, sətirlər unikal olsun. Yuxarıdakı nümunədə order_iditem birgə primary key kimi istifadə oluna bilər. Amma real həyatda adətən ayrıca id sahəsi yaradırlar.

id order_id customer_name item
1 1001 Otto Lin Noutbuk
2 1001 Otto Lin Siçan
3 1001 Otto Lin Klaviatura
4 1002 Anna Song Smartfon
5 1002 Anna Song Çexol

Praktiki tapşırıq

Səndə tələbələrin cədvəli var və onların keçdiyi fənlər bir hüceyrədə göstərilib:

student_id name subjects
1 Polly "Riyaziyyat, Kimya"
2 Peter "Fizika, İnformatika"

Cədvəli 1NF-ə uyğun formaya gətir.

Dəyişəndən sonra cədvəl belə olmalıdır:

student_id name subject
1 Polly Riyaziyyat
1 Polly Kimya
2 Peter Fizika
2 Peter İnformatika

1NF ilə işləyərkən ən çox rast gəlinən səhvlər

Verilənlər bazası ilə işləyəndə 1NF pozuntuları belə hallarda olur:

  • Siyahı və ya massivləri birbaşa cədvəldə saxlamaq. Ən çox rast gəlinən səhvdir.
  • Sətirlər üçün unikal identifikatorun (primary key) olmaması. Bu, cədvəli təkrarlanan məlumatlara qarşı zəif edir.
  • Eyni məlumatı saxlamaq üçün bir neçə sütundan istifadə etmək. Məsələn, "course_1", "course_2", "course_3" — düzgün struktur əvəzinə.

Bunları yadında saxla və verilənlər bazan həmişə birinci normal formaya uyğun olacaq.

1NF-in praktik tətbiqi

Real layihələrdə 1NF çox vacibdir. Məsələn:

  • Müştəri idarəetmə tətbiqlərində (CRM) müştəri və onların hərəkətləri barədə məlumatlar atomik olmalıdır. Bu, analiz və axtarışı asanlaşdırır.
  • Online mağazalarda 1NF sifariş, məhsul və alıcı məlumatlarını effektiv saxlamaq üçün istifadə olunur.
  • Bank sistemlərində müştəri, hesab və tranzaksiya məlumatları atomik olmalıdır ki, müxtəlif əməliyyatlar qarışmasın.

1NF prinsiplərinə əməl etmək verilənlər bazasının yüksək yüklərə davam gətirməsinə və istifadədə rahat olmasına kömək edir. Hər şey əladır, amma məlumatlarda təkrarlanma yarandı. Ona görə də ikinci normal formaya (2NF) keçirik, burada cədvəldəki qismən asılılıqları necə həll etmək lazım olduğunu öyrənəcəksən.

Niyə birinci normal formaya (1NF) əməl etmək vacibdir? Təsəvvür elə ki, sən məlumatları elə cədvəldə saxlayırsan ki, bir hüceyrədə bir neçə dəyər var — məsələn, alıcının sifariş etdiyi məhsulların siyahısı. Belə halda məlumatlarla işləmək çətinləşir: məsələn, "Klaviatura" sifariş edənləri tapmaq işgəncəyə çevrilir. Və ya məlumatın bir hissəsini dəyişmək və ya silmək lazım olsa, səhv etmək asandır. Məlumatlar atomik formada saxlananda — yəni hər bir sahədə yalnız bir dəyər olanda — onlarla işləmək daha etibarlı və başadüşülən olur. Üstəlik, belə cədvəlləri böyütmək, yeniləmək və lazım gəldikdə yenidən qurmaq daha asandır.

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