SQL-də normallaşma

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

İnşa edəcəyimiz kitabxana verilənlər bazasını nəzərdən keçirək. Verilənlər bazasının cədvəllərini müəyyənləşdirdik. Bütün cədvəlləri yaratdığımıza baxmayaraq, burada normallaşmadan istifadə edərək bu qədər cədvəl yaratma yanaşmağımızı görək.

Kitabxana məlumat bazasının ilk və əsas cədvəli KİTABLARdır. Kitab dedikdə kitabxananın normal işləməsi üçün onunla əlaqəli və cədvəldə təqdim edilməsi lazım olan bütün maddələri sadalayaq.


Yuxarıda göstərilən siyahıda indi kateqoriya, nəşriyyatdan kitabxanadakı nüsxə sayına qədər olan məlumatların əksəriyyəti var. Yuxarıdakı atributların siyahısı üçün bu cədvəl üçün KİTABLAR üçün də bir neçə məlumata baxaq.

Birinci Normal Form

1NF-yə görə, cədvəldəki hər bir qeyd bir əsas açar sütunla müəyyən edilməli və təkrarlanan atributlar qrupu olmamalıdır.

Yuxarıdakı KİTABLAR cədvəlindəki qeydləri müşahidə etdikdə:

  • Bu cədvəldə təkrarlanan atribut qrupları yoxdur
  • Hər bir qeydin əsas düyməni - ISBN-dən istifadə etməklə müəyyənləşdirilməsi bir qədər çətin deyil. Hələ hər bir qeyd həm ISBN, həm də BOOK_COPY_NUM əsas açar olaraq nəzərə alınaraq müəyyən edilə bilər. Beləliklə yuxarıdakı cədvəl 1NF-dədir.

İkinci Normal Form

2NF-ə görə,

  • ilk normal formadadır
  • Hər bir əsas olmayan atribut birincil açarın istifadəsi ilə müəyyən edilir
  • Bir cədvəldə bir neçə sətir olması üçün tətbiq olunan bütün məlumat dəsti silinərək yeni bir cədvələ yerləşdirilməlidir. Və bu yeni cədvəl və ana cədvəl xarici açarın istifadəsi ilə əlaqəli olmalıdır.

Burada kitablar 1NF-dədir. Beləliklə, ilk şərt yerinə yetirilir. İkinci şərtə görə, birincil açar, digər açar olmayan atributları özünəməxsus şəkildə müəyyənləşdirmir. Buna görə ikinci şərti təmin etmir. Eyni qeydin birdən çox satırı var. Beləliklə, cədvəli 2NF-də olması üçün dəyişdirməliyik. Bu cədvəli 2NF-ə gətirmək üçün nə etmək lazımdır? İlk vəzifə təkrarlanan qeydlərdən qurtarmaqdır.

Hansı xüsusiyyət cədvəldəki qeydləri təkrar edir? Qeydləri lazımsız edən cədvəldəki BOOK_COPY_NUM atributudur. Buna görə də ayrı bir cədvəl saxlayaq - BOOK_COPY bu cədvəldə kitabın surət detallarını və xarici açar kimi ISBN -ni saxlamaq üçün. Ancaq bunun da əsas açarı olmalıdır. Yeni cədvəlin əsas açarı BOOK_COPY həm ISBN, həm də BOOK_COPY_NUM olmalıdır, çünki yalnız ISBN surətləri müəyyən etmək üçün tək istifadə edilə bilməz. Beləliklə, yuxarıdakı cədvəl ikiyə bölünür masaları aşağıdakı kimi:


İndi cədvəldəki qeydlər də cədvəllərə bölünəcəkdir.

BOOK_COPY cədvəllərində təkrarlanan qeydlər yoxdur. Birincil açara malikdir, həmçinin xarici düymədən istifadə edərək xəritələnir. Beləliklə yeni masa 2NF-dədir.

KİTABLAR cədvəlində yalnız ISBN kitabları müəyyənləşdirmək üçün kifayətdir. Artıq heç bir məlumat yoxdur. Beləliklə KİTABLAR da 2NF-dədir.

Üçüncü Normal Form

3NF-ə görə,

  • həm 1NF, həm də 2NF-in bütün tələblərinə cavab verməlidir
  • Birincil açarla əlaqəli olmayan hər hansı bir sütun varsa, onları çıxarın və ayrı bir cədvələ qoyun, hər iki cədvəli xarici düymə ilə əlaqələndirin; heç bir keçid asılılığı olmamalıdır.

İndi hər iki cədvəlimiz 1NF və 2NF-dədir. Buna görə birinci şərt təmin edilir. Ancaq ikinci şərt təmin edilmir, çünki birincil açarla əlaqəli olmayan kateqoriya kateqoriyası adı və naşir adı var. Kitabla əlaqəlidirlər, lakin onları müəyyənləşdirmək üçün müvafiq şəxsiyyət vəsiqələri var. Buna görə eyni cədvəldə əlavə ad sütunları göstərməyə ehtiyac yoxdur. Kitabların sayı eyni kateqoriyadan və ya naşirdən artdıqca hər dəfə adlarını daxil edəcəyik. Bu, KİTABLAR cədvəlində lazımsız məlumatlar yaradacaqdır. Buna görə də bu adları KİTABLARDAN silmək və sırasıyla CATEGORY və PUBLISHER kimi ayrı bir cədvələ qoyaq. Hər iki yeni cədvəl sırasıyla əsas düymələrindən (CATEGORY_ID VƏ PUBLISHER_ID) istifadə edərək BOOKS cədvəlinə uyğunlaşdırılır. İstəsək, yeni cədvələ əlavə sütunlar əlavə edə bilərik və ya olduğu kimi buraxa bilərik.

