CodeGym /Kurslar /SQL SELF /Üçüncü normal forma (3NF) prinsipləri

Üçüncü normal forma (3NF) prinsipləri

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

Üçü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:

  1. Artıq ikinci normal formadadır (2NF).
  2. 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.
  • departmentdepartment_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:

  1. employees cədvəli işçilər haqqında məlumat saxlayır.
  2. departments cə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:

  1. 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?
  2. 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:

  1. sales cədvəli satışlar haqqında məlumat saxlayacaq.
  2. products cə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!

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