Boyce-Codd Normal Forması (3.5NF) - BCNF

Boyce-Codd Normal Forması (3.5NF)

Bu normal forma 3.5 normal forma da deyilir. Bu normal forma

  • 3NF-in bütün tələblərinə cavab verir
  • Namizəd açarlarının digər atributlardan qismən asılılığı yoxdursa, istənilən cədvəlin BCNF-də olduğu deyilir. yəni; (x, y, z) sütunlu hər hansı bir cədvəldə, (x, y) -> z və z-> x olduqda BCNF pozuntusudur. Əgər (x, y) birləşmiş düymələr və (x, y) -> z olarsa, birbaşa və ya qismən heç bir tərs asılılıq olmamalıdır.

Yuxarıdakı 3NF nümunəsində STUDENT_ID, TƏLƏBƏ cədvəlindəki Əsas açar, ZIP isə ZIPCODE cədvəlindəki əsas açardır. Hər birində başqa heç bir açar sütunu yoxdur masaları funksional asılılığı müəyyən edir. Beləliklə, BCNF formasındadır. Yəni STUDENT_ID ilə STUDENT cədvəlindən STUDENT_NAME və ZIP əldə edə bilərik. Eynilə, ZIP dəyəri ilə, STREET və CITY -ni ZIPCODE cədvəlindən ala bilərik

Başqa bir nümunəni nəzərdən keçirək - əsas fənləri alan hər bir tələbənin fərqli məsləhətçi müəllimlərini nəzərdən keçirək. Hər bir tələbənin eyni fənlər üzrə fərqli məsləhətçi müəllimləri olacaqdır. BCNF pozuntusu olan aşağıdakı əlaqələr mövcuddur.

(STUDENT_ID, MAJOR_SUBJECT) -> ADVISORY_LECTURER

ADVISORY_LECTURER -> MAJOR_SUBJECT

yəni kompozit namizəd açarının bir hissəsi olan Major_Subject, eyni cədvəlin qaydaya zidd olan açarsız atributu təyin olunur.

Cədvəlin altında da bütün anomaliyalar olacaqdır. Aşağıdakı cədvəldən hər hansı bir tələbəni silsək, mühazirəçinin məlumatlarını da silir. Verilənlər bazasına yeni bir müəllim / tələbə əlavə etsək, bununla əlaqəli digər məlumatlara da ehtiyac var. Ayrıca, hər hansı bir tələbə üçün mövzunu yeniləyiriksə, mühazirəçi məlumatının da dəyişdirilməsi lazımdır, əks halda bu uyğunsuzluğa səbəb olacaqdır.

Beləliklə, cədvəli parçalamalıyıq ki, ortadan qaldırsın, belə əlaqəni aradan qaldırsın. İndi aşağıdakı yeni cədvəllərdə qarşılıqlı asılı birləşmiş düymələr yoxdur (üstəlik hər iki cədvəldə birləşmiş açar yoxdur). Hər hansı bir mühazirəçi əlavə etmək / yeniləmək / silmək lazımdırsa, STUDENT_MAJOR cədvəlinə təsir etmədən birbaşa STUDENT_ADVISOR cədvəlinə qeyd əlavə edə bilərik. Bir tələbə üçün hər hansı bir mövzu əlavə etməyimiz / yeniləməyimiz / silməyimiz lazımdırsa, bunu STUDENT_ADVISOR cədvəlinə təsir etmədən birbaşa STUDENT_MAJOR cədvəlində edə bilərik. Hər iki məsləhətçiyə və əsas mövzu məlumatlarına sahib olduqda, hər iki cədvəli birbaşa əlavə edə / yeniləyə bilərik. Beləliklə, verilənlər bazasındakı bütün anamoliyaları aradan qaldırdıq.

Translate »