Verilənlər bazasının normal formalarla uyğunluğunu analiz edəndə, cədvəllərin strukturuna, onların əlaqələrinə və atributlar arasındakı asılılıqlara baxırıq. Əsas məqsəd — normalizasiya pozuntularını tapmaq və onların performansa, bütövlüyə və verilənlərlə işləməyə necə təsir etdiyini qiymətləndirməkdir.
Sadə dillə desək, bu, sanki mühasibatlıq auditidir: yoxlayırsan ki, pullar hara gəldi yox, düzgün xərclər üzrə bölünüb.
Verilənlər bazasının analizinə praktik yanaşma
İstənilən verilənlər bazasında biz üç əsas sual veririk, bunlar da üç normal formaya uyğundur.
Tutaq ki, bizdə anbar üçün belə bir cədvəl var:
| product_id | product_name | supplier_name | supplier_phone | stock_quantity |
|---|---|---|---|---|
| 1 | Mismarlar | StroyKomplekt | +12301112233 | 150 |
| 2 | Şurup | KrepejPro | +12306667788 | 200 |
| 3 | Qayka | StroyKomplekt | +12301112233 | 100 |
Bu cədvəli normal formalarla necə yoxlamaq olar?
Xatırladım, cədvəl 1NF-dədir, əgər:
- Hər hüceyrədə yalnız bir dəyər var.
- Cədvəldə eyni tip məlumat üçün təkrarlanan sütunlar yoxdur.
Bizim nümunədə 1NF pozuntusu yoxdur: hər hüceyrədə atomik dəyər var. Deməli, cədvəl 1NF-ə gətirilib. Super! Davam edirik.
Cədvəl 2NF-dədir, əgər:
- O, 1NF-dədir.
- Bütün açar olmayan atributlar yalnız tam əsas açardan asılıdır (yəni, onun bir hissəsindən yox).
Bu cədvəldə görürük ki, supplier_name və supplier_phone yalnız product_id-dən — əsas açardan asılıdır. Amma burada məlumat təkrarı var: eyni təchizatçı üçün ad və telefon bir neçə sətrdə saxlanılır.
Cədvəli 2NF-ə gətirmək üçün onu iki cədvələ bölə bilərik:
Products cədvəli:
| product_id | product_name | supplier_id | stock_quantity |
|---|---|---|---|
| 1 | Mismarlar | 1 | 150 |
| 2 | Şurup | 2 | 200 |
| 3 | Qayka | 1 | 100 |
Suppliers cədvəli:
| supplier_id | supplier_name | supplier_phone |
|---|---|---|
| 1 | StroyKomplekt | +78901112233 |
| 2 | KrepejPro | +78906667788 |
İndi hər təchizatçı yalnız bir dəfə göstərilib və cədvəllər arasında əlaqə xarici açar supplier_id ilə qurulub.
Cədvəl 3NF-dədir, əgər:
- O, 2NF-dədir.
- Bütün açar olmayan atributlar yalnız əsas açardan asılıdır, başqa açar olmayan atributlardan yox.
Normalizasiya olunmuş Products və Suppliers cədvəllərində heç bir tranzitiv asılılıq yoxdur. Deməli, cədvəllər 3NF-ə gətirilib.
Praktik tapşırıq
Tutaq ki, bizdə "Universitet" adlı ilkin cədvəl var
| student_id | student_name | course_name | professor_name | professor_email |
|---|---|---|---|---|
| 101 | Otto Lin | Riyaziyyat | Peter Pen | pen@university.com |
| 102 | Anna Song | Fizika | Alex Sid | sid@university.com |
| 103 | Otto Lin | Fizika | Alex Sid | sid@university.com |
- Cədvəli normal formalarla uyğunluğa görə yoxlayın.
- Əgər lazımdırsa, onu 1NF, 2NF və 3NF-ə gətirin.
Həll
ADDIM 1: 1NF üçün yoxlama
Cədvəl artıq 1NF-dədir: hər hüceyrədə bir dəyər var.
ADDIM 2: 2NF üçün yoxlama
Cədvəl 2NF-i pozur: müəllimlər haqqında məlumat (ad və email) təkrarlanır. Onu ayrıca cədvələ çıxara bilərik:
Students cədvəli:
| student_id | student_name |
|---|---|
| 101 | Otto Lin |
| 102 | Anna Song |
Courses cədvəli:
| course_id | course_name | professor_id |
|---|---|---|
| 1 | Riyaziyyat | 1 |
| 2 | Fizika | 2 |
Professors cədvəli:
| professor_id | professor_name | professor_email |
|---|---|---|
| 1 | Peter Pen | pen@university.com |
| 2 | Alex Sid | sid@university.com |
Enrollments cədvəli:
| enrollment_id | student_id | course_id |
|---|---|---|
| 1 | 101 | 1 |
| 2 | 102 | 2 |
| 3 | 103 | 2 |
ADDIM 3: 3NF üçün yoxlama
Yeni struktura tranzitiv asılılıqlar yoxdur. Cədvəllər 3NF-ə uyğundur.
Praktik məsləhətlər
- Lazımsız yerə ideala can atma. Bəzən həddindən artıq normalizasiya sorğuları çətinləşdirir.
- Analizə detektiv kimi yanaş. Dublikatları, artıq asılılıqları və başqa "anomaliyaları" axtar.
- Performansı unutma. Normalizasiya — məlumatın təmizliyi ilə sürət arasında balansdır.
İndi sən verilənlər bazasında problemləri tapıb həll edə bilirsən, istənilən ölçüdə bazada "reviziya" aparmağa hazırsan. Unutma: yaxşı verilənlər bazası — təkcə funksional yox, həm də gözəl (yəni normalizasiya olunmuş) layihədir.
GO TO FULL VERSION