İndi cədvəldəki qeydlər də aşağıdakı kimi bölünəcəkdir:

İndi bu cədvəllər 1NF, 2NF və 3NF-dədir.

Boyce-Codd Normal Forması (3.5NF və ya BCNF)

Bu qayda bildirir:

  • 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.

BCNF-nin ilk şərtini təmin edir. İkinci şərt atributların qismən asılılığından bəhs edir. Ancaq cədvəllərin heç birində atributların qismən asılılığı yoxdur. Buna görə bu cədvəllər BCNF-də də var.

Yuxarıdakı KİTABLAR cədvəlində müəllifimiz olduğunu düşünün. Cədvəlin quruluşu və məlumatları aşağıda göstərildiyi kimi olacaqdır.

Burada düşünün (BOOK_NAME, CATEGORY_ID, AUTHOR). Sonra
(BOOK_NAME, CATEGORY_ID) → AUTHOR ==> (x, y) → z
YAZAR → BOOK_NAME = => z → X
Bu, BCNF pozuntusudur. Bu səbəbdən YAZAR detallarını qorumaq üçün ayrıca bir cədvələ ehtiyacımız var. Lakin Müəllif öz növbəsində öz id, ünvanı, telefonu və s. Olacaqdır. Beləliklə, bir cədvəl - müəllifin təfərrüatlarını qorumaq üçün bir müəllif, bir kitabla müəllif arasında uyğunluğu qorumaq üçün başqa bir cədvəl - BOOK_AUTHOR yaradılmalıdır.

Kitablar və kateqoriya kimliyi arasında eyni əlaqəni görə bilərik. Beləliklə, kitablar və kateqoriya arasındakı xəritəni saxlamaq üçün ayrı bir cədvəl yaradılmışdır. Beləliklə cədvəllər indi aşağıdakı kimi eşlenir:

Beləliklə, bütün bu cədvəllər indi BCNF-dədir.

Dördüncü Normal Form (4NF)

Dördüncü normal forma görə

  • 3NF-in bütün tələblərinə cavab verməlidir
  • Cədvəldəki bir və ya daha çox sətrin atributu eyni cədvəlin birdən çox sətirinin çox dəyərli asılılıqlara səbəb olmasına səbəb olmamalıdır.

Burada bütün masalar 3NF-də olması şərtinə cavab verir. İkinci şərt deyir ki, bir sətrin hər hansı bir xüsusiyyəti başqa sətrin nəticəsini verməməlidir. Yuxarıdakı cədvəllərimizdə fərqli dəyərlər var. Buna görə 4NF-dədir.

Beşinci Normal Form (5NF)

Bir verilənlər bazasının 5NF-də olduğu deyilir, əgər

  • 4NF-də var
  • Artıqlığı və anormallığı aradan qaldırmaq üçün cədvəli daha da parçalaya bilsək və namizəd düymələri ilə parçalanmış cədvəllərə yenidən qoşulduqda, orijinal məlumatları itirməməli və ya hər hansı bir yeni qeyd meydana gəlməməlidir. Sadə sözlə, iki və ya daha çox parçalanmış cədvələ qoşulmaq qeydləri itirməməli və yeni qeydlər yaratmamalıdır.

Buradakı cədvəllər artıq 4NF-dədir, eyni zamanda cədvəllərdə artıq məlumat yoxdur. Buna görə də 5NF-dir.

Bütün bu normallaşma BOOKS cədvəli və əlaqəli atributları ilə həyata keçirilir. Ancaq kitabxanada başqa bir qurum var - BORCU və onların kitab borcları. Bu cədvəllər KİTABLAR və onun uyğunlaşdırılmış cədvəlləri ilə də əlaqələndirilir ki, normallaşmış cədvəllərin hamısı alınsın. Bütün bu təsvirlər və normallaşdırma ilə son cədvəllər aşağıdakı kimi görünəcəkdir.

Bir DB-də bütün normallaşmanı təmin etmək lazım deyil. DB 3NF-yə cavab verirsə, bu kifayətdir. Cədvəlləri normallaşdırdıqca sorğunun daha mürəkkəb olmasına səbəb olur və sistemin səmərəliliyini aşağı salır.

Bu kitabxana sistemində, kateqoriyadakı kimi kitablar və naşir üçün ayrıca bir xəritə cədvəli yaratmış ola bilərik. Ancaq lazım deyil, çünki artıq məlumatlar əldə etmək və ya kitablara və naşirlərə qismən asılılıq ehtimalı nisbətən NILL-dir.

Crack Sistemi Dizayn Müsahibələri
Translate »