4.1 Kirish
Jadvallar orasidagi bog'liqliklarni tushunadigan vaqt keldi. Ikki bog'langan jadval orasida o'zaro ta'sir qiladigan elementlar soni kardinallilik deb ataladi. Kardinallilik sizga ma'lumotlarni jadvallarga qay darajada samarali ajratganingizni nazorat qilishga yordam beradi.
Barcha entitylar o'rtasida bog'liqlik mavjud bo'lishi mumkin, lekin amalda entitylar o'rtasida uch xil bog'lanish mavjud:
- Bitta bitta
- Bitta ko'p
- Ko'p ko'p
4.2 "Bitta bitta" bog'lanish
Agar har bir B entity nusxasi uchun faqat bitta A entity nusxasi mavjud bo'lsa, ularning orasidagi bog'lanish "bitta bitta" bog'lanish deb hisoblanadi (bu ko'pincha "1:1" deb belgilanadi). ER-diagrammalarda bunday bog'lanish har bir uchida kichik chiziq bilan ko'rsatiladi:
Bitta bitta bog'lanish odatda, agar sizda ularni alohida saqlash uchun kuchli sabablar bo'lmasa, ikkala jadval ma'lumotlarini bir jadvalga birlashtirish yaxshiroq ekanligini ko'rsatadi.
Ba'zida 1:1 bog'lanishga ega jadvallardan foydalanish mantiqan. Masalan, jadvallaringizda majburiy bo'lmagan ma'lumotlar, masalan, tavsiflar kabi maydonlar mavjud bo'lsa va ko'p hollarda ular bo'sh bo'lsa, barcha tavsiflarni alohida jadvalga o'tkazish mantiqan, bu sizga ko'p bo'shliqlardan xalos bo'lish imkonini beradi va ma'lumotlar bazangizning samaradorligini oshiradi.
Keyinchalik, ma'lumotlarni to'g'ri moslashtirish uchun, har bir jadvalda kamida bitta bir xil ustun qo'shish kerak bo'ladi (buning uchun asosan birlamchi kalitni tanlash tavsiya etiladi).
4.3 "Bitta ko'p" bog'lanish
Bunday munosabat, bir jadval yozuvi ikkinchi boshqa bir nechta entitylar bilan bog'liq bo'lganda yuzaga keladi. Masalan, bir xil mijoz savatga bir nechta mahsulot qo'shishi yoki musobaqa ishtirokchisi bir nechta rekord o'rnatishi mumkin. "Bitta ko'p" (yoki qisqa 1:N) bog'lanishlar quyidagi misolda ko'rsatilganidek, "vornoyi lapki" notatsiyasi shaklida aks ettiriladi:
Ma'lumotlar bazasini loyihalashda 1:N bog'lanishni amalga oshirish uchun "bitta" jadvaldan birlamchi kalitni "ko'p" jadvalga atribut sifatida qo'shing. Agar birlamchi kalit boshqa jadvalda bo'lsa, u "chet kalit" deb nomlanadi. "Bitta" jadval ota-ona, "ko'p" jadval esa farzand sifatida qaraladi.
4.4 "Ko'p ko'p" bog'lanish
Agar bir jadvalning bir nechta entitylari boshqa bir nechta entitylar bilan bog'langan bo'lsa, ular "ko'p ko'p" (yoki "N:N") bog'lanishiga ega deb hisoblanadi. Masalan, talabalar va darslar orasidagi bunday bog'lanish mavjud bo'ladi, chunki har bir talaba turli darslarni o'tishi mumkin, shuningdek, har bir darsga bir nechta talaba kelishi mumkin.
ER-diagrammada bu turdagi bog'lanish quyidagicha tasvirlanadi:
Bunday bog'lanishni ma'lumotlar bazasida to'g'ridan-to'g'ri amalga oshirib bo'lmaydi. Shuning uchun uni ikkita "bitta ko'p" turidagi bog'lanishga bo'lish kerak.
Buning uchun ikki jadval orasida yangi entity yaratish lozim. Agar N:N bog'lanish savdo va mahsulotlar orasida o'rnatilgan bo'lsa, yangi entityni "sotilgan mahsulotlar" deb nomlash mumkin, chunki u har bir savdoning tarkibini taqdim etadi.
"Sotilgan mahsulotlar" bilan "savdo" va "mahsulotlar" jadvallari o'rtasida 1:N turidagi bog'lanish o'rnatiladi. Bunday bog'lanish bu savdodan qaysi mahsulotlar sotilganini kuzatish imkoniyatini beradi. Boshqacha qilib aytadigan bo'lsak, "savdo" va "mahsulotlar" jadvallari orasidagi bog'lanish har bir savdo uchun aniq sotilgan mahsulotlarni kuzatish imkoniyatini yaratadi. Turli modellar orasida bunday oraliq entitylar "bog'lovchi jadvallar", "assotsiativ entitylar" yoki "tugun jadvallari" deb nomlanadi. Bunday munosabat katta hajmdagi ma'lumotlarni saqlash va ma'lumotlar tahlili vazifalarini hal qilish uchun ma'lumotlarni modellashtirishda qo'llaniladi.
Bog'lovchi jadvaldagi har bir yozuv ikki qo'shni jadvalning ikki xil entitysini birlashtiradi. U qo'shimcha ma'lumotlarni ham o'z ichiga olishi mumkin. Masalan, talabalar va darslar orasidagi bog'lovchi jadval quyidagicha ko'rinishga ega bo'lishi mumkin:
4.5 Majburiy yoki yo'q?
Bog'lanishlarni tahlil qilish uchun qaysi entity boshqasiga majburiy shart ekanligini aniqlash mumkin. Majburiy bo'lmagan tomoni bog'lanish chizig'ida doira bilan belgilanadi. Masalan, davlatning BMTda vakili bo'lishi uchun u dunyo xaritasida bo'lishi kerak. Biroq, aksincha bo'lish noto'g'ri bo'ladi.
Ikki entity bir-biri bilan bog'liq bo'lishi mumkin (ya'ni, biri ikkinchisiz mavjud bo'lolmaydi).
Rekursiv bog'lanishlar
Ba'zida jadval o'ziga ishora qilishi mumkin. Masalan, xodimlar jadvalida "menedjer" atributi bo'lishi mumkin, u bizni xuddi shu jadvaldagi boshqa xodimga ishora qiladi. Bu rekursiv bog'lanish deyiladi.
Ortiqcha bog'lanishlar
Agar bog'lanishlar bir necha marta takrorlansa, ular ortiqcha hisoblanadi. Odatda, ulardan birini muhim ma'lumotlarni yo'qotmasdan o'chirish mumkin. Masalan, "talabalar" entitysi "o'qituvchilar" entitysi bilan faqat "darslar" orqali emas, balki bevosita bog'langan bo'lsa, "talabalar" va "o'qituvchilar" orasidagi bog'lanishni o'chirish mantiqan. Bu qaror o'quvchilarni o'qituvchilarga faqatgina "darslar" orqali tayinlash mumkinligi bilan asoslanadi.
4.6 Ma'lumotlarning havola yaxlitligi
Birlamchi va chet kalitlarini o'zgartirishda ma'lumotlarning havola yaxlitligi hisobga olinishi kerak. Asosiy g'oya bir xil ma'lumotlarni saqlovchi ma'lumotlar bazasidagi ikki jadvalning mos kelishi.
Ma'lumotlar yaxlitligi jadvallar orasidagi to'g'ri qurilgan bog'lanishlar va ular orasida to'g'ri o'rnatilgan havolalarni talab qiladi. Ma'lumotlar yaxlitligini buzish quyidagi holatlarda sodir bo'lishi mumkin:
- O'chirish anomaliyasi (deletion anomaly) bosh jadvaldan qator o'chirilganda yuzaga keladi. Bunday holda, qaram jadvaldagi chet kalit hali ham bosh jadvaldan o'chirilgan qatorga ishora qiladi. Asosiy jadvaldagi qatorning yo'qligi ma'lumotlar yaxlitligini buzilishiga olib keladi.
- Qo'shish anomaliyasi (insertion anomaly) qaram jadvalga qator qo'shilayotganda yuzaga keladi. Biroq, bunday holda qaram jadvalning chet kaliti bosh jadvalning har qanday qatorining birlamchi kaliti bilan mos kelmaydi. Bu ma'lumotlarning noto'g'ri talqin etilishiga va sistemaning noto'g'ri ishlashiga olib kelishi mumkin.
- Yangilash anomaliyasi (update anomaly) jadvalning bir qatoridagi ma'lumotlar o'zgartirilganda paydo bo'ladi. Bunday holda, boshqa qatorlardan ma'lumotlar birinchi qatorning yangi ma'lumotlari bilan ziddiyatga kelishi va ma'lumotlar yaxlitligini buzilishiga olib kelishi mumkin. Shunday qilib, bunday anomaliya sistemasida noto'g'ri natijalarga olib kelishi mumkin.
O'chirish anomaliyasi
O'chirish anomaliyasini hal qilish uchun chet kalitga ikkita cheklashdan birini o'rnatish kerak.
Agar qaram jadvaldan qator bosh jadvaldan qator mavjud bo'lishini talab qilsa, chet kalitga kaskadli o'chirish o'rnatiladi. Ya'ni, bosh jadvaldan qator o'chirilganda, qaram jadvaldan tegishli qator (qatorlar) o'chiriladi.
Agar bosh va qaram jadvallar orasidagi bog'lanish majburiy bo'lmasa, bosh jadvaldan tegishli qator o'chirilganda, chet kalit uchun NULL qiymati o'rnatiladi. Buning uchun chet kalit ustuni NULL qiymatini qabul qilishi kerak.
Qo'shish anomaliyasi
Qo'shish anomaliyasini hal qilish uchun chet kalitni ifodalovchi qator qaram jadvalga ma'lumotlar qo'shilayotganda NULL qiymatni qabul qilishi kerak. Shuning uchun, agar qo'shilayotgan obyekt bosh jadval bilan bog'liqlikka ega bo'lmasa, chet kalit ustunida NULL qiymati ko'rsatiladi.
Yangilash anomaliyasi
Yangilash anomaliyasini hal qilish uchun oldin ko'rib chiqilgan normalizatsiya qo'llaniladi.
GO TO FULL VERSION