CodeGym /Kurslar /SQL SELF /Ikinci normal forma (2NF) prinsipləri

Ikinci normal forma (2NF) prinsipləri

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

Cədvəl ikinci normal formadadır, əgər:

  1. Artıq birinci normal formadadır (1NF).
  2. 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_idcourse_id birlikdə birləşmiş əsas açar yaradır.
  • Amma fikir ver, course_nameinstructor_name sütunları yalnız course_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_nameinstructor_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_iditem_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_nameprice 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

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ış:

  1. 2NF tələblərini pozan asılılıqları tap.
  2. 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!

2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
Cədvəli 2NF-ə gətirmək
Cədvəli 2NF-ə gətirmək
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION