Verilənlər bazasında bir-çox əlaqələr

Bir verilənlər bazasında bir -bir çox əlaqələr Cədvəl A-dəki hər bir qeyd Cədvəl B-də bir çox əlaqəli qeydlərə malik olanda baş verir, ancaq C Tablo B-də olan hər bir qeyd Cədvəl A-də yalnız bir müvafiq qeyd ola bilər. verilənlər bazası ən ümumi rabitə bazası dizaynıdır və yaxşı dizaynın mərkəzindədir.

Bir müəllim və öyrəndikləri kurslar arasındakı əlaqəni düşünün. Müəllim bir çox kursları öyrədə bilər, lakin kurs müəllimlə eyni əlaqəyə malik olmayacaqdır.

Buna görə, bir müəllimlər masasında hər bir qeyd üçün Kurslar masasında bir çox qeyd ola bilər. Bu bir-çox əlaqələrdir: bir müəllim birdən çox kursa.

Niyə bir-bir çox əlaqələrin qurulması vacibdir

Birdən-çoxlu əlaqəni təmsil etmək üçün ən azı iki masaya ehtiyacınız var. Niyə baxaq.

Yəqin ki, biz adı və kursları yazmaq istədikdə müəllimlər üçün bir stol yaratdıq. Bunu aşağıdakı kimi tərtib edə bilərik:

Müəllimlər və kurslar
Müəllim_ID Müəllimin adı Kursu
Müəllim_001 Carmen Biologiya
Müəllim_002 Veronica Math
Müəllim_003 Jorge İngilis dili

Carmen iki və ya daha çox kurs öyrədirsə? Bu dizaynla iki variantımız var. Biz bunu Carmen-ın mövcud rekorduna belə əlavə edə bilərik:

Müəllimlər və kurslar
Müəllim_ID Müəllim _Name Kursu
Müəllim_001 Carmen Biologiya, Math
Müəllim_002 Veronica Math
Müəllim_003 Jorge İngilis dili

Bununla birlikdə, yuxarıda göstərilən layihə qeyri-mümkündür və məlumatları əlavə etmək, redaktə etmək və silmək üçün problem yarada bilər.

Məlumatı axtarmaq çətinləşdirir. Bu dizayn verilənlər bazasının normallaşması ilk prinsipini pozur, İlk Normal Form (1NF) , hər bir masa hüceyrəsində bir, ayrı bir məlumat parçası olmalıdır.

Digər bir dizayn alternativi, Carmen üçün ikinci bir qeyd əlavə etmək olar:

Müəllimlər və kurslar
Müəllim _ID Müəllim _Name Kursu
Müəllim_001 Carmen Biologiya
Müəllim_001 Carmen Math
Müəllim_002 Veronica Math
Müəllim_003 Jorge İngilis dili

Bu, 1NF-yə sadiqdir, amma artıq zəif verilənlər bazası dizaynıdır, çünki artıqlıqdan istifadə edir və çox böyük məlumat bazasını lazımsız şəkildə şişirtməyə bilər. Daha da əhəmiyyətlisi, məlumatlar uyğunsuz ola bilər. Məsələn, əgər Carmenin adı dəyişibsə? Məlumatlarla işləyən kimsə adını bir qeyddə yeniləyə və ikinci qeyddə yeniləməyə başlamaz. Bu dizayn 1NF-yə riayət edən İkinci Normal Formu (2NF) pozur və ayrıca məlumatların alt kümelerini birdən çox cədvəllərə ayıraraq və onların arasında əlaqəni yaratmaqla çoxlu qeydlərin təkrarlanmasından çəkinməlidir.

Birdən-çox əlaqələrlə məlumat bazasını necə tərtib etmək

Müəllimlər və Kurslar tablosunda bir-çox əlaqələri həyata keçirmək üçün, cədvəlləri ikiyə böldük və onları xarici bir əsasla bağlayırıq .

Burada Öğretmenler tablosunda Kurs sütununu çıxardıq:

Müəllimlər
Müəllim _ID Müəllim _Name
Müəllim_001 Carmen
Müəllim_002 Veronica
Müəllim_003 Jorge

Və burada Kurslar masası. Qeyd edək ki, xarici əsas, Teacher_ID, müəllimlər üçün müəllim kursuna bir dərs bağlayır:

Kurslar
Course_ID Kursun_adı Müəllim_ID
Kurs_001 Biologiya Müəllim_001
Kurs_002 Math Müəllim_001
Kurs_003 İngilis dili Müəllim_003

Xarici bir əsas istifadə edərək müəllimlər ilə Kurslar arasında əlaqələr inkişaf etdirdik.

Bu da Biologiya və Riyaziyyatın Carmen tərəfindən öyrədildiyini və Jorge'nin İngilis dili öyrəddiyini bildirir.

Bu dizaynın mümkün olan hər hansı bir işdən qaçınmadığını, fərdi müəllimlərin bir çox kursları öyrətməsinə və bir-bir çox əlaqələrə necə tətbiq etdiyini görə bilərik.

Verilənlər bazaları da bir-bir əlaqələr və çox-çox əlaqələr həyata keçirə bilər.