Verilənlər bazasının normallaşdırılması

Münasibətli verilənlər bazasında "normallaşdırma" deyilən anlayış mövcuddur. Normallaşdırma - bu, məlumatların verilənlər bazasında düzgün təşkili prosesidir. Normallaşdırma qaydalarına riayət edilmədikdə verilənlər bazası ilə işləmək çətinləşir. Məlumatların verilənlər bazasında təkrarlanması effektivliyi çox azaldır, çünki bu halda verilənlər bazasının həcmi artır və informasiyaya müraciətin sürəti aşağı düşür. Bundan başqa, məlumatların təkrarlanması verilənlər bazasında uyğunsuzluqlara gətirib çıxarır, çünki eyni məlumatlar verilənlər bazasında bir neçə yerdə təkrarlanır. Bu halda bir neçə yerdə mövcud olan məlumatlara dəyişiklik etmək lazımdırsa, bu, verilənlər bazasında bütün yerlərdə reallaşdırılmalıdır (bu isə bəzən mürəkkəb sorğuların yazılmasına gətirib çıxarır).

Verilənlər bazasını normallaşdırmaq üçün bir neçə qayda mövcuddur. Hər bir qayda "normal forma" adlanır. Əgər birinci qayda təmin edilibsə, bu, verilənlər bazasının "birinci normal formada" (1NF) olduğu anlamına gəlir. Əgər hər üç qayda təmin edilibsə, bu, verilənlər bazasının "üçüncü normal forma"da (3NF) olduğu deməkdir. Dördüncü (4NF) və beşinci (5NF) normal formalar da mövcud olsalar da, üçüncü normal forma əksər layihələr üçün kifayət edir.

Birinci normal forma (1NF)

Birinci normal forma üçün tələblər aşağıdakı kimidir:

  • Cədvəlin hər bir xanasında atomar qiymət olmalıdır
  • Cədvəl bir neçə eyni tipli sütundan ibarət olmamalıdır
  • Hər bir sətrin unikal identifikasiyası üçün başlıca açar (primary key) olmalıdır

Deyək ki, bloqumuz var və hər bir dərsə teq (saytda bu teqlər üzrə dərsləri sıralamaq mümkündür) əlavə etmək istəyirik. Aşağıdakı posts cədvəlində 1NF qaydasına riayət edilməyib, çünki teqlər eyni tipli sütunlarda yerləşdirilib:

Yuxarıdakı posts cədvəli unikal identifikasiya üçün id  başlıca açarına malikdir. Həmçinin cədvəlin hər bir xanasındakı qiymətlər atomardır. Yeganə problem odur ki, cədvəl bir neçə eyni tipli sütundan (tag1, tag2) ibarətdir. Bu halda hansısa dərsə 3-cü, digərinə isə 4-cü teq əlavə etmək qeyri-mümkündür. Bəli, 1NF qaydası pozulub. Bundan başqa, cədvəldəki məlumatları dəyişdirmək üçün mürəkkəb sorğular yazılmalıdır. Yadda saxlayın, bütün "qara işi" verilənlər bazası yerinə yetirməlidir. Mürəkkəb sorğular vasitəsilə verilənlər bazasının düzgün təşkil edilməmiş strukturunun problemini həll etməyə çalışmayın.

Teqlərlə bağlı problemi həll etmək üçün ayrı bir tags cədvəli yaradırıq:

tags cədvəli

İndi isə posts cədvəli ilə tags cədvəli arasında "çoxun çoxa" münasibətini (növbəti dərsdə bu barədə ətraflı məlumat veriləcək) formalaşdırmaq üçün posts_to_tags cədvəlini yaradırıq:

posts_to_tags cədvəli

Nəhayət, posts cədvəlindən tag1, tag2 sütunlarını silirik:

posts cədvəli

Gördüyümüz kimi, cədvəlimizi normallaşdırmaq üçün onu 3 ayrı cədvələ bölməli olduq. İndi həmin cədvəllərlə işləmək və sorğular yazmaq daha asan olacaq.

İkinci normal forma

İkinci normal forma üçün tələblər aşağıdakı kimidir:

  • Cədvəl birinci normal formada (1NF) olmalıdır
  • Cədvəldə bütün sütunlar tamamilə mürəkkəb başlıca açardan (composite key) asılı olmalıdırlar

Mürəkkəb başlıca açar iki və daha çox sütundan ibarət olur. Əgər başlıca açar bir sütundan ibarətdirsə, bu zaman cədvəl artıq ikinci normal formanın tələbinə riayət edir.

0

Şərh yazmaq üçün hesabınıza daxil olun.