Verilənlər bazasında bir-çox əlaqə o zaman baş verir ki, Cədvəl A-dakı hər bir qeyd Cədvəl B-də çoxlu əlaqəli qeydlərə malik ola bilər, lakin Cədvəl B-dəki hər bir qeyd Cədvəl A-da yalnız bir müvafiq qeydə malik ola bilər.
Verilənlər bazasında bir-çox əlaqəsi ən ümumi əlaqəli verilənlər bazası dizaynıdır və yaxşı dizaynın əsasını təşkil edir.
Verilənlər bazaları həm də birə-bir əlaqəni və çox-çox əlaqəsini həyata keçirə bilər.
Bir-çox əlaqə nümunəsi
Müəllim və onun öyrətdiyi kurslar arasındakı əlaqəni nəzərdən keçirin. Müəllim birdən çox dərs deyə bilər, lakin kursun müəllimlə eyni əlaqəsi olmayacaq.
Ona görə də Müəllimlər cədvəlindəki hər qeyd üçün Kurslar cədvəlində çoxlu qeydlər ola bilər. Bu nümunə bir-çox əlaqəni göstərir: bir müəllimdən bir neçə kursa.
Bir-çox əlaqə qurmaq niyə vacibdir
Bir-çox əlaqəni təmsil etmək üçün sizə ən azı iki cədvəl lazımdır. Gəlin görək niyə.
İlk Normal Forma Dizaynına Uyğunluq
Ola bilsin ki, adı və tədris olunan kursları qeyd etmək istədiyimiz cədvəl yaratmışıq. Müəllimlər və Kurslar cədvəlini belə tərtib edə bilərik:
Müəllim_şəxsiyyəti | Müəllim_Adı | Kurs |
---|---|---|
Müəllim_001 | Karmen | Biologiya |
Müəllim_002 | Vronika | Riyaziyyat |
Müəllim_003 | Xorxe | İngilis |
Karmen iki və ya daha çox kurs öyrədirsə? Bu dizaynla iki seçimimiz var. Onu Carmenin mövcud rekorduna əlavə edə bilərik, məsələn:
Müəllim_şəxsiyyəti | Müəllim_Ad | Kurs |
---|---|---|
Müəllim_001 | Karmen | Biologiya, Riyaziyyat |
Müəllim_002 | Vronika | Riyaziyyat |
Müəllim_003 | Xorxe | İngilis |
Lakin yuxarıdakı dizayn çevik deyil və sonra data daxil etdiyiniz, redaktə etdiyiniz və ya sildiyiniz zaman problemlərlə nəticələnə bilər. Bu, data axtarışını çətinləşdirir.
Bu dizayn həm də verilənlər bazası normallaşdırılmasının birinci prinsipini, Birinci Normal Formanı (1NF) pozur, hansı ki, hər bir cədvəl xanasında tək, diskret məlumat parçası olmalıdır.
İkinci Normal Forma Qaydası
Başqa bir dizayn alternativi Carmen üçün ikinci rekord əlavə etmək ola bilər:
Müəllim_ID | Müəllim_Ad | Kurs |
---|---|---|
Müəllim_001 | Karmen | Biologiya |
Müəllim_001 | Karmen | Riyaziyyat |
Müəllim_002 | Vronika | Riyaziyyat |
Müəllim_003 | Xorxe | İngilis |
Bu yanaşma 1NF-ə uyğundur, lakin yenə də zəif verilənlər bazası dizaynıdır, çünki o, artıqlığı təqdim edir və lazımsız yerə böyük verilənlər bazasını şişirdə bilər. Daha da əhəmiyyətlisi, data uyğunsuz ola bilər.
Məsələn, Karmenin adı dəyişsə nə olacaq? Data ilə işləyən kimsə onun adını bir qeyddə yeniləyə, ikinci qeyddə isə yeniləyə bilməz.
Bu dizayn 1NF-ə uyğun gələn İkinci Normal Forma (2NF) standartını pozur və eyni zamanda çoxsaylı qeydlərin artıqlığından qaçınmalıdır. 2NF qaydası buna verilənlərin alt dəstlərini çoxsaylı cədvəllərə ayıraraq və onlar arasında əlaqə yaratmaqla nail olur.
Birdən çox əlaqə ilə verilənlər bazasını necə tərtib etmək olar
Müəllimlər və Kurslar cədvəlində bir-çox əlaqəsini həyata keçirmək üçün cədvəlləri ikiyə bölün və xarici açardan istifadə edərək əlaqələndirin.
Burada Müəllimlər cədvəlindəki Kurs sütununu sildik:
Müəllim_ID | Müəllim_Ad |
---|---|
Müəllim_001 | Karmen |
Müəllim_002 | Vronika |
Müəllim_003 | Xorxe |
Budur Kurslar cədvəli. Nəzərə alın ki, onun xarici açarı, Teacher_ID, Müəllimlər cədvəlində kursu müəllimlə əlaqələndirir:
Kursun_ID | Kursun_Adı | Müəllim_şəxsiyyəti |
---|---|---|
Kurs_001 | Biologiya | Müəllim_001 |
Kurs_002 | Riyaziyyat | Müəllim_001 |
Kurs_003 | İngilis | Müəllim_003 |
Biz xarici açardan istifadə edərək Müəllimlər və Kurslar cədvəli arasında əlaqə yaratdıq. Bu tənzimləmə bizə Karmenin həm biologiya, həm də riyaziyyat, Xorxenin isə ingilis dilini öyrətdiyini bildirir.
Bu dizaynın hər hansı mümkün ixtisarın qarşısını necə aldığını, fərdi müəllimlərə birdən çox kurs öyrətməyə imkan verdiyini və bir-çox əlaqəsini həyata keçirdiyini görə bilərik.