Cədvəl ikinci normal formadadır, əgər:
- Artıq birinci normal formadadır (1NF).
- Hər bir açar olmayan sütun bütün əsas açardan asılıdır, təkcə açarın bir hissəsindən yox.
Əgər əsas açar bir neçə sahədən ibarətdirsə (birləşmiş açar), heç bir açar olmayan atribut (sütun) yalnız bu açarın bir hissəsindən asılı olmamalıdır. Başqa sözlə, 2NF qismən asılılıqları aradan qaldırır.
2NF pozuntusuna nümunə
Tutaq ki, bizdə student_courses (Tələbələr və Kurslar) cədvəli var, burada tələbələr, onların kursları və müəllimləri haqqında məlumat saxlanılır:
| student_id | course_id | course_name | instructor_name |
|---|---|---|---|
| 1 | 101 | Riyaziyyat | Lin |
| 1 | 102 | Ədəbiyyat | Song |
| 2 | 101 | Riyaziyyat | Lin |
student_idvəcourse_idbirlikdə birləşmiş əsas açar yaradır.- Amma fikir ver,
course_namevəinstructor_namesütunları yalnızcourse_id-dən asılıdır, bütün cütdən (student_id,course_id) yox.
Bax budur, qismən asılılıq! course_name və instructor_name yalnız birləşmiş açarın bir hissəsindən (course_id) asılıdır. Bu, 2NF prinsiplərinin pozulmasıdır.
Cədvəli 2NF-ə gətirmək
Bizim işimiz — qismən asılılığı aradan qaldırmaq, cədvəli iki yerə bölməkdir. Bu, artıq məlumatdan qurtulmağa və məlumatların uyğunluğunu yaxşılaşdırmağa kömək edəcək.
Kurslar haqqında məlumatı ayrıca courses cədvəlinə çıxarırıq:
| course_id | course_name | instructor_name |
|---|---|---|
| 101 | Riyaziyyat | Lin |
| 102 | Ədəbiyyat | Song |
Əsas cədvəli isə belə edirik:
| student_id | course_id |
|---|---|
| 1 | 101 |
| 1 | 102 |
| 2 | 101 |
İndi hər sütun bütün əsas açardan asılıdır. Məlumatları elə böldük ki, hər şey məntiqli bağlıdır və 2NF pozuntusu aradan qalxdı.
Artıqlığın aradan qaldırılması magiyası
Normallaşdırmadan əvvəlki cədvələ bax. instructor_name sütununda "Lin" adı təkrar-təkrar yazılıb. Təsəvvür elə, minlərlə sətr olan real bazada nə qədər belə təkrar ola bilər? Cədvəlləri bölməklə artıq məlumatı aradan qaldırdıq və səhv ehtimalını azaltdıq, məsələn, yazı səhvləri ("Lin" vs "Ling").
Həyatdan nümunə
Təsəvvür elə, sən məhsullar üzrə sifarişləri qeyd edirsən. Səndə belə bir order_items (sifarişlər və məhsullar) cədvəli var, burada order_id və item_id əsas açarı təşkil edir:
| order_id | item_id | item_name | price |
|---|---|---|---|
| 1 | 101 | Laptop | 50000 |
| 1 | 102 | Siçan | 1000 |
| 2 | 101 | Laptop | 50000 |
Gördüyün kimi, məhsul adları və qiymətlər təkrarlanır. Bu, 2NF pozuntusunun əlamətidir, çünki item_name və price yalnız item_id-dən asılıdır.
Cədvəli 2NF-ə gətirmək üçün items cədvəli yaradırıq:
| item_id | item_name | price |
|---|---|---|
| 101 | Laptop | 50000 |
| 102 | Siçan | 1000 |
Və order_items cədvəlini dəyişirik, yalnız sifariş və məhsul id-lərini saxlayırıq:
| order_id | item_id |
|---|---|
| 1 | 101 |
| 1 | 102 |
| 2 | 101 |
İndi məlumatlar kod review-dan sonra olduğu kimi təmizdir — heç bir artıq məlumat yoxdur.
Praktiki tapşırıq: özün yoxla!
Tutaq ki, səndə employee_projects cədvəli var, burada işçilər, onların layihələri və layihə menecerləri haqqında məlumat saxlanılır:
| employee_id | project_id | project_name | manager_name |
|---|---|---|---|
| 1 | 201 | CRM Upgrade | Lin |
| 2 | 202 | Website Revamp | Ming |
| 1 | 202 | Website Revamp | Ming |
Çalış:
- 2NF tələblərini pozan asılılıqları tap.
- Cədvəli iki yerə böl, pozuntunu aradan qaldır.
Niyə 2NF vacibdir?
Ümumiyyətlə, ikinci normal formaya (2NF) niyə əməl etməliyik? Çox sadə: məlumatlar təkrarlanmasın və qarışıqlıq yaranmasın deyə. Qismən asılılıqları aradan qaldıranda cədvəllər daha təmiz olur — artıq məlumat olmur, məsələn, hər sətrdə eyni müəllim adı. Bu, yaddaşa qənaət edir və uyğunsuzluq riskini azaldır: bir yerdə adı dəyişdin — hər yerdə yeniləndi.
Üstəlik, belə bazaya sorğu yazmaq rahatdır: struktur məntiqlidir və məlumatlar bir yerdədir, filter və group daha tez və etibarlı işləyir. Bəli, bunun üçün bir az daha çətin SQL sorğuları və JOIN-lar yazmaq lazım gəlir, çünki cədvəllər çoxalır. Amma bir JOIN, yüz dəfə eyni soyadı yazmaqdan yaxşıdır. Çox vaxt normallaşdırma buna dəyər.
Real layihələrlə inteqrasiya
2NF bilikləri sənə lazım olacaq:
- Verilənlər bazası dizaynında: cədvəllərdə xaosun qarşısını almağa kömək edir.
- Müsahibədə: tez-tez soruşurlar və ya cədvəlləri normal formaya gətirməyi istəyirlər.
- Real işdə: mövcud bazanı optimallaşdırmaq tapşırılarsa, "monolit" cədvəlləri normallaşdırılmış hissələrə bölmək lazım gələcək.
Ikinci normal forma (2NF) birləşmiş əsas açarlı cədvəldə qismən asılılıqları aradan qaldırmağa kömək edir. Cədvəlləri məntiqi bloklara bölürük ki, hər sütun yalnız bütün açardan asılı olsun, hissəsindən yox. Bu, bazanın keyfiyyətini artırır, artıq məlumatı aradan qaldırır və çevikliyini artırır. Üçüncü normal formaya hazırsan? Davam edirik!
GO TO FULL VERSION