Ma'lumotlar bazasida bir-biriga aloqador munosabatlar

Ma'lumotlar bazasida bir-biriga ko'p bo'lgan munosabatlar Jadval A dagi har bir yozuv Jadval Bda ko'plab biriktirilgan yozuvlarga ega bo'lishi mumkin, ammo B-jadvaldagi har bir yozuv A-jadvalda faqat bitta tegishli yozuvga ega bo'lishi mumkin. ma'lumotlar bazasi eng keng tarqalgan ma'lumotlar bazasi hisoblanadi va yaxshi dizaynning markazida joylashgan.

Ustoz va o'qitadigan kurslar o'rtasidagi munosabatni ko'rib chiqing. O'qituvchi ko'p kurslarni o'qitishi mumkin, ammo dars o'qituvchi bilan bir xil munosabatda bo'lmaydi.

Shuning uchun, "O'qituvchilar" stolidagi har bir yozuv uchun "Kurslar" jadvalida ko'plab yozuvlar bo'lishi mumkin. Bu bir-to-ko'p munosabatlar: bir o'qituvchi ko'p kurslarga.

Nima uchun bir-biriga ko'plab munosabatlarni o'rnatish muhim ahamiyatga ega

Ko'pdan-ko'p munosabatlarni ifodalash uchun kamida ikki jadvalga ehtiyoj bor. Keling, nima uchun buni ko'rib chiqaylik.

Ehtimol, biz o'qituvchilar jadvalini yaratdik, unda biz ism va kurslarni yozib olishni xohladik. Buni shunday qilishimiz mumkin:

O'qituvchilar va kurslar
Teacher_ID O'qituvchi_Name Kurs
Teacher_001 Karmen Biologiya
Ustoz_002 Veronica Matematika
Teacher_003 Xorxe Inglizcha

Xo'sh, agar Karmen ikki yoki undan ortiq kursni o'qisa, nima qilsa bo'ladi? Ushbu dizayndagi ikkita variant mavjud. Biz buni Carmenning mavjud rekordiga qo'shamiz:

O'qituvchilar va kurslar
Teacher_ID Ustoz _Name Kurs
Teacher_001 Karmen Biologiya, matematika
Ustoz_002 Veronica Matematika
Teacher_003 Xorxe Inglizcha

Biroq, yuqoridagi dizayn moslashuvchan emas va keyinchalik ma'lumotlarni qo'shish, tahrirlash yoki o'chirishda muammolarga olib kelishi mumkin.

Ma'lumotni qidirishni qiyinlashtiradi. Ushbu dizayn ma'lumotlar bazasi normallashuvining birinchi tamoyilini buzadi, birinchi Oddiy formada (1NF) , har bir jadval xujayrasi bitta, alohida ma'lumotlardan iborat bo'lishi kerakligini bildiradi.

Boshqa bir dizayn muqobili, Karmen uchun ikkinchi rekordni kiritish uchun bo'lishi mumkin:

O'qituvchilar va kurslar
Ustoz _ID Ustoz _Name Kurs
Teacher_001 Karmen Biologiya
Teacher_001 Karmen Matematika
Ustoz_002 Veronica Matematika
Teacher_003 Xorxe Inglizcha

Bu 1NF-ga yopishadi, biroq ma'lumotlar bazasi noyobdir, chunki u ortiqcha ma'lumotlarni taqdim etadi va juda katta ma'lumotlar bazasini shoshirishi mumkin. Eng muhimi, bu ma'lumotlar mos kelmasligi mumkin. Misol uchun, agar Carmenning ismi o'zgargan bo'lsa-chi? Ma'lumotlar bilan ishlaydigan kishi uning ismini bitta yozuvda yangilashi va uni ikkinchi jildda yangilamasligi mumkin. Ushbu dizayn 1NF ga mos keladigan va odatdagilarning ko'plab jadvallarni bir nechta jadvalga ajratib, ular orasidagi munosabatlarni yaratib, bir nechta yozuvlarni qisqartirishidan qochish kerak bo'lgan Ikkinchi Normal Formani (2NF) buzadi.

Ma'lumotlar bazasini bir yoki bir nechta munosabatlar bilan qanday tuzish mumkin

O'qituvchilar va kurslar jadvalida bir-to-ko'p munosabatlarni amalga oshirish uchun jadvallarni ikkiga ajratamiz va ularni xorijiy kalit yordamida bog'laymiz .

Bu erda Ustozlar jadvalidagi Kurs ustunini olib tashladik:

O'qituvchilar
Ustoz _ID Ustoz _Name
Teacher_001 Karmen
Ustoz_002 Veronica
Teacher_003 Xorxe

Va bu erda kurslar jadvali. Unutmangki, chet el kalit, Teacher_ID, O'qituvchilar jadvali ustoziga kursni yo'naltiradi:

Kurslar
Course_ID Kurs_Adı Teacher_ID
Kurs_001 Biologiya Teacher_001
Kurs_002 Matematika Teacher_001
Kurs_003 Inglizcha Teacher_003

Chet el kalitini ishlatib, O'qituvchilar va Kurslar jadvali o'rtasidagi munosabatlarni rivojlantirdik.

Bu bizga biologiya va matemni Carmen tomonidan o'rgatilgan va Xorxe ingliz tilini o'rgatganligini bildiradi.

Ushbu dizayn har qanday yuzaga kelishi mumkin bo'lgan ishdan qochishning oldini olish, individual o'qituvchilarga bir nechta darslarni o'rgatish imkonini beradi va bir-biriga ko'plab munosabatlarni amalga oshiradi.

Ma'lumotlar bazalari, shuningdek, birebir munosabatlarni va juda ko'pdan-ko'p aloqalarni amalga oshirishi mumkin.