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üə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üə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üə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üə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:
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.