Üçüncü normal forma (3NF) — məlumatlarımızda daha çox qayda-qanun yaratmaq üçün bir addımdır. Qısa desək, cədvəl 3NF-dədir, əgər:
- Artıq ikinci normal formadadır (2NF).
- Bütün açar olmayan atributlar yalnız əsas açardan asılıdır və başqa heç nədən (tranzitiv asılılıqlar yoxdur!).
Başqa sözlə, 3NF tələb edir ki, cədvəldəki bütün məlumatlar birbaşa əsas açarla əlaqəli olsun və başqa açar olmayan atributlardan asılı olmasın.
Tranzitiv asılılıq o zaman yaranır ki, A atributu B atributundan asılıdır, B isə C atributundan asılıdır, yəni A → B → C kimi bir zəncir yaranır. Məsələn, “İşçi” “Şöbə”dən asılıdır, “Şöbə” isə “Yerləşmə”dən asılıdır. Deməli, “İşçi” tranzitiv olaraq “Yerləşmə”dən asılıdır.
3NF pozuntusuna nümunə
Tutaq ki, bizdə employees adlı cədvəl var və burada işçilər haqqında məlumat saxlanılır:
| employee_id | name | department | department_manager |
|---|---|---|---|
| 1 | Otto Lin | Marketing | Leo Zhang |
| 2 | Alex Song | Finance | Maria Chi |
| 3 | Anna Ming | Finance | Maria Chi |
Burada:
employee_id— əsas açardır.departmentvədepartment_manager— açar olmayan atributlardır.
İlk baxışdan hər şey normal görünür, amma diqqətlə baxsaq, problem var: department_manager employee_id-dən yox, department-dən asılıdır. Beləliklə, tranzitiv asılılıq yaranır: employee_id → department → department_manager.
Yaranacaq problemlər
Əgər departament direktorunun adını (“Finanslar”) dəyişsək, həmin departament göstərilən bütün sətirləri yeniləməliyik. Əgər təsadüfən bir sətri unutsaq, məlumatlar uyğunsuz olacaq. Bu, baş ağrısıdır və bundan qaçmaq olar.
Cədvəli 3NF-ə gətirmək
Tranzitiv asılılıqları aradan qaldırmaq üçün cədvəli iki yerə böləcəyik: biri işçilər haqqında, digəri isə şöbələr haqqında məlumat saxlayacaq.
employees cədvəli
| employee_id | name | department |
|---|---|---|
| 1 | Otto Lin | Marketinq |
| 2 | Alex Song | Finanslar |
| 3 | Anna Ming | Finanslar |
departments cədvəli
| department | department_manager |
|---|---|
| Marketinq | Leo Zhang |
| Finanslar | Maria Chi |
İndi hər şey səliqəlidir və hər cədvəl öz işi ilə məşğuldur:
employeescədvəli işçilər haqqında məlumat saxlayır.departmentscədvəli şöbələr və onların menecerləri haqqında məlumat saxlayır.
Əgər şöbə meneceri dəyişsə, sadəcə departments cədvəlində bir sətri yeniləmək kifayətdir, bütün işçi qeydlərində yox.
Cədvəlin 3NF-i pozduğunu necə bilmək olar?
Cədvəlin 3NF-i pozub-pozmadığını yoxlamaq üçün bax:
- Cədvəldə tranzitiv asılılıq var? Məsələn, A atributu B-dən, B isə C-dən asılıdır?
- Bütün açar olmayan atributlar birbaşa əsas açardan asılıdır? Əgər nəsə başqa açar olmayan atributdan asılıdırsa, cədvəl 3NF-də deyil.
Praktik nümunə: mağaza
sales cədvəlinə baxaq, burada satışlar haqqında məlumat var:
| sale_id | product_name | product_price | customer_name |
|---|---|---|---|
| 1 | Telefon | 20 000 | Otto Lin |
| 2 | Noutbuk | 50 000 | Alex Song |
| 3 | Telefon | 20 000 | Anna Ming |
Burada açıq-aşkar artıq məlumat var: məhsulun qiyməti hər satış üçün təkrarlanır. Əgər qiymət dəyişsə, məlumatlar dərhal uyğunsuz olacaq.
3NF pozuntusunu aradan qaldırmaq üçün cədvəli iki yerə böləcəyik:
salescədvəli satışlar haqqında məlumat saxlayacaq.productscədvəli — məhsullar və onların qiymətləri haqqında məlumat saxlayacaq.
sales cədvəli
| sale_id | product_id | customer_name |
|---|---|---|
| 1 | 1 | Otto Lin |
| 2 | 2 | Alex Song |
| 3 | 1 | Anna Ming |
products cədvəli
| product_id | product_name | product_price |
|---|---|---|
| 1 | Telefon | 20 000 |
| 2 | Noutbuk | 50 000 |
İndi məhsulun qiyməti dəyişsə, sadəcə products cədvəlində bir sətri yeniləmək kifayətdir və məlumatlar uyğun qalır.
Praktik tapşırıq
Buyur, sənə bir tapşırıq: səndə belə bir students_courses cədvəli var:
| student_id | student_name | course_name | teacher_name |
|---|---|---|---|
| 1 | Otto Lin | Riyaziyyat | Maria Chi |
| 2 | Alex Song | Proqramlaşdırma | Leo Zhang |
| 1 | Otto Lin | Proqramlaşdırma | Leo Zhang |
Cədvəli elə böl ki, 3NF-ə uyğun olsun. İpucu: sənə üç cədvəl lazımdır (students, courses, teachers) və onları düzgün əlaqələndirməlisən.
Niyə 3NF-ə riayət etmək vacibdir?
Ümumiyyətlə, niyə üçüncü normal forma (3NF) ilə baş sındırmağa dəyər? Çünki bu, həqiqətən həyatı asanlaşdırır. Cədvəllər 3NF-ə gətiriləndə məlumatlar səliqəli olur — artıq təkrarlanma yoxdur, deməli, nəyisə təsadüfən pozmaq şansın azdır. Yeniləmələr daha tez və rahat olur, çünki hər şey bir yerdə saxlanılır, bütün sətirlərdə copy-paste olmur.
Üstəlik, bazanın strukturu daha çevik olur. Yeni sahə əlavə etmək və ya köhnəni dəyişmək istəyirsən — bütün sistemi yenidən qurmağa ehtiyac yoxdur.
Amma, hər yaxşı hekayədə olduğu kimi, bir nüans var: həddindən artıq normallaşdırma çoxlu xırda cədvəllər və bir dəstə JOIN-lə mürəkkəb sorğulara gətirib çıxara bilər. Bəzən bu, həqiqətən ləngidə bilər. Yəni əsas odur ki, ölçünü biləsən. Harada lazımdır — normallaşdır, harada bir az artıq məlumat saxlamaq rahatdır — qorxma.
Davamda daha dərinə gedəcəyik: cədvəllər arasında düzgün əlaqələr qurmağı və həm rahat, həm də etibarlı verilənlər bazası yaratmağı öyrənəcəyik. İrəli, əla verilənlər bazası dizaynına!
GO TO FULL VERSION