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:
- 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.
- Hər bir sətir unikaldır. Yəni cədvəldə primary key (Primary Key) və ya unikal identifikator olmalıdır.
- 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_id və item 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.
GO TO FULL VERSION