Heç vaxt database cədvəlini görmüsən ki, elə bil qarışıq anbar kimidir? Bir hüceyrədə telefonların siyahısı, o birində ünvanlar bir uzun cümlə kimi yazılıb, üçüncüsündə isə bir neçə tarix vergüllə ayrılıb. Belə bir "xaos" məlumatların axtarışını, yenilənməsini və idarə olunmasını çətinləşdirir. Amma bunun bir çıxış yolu var. Onun adı — məlumatların normallaşdırılmasıdır.
Sadə dillə desək, məlumatların normallaşdırılması — məlumatların cədvəllərdə elə təşkil olunması prosesidir ki, məlumatların təkrarlanması minimuma endirilsin və onların yenilənməsi, silinməsi və əlavə olunması ilə bağlı problemlər aradan qaldırılsın.
Bax, normallaşdırma bu problemləri həll edir:
- Məlumatların təkrarlanmasının aradan qaldırılması. Niyə eyni informasiyanı iki dəfə, ya da üç dəfə saxlamalıyıq? Bu, bazanın həcmini artırır və məlumatların uyğunsuzluğuna gətirib çıxarır.
- Anomaliyaların minimuma endirilməsi. Bilirsən də, həyatda da anomaliyalar olur. Məsələn, keçmiş iş yoldaşını kontakt siyahısından silməyi unutmusan. Database-də də belə şeylər baş verir. Normallaşdırma belə gülməli vəziyyətlərin qarşısını alır.
- Məlumat strukturunun sadələşdirilməsi. Struktur nə qədər sadə olsa, idarə etmək də bir o qədər asan olur.
- Database-in işinin sürətlənməsi. Məlumat azdırsa, sorğular da daha sürətli işləyir.
Bəs normallaşdırma olmasa nə olar?
Normallaşdırma olmadan database-dəki məlumatlar "yapışqan" olur — daim artıq informasiyanı da özü ilə aparır.
Təsəvvür elə cədvəl Tələbələr:
| Tələbə ID | Ad | Kurslar |
|---|---|---|
| 1 | Otto Lin | Riyaziyyat, Fizika |
| 2 | Anna Song | Kimya |
| 3 | Otto Lin | Biologiya, Kimya |
Nə problem ola bilər:
- Məlumatların təkrarlanması:
Otto Linbir neçə dəfə çıxır. Niyə? Çünki o, bir neçə kursda oxuyur. - Məlumatı yeniləmək çətindir: əgər Otto Lin-in telefon nömrəsi dəyişibsə, bütün onunla bağlı qeydləri tapıb nömrəni yeniləməliyik.
- Məlumatı silmək bütövlüyü poza bilər: təsəvvür elə, Otto kursları atmaq qərarına gəlib. Əgər onun bütün sətrlərini silsək, onun haqqında bütün məlumatı, o cümlədən adını da itirəcəyik.
Normallaşdırma nə vaxt artıq olur?
Düzünü desək, normallaşdırma elə bil sərt cədvəl kimidir: həmişə yaxşıdır, amma bəzən spontanlıq da istəyirsən. Əslində elə hallar olur ki, denormallaşdırma daha üstün olur:
- Analitik database-lərdə, burada əsas məsələ sorğuların sürətidir, məlumatların həcminin azaldılması yox.
- Struktur çox mürəkkəb olanda: əgər normal formaları qorumaq üçün onlarla cədvəllə işləməli oluruqsa, sorğular getdikcə daha ağır olur.
- Tez-tez istifadə olunan aggregatlar üçün: əgər daim eyni cəmi hesablamaq lazımdırsa, onu cədvəldə saxlamaq daha yaxşıdır.
Tutaq ki, bizdə online mağaza var. Əgər istifadəçilər tez-tez sifarişlərin ümumi məbləğini axtarırsa, bu məbləği birbaşa Sifarişlər cədvəlində saxlamaq olar, hər dəfə yenidən hesablamağa ehtiyac yoxdur.
Sadəcə yadında saxla ki, denormallaşdırma kompromisdir. O, məlumatların yenilənməsi zamanı səhvlərin yaranma ehtimalını artırır.
Problemli struktur nümunəsi və onun normallaşdırılması
Gəlin normallaşdırmadan əvvəl cədvələ baxaq:
| Sifariş ID | Müştəri | Məhsullar | Sifariş məbləği |
|---|---|---|---|
| 1 | Otto Lin | Telefon, Qulaqlıq | 20000 |
| 2 | Anna Song | Soyuducu | 30000 |
| 3 | Otto Lin | Televizor | 40000 |
Burada açıq-aşkar pozuntu var:
- Müştəri məlumatları təkrarlanır.
- Məhsullar siyahı şəklində saxlanılır — bu, məlumatların atomarlığı prinsipinin pozulmasıdır.
Normallaşdırmadan sonra
Bu cədvəli üç yerə böləcəyik: Cədvəl Müştərilər
| Müştəri ID | Ad |
|---|---|
| 1 | Otto Lin |
| 2 | Anna Song |
Cədvəl Məhsullar
| Məhsul ID | Adı | Dəyəri |
|---|---|---|
| 1 | Telefon | 10000 |
| 2 | Qulaqlıq | 10000 |
| 3 | Soyuducu | 30000 |
| 4 | Televizor | 40000 |
Cədvəl Sifarişlər
| Sifariş ID | Müştəri ID | Məhsul ID |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 1 | 2 |
| 2 | 2 | 3 |
| 3 | 1 | 4 |
İndi bizdə:
- Məlumatların təkrarı yoxdur.
- Hər məhsul ayrıca sətrdədir.
- Yeni məhsul və sifariş əlavə etmək asandır.
Normallaşdırma — xaosdan nizam yaratmaq sənətidir. Bəli, bəzən çox sərt və tələbkar görünə bilər, amma onun əsas məqsədi bütün bu əziyyətə dəyər. Növbəti leksiyalarda normal formaları ardıcıllıqla öyrənəcəyik: əvvəlcə 1NF, sonra 2NF, və nəhayət 3NF. Davam, nizamlı məlumatlar dünyasına!
GO TO FULL VERSION