Ma'lumotlar bazasidagi bittadan ko'pga bog'liqlik A jadvalidagi har bir yozuv B jadvalidagi ko'plab bog'langan yozuvlarga ega bo'lishi mumkin, ammo B jadvalidagi har bir yozuv A jadvalida faqat bitta mos yozuvga ega bo'lishi mumkin bo'lganda yuzaga keladi.
Ma'lumotlar bazasidagi bir-ko'p munosabatlari eng keng tarqalgan relyatsion ma'lumotlar bazasi dizayni bo'lib, yaxshi dizaynning asosini tashkil qiladi.
Ma'lumotlar bazalari, shuningdek, yakka-yakka va ko'p-ko'p munosabatlarni amalga oshirishi mumkin.
Birga-koʻp munosabatlarga misol
O'qituvchi va ular o'qitadigan kurslar o'rtasidagi munosabatni ko'rib chiqing. O‘qituvchi bir nechta darslarga dars berishi mumkin, lekin kurs o‘qituvchi bilan bir xil munosabatda bo‘lmaydi.
Shuning uchun, Oʻqituvchilar jadvalidagi har bir yozuv uchun Kurslar jadvalida koʻplab yozuvlar boʻlishi mumkin. Bu misol bittadan ko‘pga munosabatni ko‘rsatadi: bir o‘qituvchidan bir nechta kurslarga.
Nima uchun birdan-koʻp munosabatlarni oʻrnatish muhim
Birga-koʻp munosabatni ifodalash uchun sizga kamida ikkita jadval kerak boʻladi. Keling, sababini bilib olaylik.
Birinchi Oddiy Shakl dizayniga rioya qilish
Ehtimol, biz nom va oʻqitiladigan kurslarni yozib olmoqchi boʻlgan jadval yaratdik. O'qituvchilar va kurslar jadvalini shunday loyihalashimiz mumkin:
Oʻqituvchi_ID | Oʻqituvchi_Ismi | Kurs |
---|---|---|
Teacher_001 | Karmen | Biologiya |
Teacher_002 | Vronika | Matematika |
Teacher_003 | Xorxe | Inglizcha |
Agar Karmen ikki yoki undan ortiq kurslarni oʻrgatsa-chi? Ushbu dizayn bilan bizda ikkita variant mavjud. Biz buni Karmenning mavjud rekordiga qo'shishimiz mumkin, masalan:
Oʻqituvchi_ID | Oʻqituvchi_Ism | Kurs |
---|---|---|
Teacher_001 | Karmen | Biologiya, matematika |
Teacher_002 | Vronika | Matematika |
Teacher_003 | Xorxe | Inglizcha |
Biroq, yuqoridagi dizayn moslashuvchan emas va keyinchalik maʼlumotlarni kiritish, tahrirlash yoki oʻchirishda muammolarga olib kelishi mumkin. Bu maʼlumotlarni qidirishni qiyinlashtiradi.
Ushbu dizayn ma'lumotlar bazasini normallashtirishning birinchi printsipi bo'lgan Birinchi Oddiy shakl (1NF)ni ham buzadi, unda har bir jadval yacheykasida bitta, diskret ma'lumotlar bo'lagi bo'lishi kerak.
Ikkinchi oddiy shakl qoidasi
Boshqa dizayn varianti Karmen uchun ikkinchi rekord qoʻshish boʻlishi mumkin:
Oʻqituvchi_ID | Oʻqituvchi_Ism | Kurs |
---|---|---|
Teacher_001 | Karmen | Biologiya |
Teacher_001 | Karmen | Matematika |
Teacher_002 | Vronika | Matematika |
Teacher_003 | Xorxe | Inglizcha |
Ushbu yondashuv 1NF-ga mos keladi, ammo ma'lumotlar bazasi dizayni hali ham yomon, chunki u ortiqchalikni keltirib chiqaradi va katta ma'lumotlar bazasini keraksiz ravishda to'ldirishi mumkin. Eng muhimi, maʼlumotlar mos kelmasligi mumkin.
Masalan, agar Karmenning ismi o'zgartirilsa-chi? Kimdir maʼlumotlar bilan ishlayotgan boʻlsa, uning ismini bitta yozuvda yangilashi mumkin, ikkinchisida esa uni yangilamasligi mumkin.
Ushbu dizayn Ikkinchi Oddiy Shakl (2NF) standartini buzadi, u 1NFga amal qiladi va bir nechta yozuvlarning ortiqcha boʻlishiga yoʻl qoʻymasligi kerak. 2NF qoidasi bunga maʼlumotlarning quyi toʻplamlarini bir nechta jadvallarga ajratish va ular oʻrtasida munosabat yaratish orqali erishadi.
Ma'lumotlar bazasini qanday qilib bittadan ko'p aloqalar bilan loyihalash mumkin
Oʻqituvchilar va Kurslar jadvalida birdan koʻpga munosabatni amalga oshirish uchun jadvallarni ikkiga boʻling va ularni xorijiy kalit yordamida bogʻlang.
Ustozlar jadvalidagi Kurs ustunini olib tashladik:
Oʻqituvchi_ID | Oʻqituvchi_Ism |
---|---|
Teacher_001 | Karmen |
Teacher_002 | Vronika |
Teacher_003 | Xorxe |
Mana esa Kurslar jadvali. Uning chet el kaliti Teacher_ID kursni O‘qituvchilar jadvalidagi o‘qituvchi bilan bog‘laydi:
Kurs_ID | Kurs_nomi | Oʻqituvchi_ID |
---|---|---|
Kurs_001 | Biologiya | Teacher_001 |
Kurs_002 | Matematika | Teacher_001 |
Kurs_003 | Inglizcha | Teacher_003 |
Biz chet el kaliti yordamida Oʻqituvchilar va Kurslar jadvali oʻrtasida aloqa oʻrnatdik. Bu kelishuv bizga Karmen ham biologiya, ham matematikadan, Xorxe esa ingliz tilidan dars berishini aytadi.
Ushbu dizayn har qanday mumkin boʻlgan ortiqcha ishlarning oldini olishini, individual oʻqituvchilarga bir nechta kurslarni oʻrgatish imkonini berishini va birdan-koʻp aloqasini amalga oshirishini koʻrishimiz mumkin.