Relyatsion ma'lumotlar bazasi - asosiy tushunchalar. Ma'lumotlar bazasi modeli

II. Tarmoq modeli

III. Relyatsion model

yozib olishmaydon

ierarxik va tarmoq modellari chet el kalitlari


4. Ma'lumotlarning relyatsion modeli

Relyatsion ma'lumotlar bazasi

* Xulosa

* Xususiyat ustunlar (maydonlar) jadvallar.

* Ma'lumot turi

* Aloqa kalit.

* Uyushma

Asosiy funktsiyalari RDBMS:

· Ma'lumotlarning ta'rifi

· Ma'lumotlarni qayta ishlash

· Ma'lumotlarni boshqarish

Microsoft Access

Access-dagi ma'lumotlar bazasi oynasi



Ob'ektlar bilan ishlash usullari

Ma'lumotlar bazasi ob'ektlari bilan ishlash tugmalari ma'lumotlar bazasi oynasining asboblar panelida joylashgan:

Ochiq - jadvalni tahrirlash, so'rovni bajarish, forma yuklash, hisobot tuzish, makrosni ishga tushirish rejimiga o'tishga imkon beradi.

Konstruktor - tanlangan ob'ektni sozlash rejimiga o'tishni ta'minlaydi.

Yarating - tanlangan turdagi yangi ob'ektni yaratishni boshlashga imkon beradi.

7. Jadvallar bilan ishlash

Jadval yaratish uchun jadvallar ro'yxatiga o'tib, tugmani bosish kerak Yarating ... Yangi dialog oynasi paydo bo'ladi Yangi stol:

Access-da jadvalni bir necha usul bilan yaratishingiz mumkin:

· "Noldan" foydalanib yangi stol yarating Konstruktor;

· Yugurish Jadval ustasi - Access-da mavjud bo'lgan standart echimlar asosida jadvalni bosqichma-bosqich yaratishni taklif qiluvchi maxsus dastur;

· Ma'lumotlar bazasi jadvalini istalgan dasturning faylidan import qilish, masalan, FoxPro yoki Excel.

Maydon nomini sozlash

Maydon nomi ustunda o'rnatiladi Maydon nomi... Ism 64 belgigacha bo'lishi mumkin va nuqta, undov belgisi va burchakli qavsdan tashqari har qanday belgiga ruxsat beriladi. Maydon nomlarini takrorlashga yo'l qo'yilmaydi.

Ma'lumotlar turini aniqlash

Har bir maydon uchun siz uning tarkibidagi ma'lumotlar turini belgilashingiz kerak. Ma'lumotlar turi ustunni bosish orqali chaqirilishi mumkin bo'lgan ro'yxatdan tanlanadi Ma'lumot turi... Access quyidagi ma'lumotlar turlari bo'yicha ishlaydi:

Ø Matn- maksimal 255 belgidan iborat oddiy matnni saqlash uchun.

Ø MEMO maydoni - 65 535 belgigacha bo'lgan katta hajmdagi matnni saqlash uchun.

Ø Raqamli- haqiqiy sonlarni saqlash uchun.

Ø Sana vaqti - taqvim sanalarini va joriy vaqtni saqlash uchun.

Ø Pul- ushbu maydonlarda pul miqdori mavjud.

Ø Hisoblagich - jadval uchun noyob tizim kalitini aniqlash. Odatda yozuvlarni ketma-ket raqamlash uchun foydalaniladi. Jadvalga yangi yozuv qo'shilganda, ushbu maydon qiymati 1 (bitta) ga oshiriladi. Bunday maydonlardagi qiymatlar yangilanmaydi.

Ø Mantiqiy ma'lumotlar - ma'lumotlarni saqlash, qiymatlarni olish uchun: Ha yoki Yo'q.

Ø OLE ob'ektlar maydoni - boshqa dasturlarda yaratilgan ob'ektlarni saqlash uchun.

Dala xususiyatlarining tavsifi

Yuqorida ta'kidlab o'tilganidek, alohida maydonlarning xususiyatlari dala xususiyatlari sohasida belgilanadi (yorliq) Odatda). Har bir maydon maydon turiga qarab o'ziga xos xususiyatlar to'plamiga ega. Ba'zi maydon turlari maydon xususiyatlarining o'xshash to'plamlariga ega. Maydonlarning asosiy xususiyatlari quyida keltirilgan.

Ø Maydon hajmi - matn maydonining maksimal uzunligi (sukut bo'yicha 50 ta belgi) yoki raqamli maydonning ma'lumotlar turi. Ushbu xususiyatni ruxsat etilgan minimal qiymatga o'rnatishingizni tavsiya qilamiz, chunki kichikroq ma'lumotlar tezroq qayta ishlanadi.

Agar ma'lumotlar turi raqamli bo'lsa, quyidagi xususiyat qiymatlari amal qiladi Maydon hajmi:

Izoh... Agar maydon kichikroq hajmga o'tkazilsa, ma'lumotlar yo'qolishi mumkin.

Ø Maydon formati - ma'lumotlarni ekranda aks ettirish yoki bosib chiqarish formati. Odatda, standart format ishlatiladi.

Ø O'nli joylar - raqamli va valyuta ma'lumotlarining turlari uchun kasrdan keyin o'nli kasrlar sonini belgilaydi.

Ø Kirish maskasi - maydonga ma'lumotlar kiritiladigan shaklni belgilaydi (ma'lumotlarni kiritishni avtomatlashtirish vositasi).

Ø Imzo - maydonni jadvalda, shaklda yoki hisobotda aks ettirish uchun foydalaniladigan maydonni belgilash. Agar ushbu qiymat ko'rsatilmagan bo'lsa, maydon nomi imzo sifatida qabul qilinadi.

Ø Standart qiymat Ma'lumotlarning yangi yozuvi yaratilganda avtomatik ravishda maydonga kiritiladigan standart qiymatmi.

Ø Qiymat sharti- kiritilgan qiymatlarga cheklovlar qo'yadi va shu bilan ma'lumotlarni kiritishning to'g'riligini nazorat qilishga imkon beradi.

Ø Xato xabari - qiymat bo'yicha shart buzilgan taqdirda ekranda ko'rsatiladigan xabar matnini o'rnatadi.

Ø Majburiy maydon- bu maydon Null qiymatlarni o'z ichiga olishi (ya'ni bo'sh bo'lib qolishi) yoki ushbu maydonga ma'lumotlar kiritilishi kerakligini aniqlaydi.

Ø Indekslangan maydon - bu sohada saqlanadigan qiymat bo'yicha yozuvlarni izlash va saralash operatsiyalari uchun, shuningdek takroriy yozuvlarni avtomatik ravishda yo'q qilish uchun foydalaniladi. Maydonlarni kiriting MEMO, OLE ob'ekti va Gipermurojaat indekslash mumkin emas.

Asosiy maydonni aniqlash

Barcha maydonlarning xususiyatlarini ko'rsatgandan so'ng, siz kamida bitta asosiy maydonni tanlashingiz kerak. Odatda, takrorlanmaydigan ma'lumotlarga ega bo'lgan maydonlar kalit maydonlar sifatida ko'rsatiladi yoki ma'lumotlar turiga ega maydonlar yaratiladi Hisoblagich ... Har qanday holatda, kalit maydonda takrorlanadigan ma'lumotlar bo'lmasligi kerak. Kalitni aniqlash uchun kerakli maydonni (yoki maydonlarni) tanlang va bosing Asosiy maydon Tahrirlash ... Markerning chap tomonida asosiy rasm paydo bo'ladi.

Jadvalni saqlash

Ma'lumotni kiritishdan oldin prognoz qilingan jadval saqlanishi kerak: tugmani bosing Saqlash asboblar panelida yoki tegishli buyruq p. Fayl va jadval nomini kiriting, shundan so'ng "Hozir kalit maydonini yaratish kerakmi?" (Ha yoki yo'q)

Agar javob " Ha", Keyin Access avtomatik ravishda" Kod "nomli maydon va ma'lumotlar turini yaratadi Hisoblagich , agar " Yo'q", - jadval kalit maydonisiz tuziladi. Bunday holda siz yaratilgan jadvalni rejimda ochishingiz kerak Konstruktor va kalit maydonini "qo'lda" aniqlang.

Ma'lumot kiritish

Jadvalni ma'lumot kiritish rejimiga o'tkazish uchun rejimga o'tish kerak Jadvallar... Maydonlar ketma-ket to'ldiriladi. Bosish orqali bir maydondan ikkinchisiga o'tish qulay Yorliq (yoki kombinatsiya Shift + yorliq - teskari yo'nalishda). Agar jadval ba'zi maydonlar uchun standart qiymatlar bilan ishlab chiqilgan bo'lsa, ushbu qiymatlar tegishli maydonlarda avtomatik ravishda paydo bo'ladi. Jadvaldagi yozuvlarni elektron jadvallar singari ko'chirish, nusxalash va o'chirish mumkin, ya'ni avval qatorlarni tanlang, so'ngra kerakli amalni bajaring. Ustunni sarlavhani bosish orqali tanlash mumkin. Ustunlar usuli yordamida o'ngga va chapga ko'chirilishi mumkin sudrab torting (sudrab olib tashlash).

Agar kerak bo'lsa, siz rejimga qaytishingiz mumkin Konstruktor... Bu jadval tuzilishidagi biror narsani tuzatishga imkon beradi.

Jadvaldagi ma'lumotlarni saralash

Jadvaldagi ma'lumotlar o'sish yoki tushish tartibida saralanishi mumkin. Buning uchun sichqoncha kursorini ustunning istalgan katagiga joylashtirish kerak, uning qiymatlari elementdan saralanadi. Yozuvlar jamoani tanlang Tartiblash yoki paneldagi tegishli tugmani bosing.

8. Ma'lumotlar bazasi jadvallari o'rtasida bog'lanishlarni yaratish

Jadvallar o'rtasidagi munosabatlar bitta jadvalda belgilash orqali o'rnatiladi ( bo'ysunuvchi) boshqa jadvalning kalitiga mos keladigan maydon ( asosiy). Belgilangan havola berilgan maydonda bir xil qiymatlarni o'z ichiga olgan yozuvlarni bog'laydi. Siz yaratgan havolalar keyinchalik Access tomonidan so'rovlar, shakllar yoki hisobotlarda ishlatiladi.

Izohlar.

Ø Ikkala bog'langan maydon ham bir xil bo'lishi kerak ma'lumotlar turi.

Ø Xususiyatlar Maydon hajmi ikkala bog'langan maydon uchun ham raqamli turi bir xil bo'lishi kerak.

Ø Agar asosiy jadvalning asosiy maydoni ma'lumotlar turiga ega maydon bo'lsa Hisoblagich, keyin bu maydonni bo'ysunuvchi jadvaldagi raqamli maydon bilan bog'lash mumkin. Bundan tashqari, xususiyat uchun tegishli jadvalning raqamli maydoni uchun Maydon hajmi ga o'rnatilishi kerak Uzoq tamsayı .

Ma'lumotlarning yaxlitligi

Ma'lumotlarning yaxlitligi Tegishli jadvallardagi yozuvlar orasidagi to'g'ri munosabatlarni saqlaydigan va ma'lumotlarni tasodifiy o'zgarish yoki o'chirishdan himoya qiladigan qoidalar to'plami.

Ushbu qoidalarga quyidagilar kiradi:

Ø Subordinatsion jadvalda siz asosiy jadval yozuviga aloqador bo'lmagan yozuvlarni kiritishingiz mumkin emas.

Ø Asosiy jadvalda, agar unga bo'ysunuvchi jadvalda yozuvlar mavjud bo'lsa, siz kalit maydon qiymatini o'zgartira olmaysiz.

Ø Quyidagi jadvalda u bilan bog'liq yozuvlar mavjud bo'lsa, yozuvlarni asosiy jadvalda o'chirib bo'lmaydi.

Kaskadli operatsiyalar

Bog'langan jadvallardagi ma'lumotlar yaxlitligi ikki turdagi kaskad operatsiyalari bilan ta'minlanadi:

Ø kaskadli yangilash operatsiyalari;

Ø kaskadli o'chirish operatsiyalari.

Ushbu operatsiyalarni tegishli katakchalarni belgilash orqali yoqish va o'chirish mumkin: "Bog'langan maydonlarning kaskadli yangilanishi" va "Bog'langan maydonlarning kaskadli o'chirilishi".

Agar "Tegishli maydonlarni kaskadli yangilash" katagiga belgi qo'yilgan bo'lsa, unda 1: M munosabatlaridagi "bitta" tomonda joylashgan asosiy jadvaldagi kalit maydon qiymatidagi har qanday o'zgarishlar avtomatik ravishda barcha tegishli yozuvlardagi tegishli qiymatlarni yangilaydi.

Asosiy jadvaldan yozuvni o'chirishda Kaskadni o'chirilgan bog'langan jadvallarni o'chirish katagiga belgi qo'yganingizda, bo'ysunuvchi jadvallardagi bog'langan yozuvlar avtomatik ravishda o'chiriladi.

Havolalarni olib tashlash (o'zgartirish)

Ø Ochiq oyna Ma'lumotlar sxemasi;

Ø sichqonchaning chap tugmasi bilan o'chiriladigan (o'zgartirilgan) havolani faollashtiring;

Ø Kontekstga tegishli menyuni ochish uchun o'ng tugmasini bosing va buyruqni tanlang O'chirish (Tahrirlash) mos ravishda.

9. Jadvallar o'rtasidagi aloqalar turlari

Jadvallar o'rtasidagi munosabatlarning uch turi mavjud:

Yakkama-yakka (1: 1). Asosiy jadvaldagi har bir yozuvdagi asosiy qiymat bo'ysunuvchi jadvaldagi faqat bitta yozuvdagi bog'liq maydondagi qiymatlarga mos kelishi mumkin. Bunday holda jadvallar orasidagi bog'liqlikni faqat ikkala jadvalning kalit maydonlari orqali o'rnatish mumkin.

Birdan ko'pga (1: M). Asosiy jadvaldagi har bir yozuvdagi asosiy qiymat bo'ysunuvchi jadvaldagi bir nechta yozuvlardagi bog'langan maydon (lar) dagi qiymatlarga mos kelishi mumkin. Ushbu turdagi munosabatlar relyatsion ma'lumotlar bazalarida tez-tez ishlatiladi.

Ko'pdan ko'pgacha (M: M). Birinchi jadvaldagi bitta yozuv (chiqish havolasi) boshqa jadvalning bir nechta yozuvlari (qabul qilish) bilan bog'lanishi mumkin bo'lgan ikkita jadval o'rtasida paydo bo'ladi, o'z navbatida, boshqa jadvaldagi bitta yozuv birinchi jadvalning bir nechta yozuvlari bilan bog'lanishi mumkin ... Ushbu sxema faqat uchinchi ulanish jadvali yordamida amalga oshiriladi, uning bog'lanish kaliti kamida ikkita maydondan iborat. Ushbu maydonlar A va B jadvallaridagi tashqi kalit maydonlar bo'lib, birlashma jadvalining asosiy kaliti odatda chet el tugmachalarining kombinatsiyasidir.

Agar jadvallar o'rtasida M: M aloqalar mavjud bo'lsa, qo'shimcha kesishish jadvali tuziladi, uning yordamida M: M munosabatlari ikkita 1: M munosabatlargacha kamayadi. Access ikkita jadval orasidagi to'g'ridan-to'g'ri M: M munosabatlarini aniqlashga imkon bermaydi.

10. So'rovlarni shakllantirish

So'rov bajarilmoqda

Derazadan ijro so'rovini boshlash uchun Konstruktor asboblar paneli tugmachasini bosishingiz kerak " Yugurish» ! yoki buyruqni bajaring So'rov / ishga tushirish... Talab bo'yicha ma'lumotlar namunalarini olish natijalari jadval rejimida ko'rsatiladi.

Tanlash shartlarini shakllantirish

Ifodalarni ko'rsatishda foydalaniladigan operatorlar ro'yxati quyidagicha:

Ø operatorlari taqqoslashlar:


= (teng darajada)

<> (teng emas)

> (Ko'proq)

>= (kam emas)

< (Kamroq)

<= (Ko'p emas)


O'RTASIDA - bir qator qiymatlarni belgilashga imkon beradi. Sintaksis: Orasida"Ifoda" Va"Ifoda" (masalan: O'RTASIDA 10 Va 20 mantiqiy ifoda bilan bir xil ma'noni anglatadi >= 10 VA<= 20).

IN - taqqoslash uchun ishlatiladigan qiymatlar ro'yxatini belgilashga imkon beradi (operand - bu qavs ichiga olingan ro'yxat). Masalan: IN("Brest", "Minsk", "Grodno") "Brest" mantiqiy ifodasi bilan bir xil ma'noni anglatadi Yoki "Minsk" Yoki "Grodno".

Ø aql-idrok operatorlar:

VA (masalan:\u003e \u003d 10 VA<=20)

Yoki(masalan:<50 OR >100)

YO'Q(masalan: Is Not Null - bu ba'zi bir qiymatlarni o'z ichiga olgan maydon).

Ø operator Yoqdi- muvofiqlikni tekshiradi matn yoki Memo maydonlari berilgan belgi namunasi bo'yicha.

Shablon ramzlari jadvali

Operatordan foydalanish misollari Yoqdi:

"C *" kabi - C belgisidan boshlanadigan chiziqlar;

LIKE "[A - Z] #" - A dan Z gacha bo'lgan har qanday belgi va raqam;

LIKE "[! 0 - 9 ABC] * # #" - A, B, C raqamlari yoki harflaridan tashqari har qanday belgidan boshlanib, 2 ta raqam bilan tugaydigan chiziqlar;

Murakkab namuna olish mezonlari

Ko'pincha yozuvlarni jadvalning bir nechta maydonlari uchun yoki bitta maydon uchun bir nechta shartlar bilan o'rnatiladigan shart bo'yicha tanlashingiz kerak. Bunday holda, murojaat qiling "So'rovlar" (barcha shartlar bajarilgan taqdirdagina yozuvlarni tanlang) va Yoki so'rovlar (shartlardan kamida bittasi bajarilganda yozuvlarni tanlash).

"Belgilaganda Yoki so'rov»Har bir tanlov sharti alohida qatorga joylashtirilishi kerak So'rov shakli.

"Belgilaganda I-so'rov»Har bir tanlov sharti bitta satrda, lekin har xil maydonlarda joylashtirilishi kerak So'rov shakli.

Ushbu operatsiyalar operatorlar yordamida aniq ko'rsatilishi mumkin Yoki va VA navbati bilan.

Iif () va Format () funktsiyalari

Funktsiya IIf (shart; ifTrue; ifFalse) - ifodani baholash natijasiga qarab ikkita argumentdan birini qaytaradi.

Funktsiya Format (ifoda; format bayonoti) - formatlash ko'rsatmalariga muvofiq formatlangan ifodani o'z ichiga olgan qatorni qaytaradi.

Ifodalar uchun sana / vaqt formatlash bayonotida quyidagi belgilarni ishlatishingiz mumkin:

I. Ierarxik model

II. Tarmoq modeli

III. Relyatsion model

Relyatsion modelda ma'lumot to'rtburchaklar jadvallar ko'rinishida aks ettirilgan. Har bir jadval qatorlar va ustunlardan iborat bo'lib, ma'lumotlar bazasi ichida noyob nomga ega. O'z navbatida, har bir satr ( yozib olish) bunday jadvalda faqat bitta aniq ob'ektga tegishli ma'lumotlar va har bir ustun ( maydon) jadval o'z jadvaliga xos nomga ega.

Relyatsion ma'lumotlar bazalari (RDB), aksincha ierarxik va tarmoq modellari, istalgan vaqtda jadvallar orasidagi munosabatlarni tashkil qilishga imkon bering. Buning uchun RDB mexanizmni amalga oshirdi chet el kalitlari... Har bir ma'lumotlar bazasi jadvali boshqa jadvalga havola sifatida xizmat qiladigan kamida bitta maydonni o'z ichiga oladi. RDB terminologiyasida bunday maydonlar chet el kalitlari deb nomlanadi. Chet el kalitlari yordamida ma'lumotlar bazasi bilan ishlashning istalgan bosqichida ma'lumotlar bazasi jadvallarini bog'lashingiz mumkin.


4. Ma'lumotlarning relyatsion modeli

Relyatsion ma'lumotlar bazasi (RDB) - bu ma'lum bir predmet sohasini aks ettiradigan maydonlar va yozuvlar to'plamidan tashkil topgan eng sodda ikki o'lchovli o'zaro bog'liqlik jadvallari to'plami.

Ma'lumotlarning relyatsion modeli Amerikaning taniqli ma'lumotlar bazasi mutaxassisi E.Kodd tomonidan taklif qilingan. Ushbu modelning asosiy tushunchalari birinchi marta 1970 yilda nashr etilgan. Matematik sifatida malaka oshirib, Kodd ma'lumotlar qayta ishlash uchun to'plamlar nazariyasi apparati (birlashma, kesishma, farq, dekart mahsuloti) dan foydalanishni taklif qildi. U ma'lumotlarning har qanday namoyishi matematikada munosabat (ingliz tilida - munosabat, shuning uchun nom - relyatsion ma'lumotlar bazalari) deb nomlanuvchi maxsus turdagi ikki o'lchovli jadvallar to'plamiga qisqartirilishini ko'rsatdi.

Koddning asosiy g'oyalaridan biri shundaki, ma'lumotlar orasidagi bog'liqlik ularning ichki mantiqiy aloqalariga muvofiq ravishda o'rnatilishi kerak edi. Codd tomonidan taklif qilingan ikkinchi muhim printsip shundan iboratki, relyatsion tizimlarda bitta buyruq butun ma'lumotlar fayllarini qayta ishlashga qodir, ilgari esa bitta buyruq bitta buyruq bilan ishlangan.

Relyatsion ma'lumotlar bazalarining asosiy tushunchalari (RDB)

* Xulosa - bir xil turdagi ob'ektlar, masalan, mijozlar, buyurtmalar, xodimlar to'g'risida ma'lumotlar. Relyatsion ma'lumotlar bazasida munosabatlar jadval sifatida saqlanadi.

* Xususiyat - ma'lum bir ob'ekt haqida ma'lum bir ma'lumot - masalan, mijozning manzili yoki xodimning ish haqi. Atribut odatda sifatida saqlanadi ustunlar (maydonlar) jadvallar.

* Ma'lumot turi - relyatsion modeldagi algoritmik tillardagi mos tushunchaga to'liq teng keladigan tushuncha. Qo'llab-quvvatlanadigan ma'lumotlar turlarining to'plami ma'lumotlar bazasi ma'lumotlar bazasi tomonidan belgilanadi va tizimdan tizimga katta farq qilishi mumkin.

* Aloqa - bitta jadvaldagi ma'lumotni boshqa jadvaldagi ma'lumot bilan bog'liqligi. Ishoratlar mos keladigan maydonlar yordamida amalga oshiriladi kalit.

* Uyushma - ma'lum atributlarning mos keladigan qiymatlari asosida jadvallar yoki so'rovlarni birlashtirish jarayoni.

Relyatsion ma'lumotlar bazasini yaratish qoidalari (normallashtirish)

Normalizatsiya jadvallarni ma'lumotlarni izchil va to'g'ri tahrirlashga imkon beradigan shaklga keltirish uchun takrorlanadigan guruhlar va boshqa qarama-qarshiliklarni bartaraf etish orqali ma'lumotlarni qayta tashkil etish jarayoni. Normallashtirishning yakuniy maqsadi har bir fakt faqat bitta joyda paydo bo'ladigan ma'lumotlar bazasi dizaynini olishdir, ya'ni. ma'lumotlarning ortiqcha bo'lishi chiqarib tashlangan.

1. Har qanday jadvalning har bir maydoni o'ziga xos bo'lishi kerak.

2. Har bir jadval noyob identifikatorga ega bo'lishi kerak ( asosiy kalit), bir yoki bir nechta jadval maydonlaridan iborat bo'lishi mumkin.

3. Birlamchi kalitning har bir qiymati uchun ma'lumotlar ustunlarining har birida bitta va bitta qiymat bo'lishi kerak va bu qiymat jadval ob'ekti bilan bog'liq bo'lishi kerak (ya'ni jadvalda asosiy kalit tomonidan belgilangan ob'ektga tegishli bo'lmagan ma'lumotlar bo'lmasligi kerak, lekin shuningdek jadvaldagi ma'lumotlar ob'ektni to'liq tavsiflashi kerak).

4. Har qanday maydon qiymatlarini o'zgartirish mumkin bo'lishi kerak (asosiy kalitga kiritilmagan) va bu boshqa maydonni o'zgartirishga olib kelmasligi kerak (ya'ni hisoblangan maydonlar bo'lmasligi kerak).

5. Ma'lumotlar bazasini boshqarish tizimlari (DBMS)

Ma'lumotlar bazalarini kompyuter muhitida saqlash dasturiy ta'minot vositalari - ma'lumotlar bazalarini boshqarish tizimlari tomonidan amalga oshiriladi, bular dasturiy ta'minot va mashina ommaviy axborot vositalarida ma'lumotlar bazalarini yaratish, ularni zamonaviyligini ta'minlash va kirishni tashkil qilish uchun zarur bo'lgan umumiy yoki ixtisoslashgan til vositalari to'plamidir. qabul qilingan ma'lumotlarni qayta ishlash texnologiyasi sharoitida ularga turli xil foydalanuvchilar.

Ma'lumotlar bazasi - bu ma'lumotlar bazalari bilan barcha manipulyatsiyalarni ta'minlaydigan boshqaruv dasturlari: ma'lumotlar bazasini yaratish, uni saqlash, ko'plab foydalanuvchilar tomonidan foydalanish va boshqalar, ya'ni ma'lumotlar bazasini markazlashtirilgan boshqarish uchun funktsiyalarning kompleks to'plamini amalga oshiradi va foydalanuvchilar manfaatlariga xizmat qiladi.

Ma'lumotlar bazasini ma'lumotlar bazasi va foydalanuvchi o'rtasida joylashgan dasturiy ta'minot qobig'i deb hisoblash mumkin. Bu ma'lumotlar himoyasi va yaxlitligi, ma'lumotlarga kirish, ularni qayta ishlash, ma'lumotlar bazasi asosida hisobot berish va boshqa operatsiyalar va protseduralarning markazlashtirilgan nazoratini ta'minlaydi.

Ma'lumotlar bazasini aloqador boshqarish tizimi (RDBMS)

RDBlarni boshqarish vositalari to'plami deyiladi relyatsion ma'lumotlar bazasini boshqarish tizimi kommunal xizmatlar, dasturlar, xizmatlar, kutubxonalar, dastur yaratish vositalari va boshqa tarkibiy qismlardan iborat bo'lishi mumkin. Umumiy kalit maydonlari yordamida bog'langan holda, RDBdagi ma'lumotlar bir nechta jadvallardan bitta natijalar to'plamiga birlashtirilishi mumkin.

Asosiy funktsiyalari RDBMS:

· Ma'lumotlarning ta'rifi - qanday ma'lumotlar saqlanishi, ma'lumotlar bazasi tuzilishini va ularning turini belgilash.

· Ma'lumotlarni qayta ishlash - istalgan maydonlarni tanlashingiz, ma'lumotlarni saralashingiz va filtrlashingiz mumkin. Siz ma'lumotlarni birlashtira olasiz va umumlashtirasiz.

· Ma'lumotlarni boshqarish - ma'lumotlarni to'g'rilash va qo'shish.

6. ACCESS DBMS ning umumiy tavsiflari

Microsoft Access Ma'lumotlarni aniqlash va qayta ishlash, shuningdek katta hajmdagi ma'lumotlar bilan ishlashda ularni boshqarish uchun barcha zarur vositalarni ta'minlaydigan funktsional jihatdan to'liq relyatsion ma'lumotlar bazasini boshqarish tizimi. Uning turli xil versiyalari MS Office dasturiy ta'minot paketiga kiritilgan va Windows muhitida ishlaydi (3.11 / 95/98/2000 / XP).

Access-dagi ma'lumotlar bazasi oynasi

Yangi ma'lumotlar bazasi faylini yaratgandan yoki ish joyida mavjud bo'lgan Access oynasini ochgandan so'ng, ma'lumotlar bazasi oynasi paydo bo'ladi:


Bizning davrimizda kompyuter texnologiyalarining paydo bo'lishi inson faoliyatining barcha sohalarida axborot inqilobini amalga oshirdi. Ammo global Internetda barcha ma'lumotlarning keraksiz axlatga aylanishiga yo'l qo'ymaslik uchun ma'lumotlar bazasi tizimi ixtiro qilindi, unda materiallar saralanadi, tizimlashtiriladi, natijada ularni topish oson va keyingi ishlovga taqdim etiladi. Uchta asosiy tip mavjud - relyatsion ma'lumotlar bazalari, ierarxik, tarmoq.

Asosiy modellar

Ma'lumotlar bazalarining paydo bo'lishiga qaytsak, shuni aytish kerakki, bu jarayon juda murakkab edi, u dasturlash mumkin bo'lgan axborotni qayta ishlash uskunalarini ishlab chiqishdan kelib chiqadi. Shuning uchun ularning modellari soni hozirda 50 dan oshishi ajablanarli emas, lekin asosiylari ierarxik, relyatsion va tarmoq modellari bo'lib, ular amalda hanuzgacha keng qo'llanilmoqda. Nima ular?

Ierarxik daraxt tuzilishiga ega va turli darajadagi ma'lumotlardan iborat bo'lib, ular o'rtasida bog'lanishlar mavjud. JB tarmoq modeli ancha murakkab naqshdir. Uning tuzilishi ierarxikka o'xshaydi va sxema kengaytirilgan va takomillashtirilgan. Ularning orasidagi farq shundaki, ierarxik modelning merosxo'r ma'lumotlari faqat bitta ajdod bilan aloqada bo'lishi mumkin, tarmoqdagi ma'lumotlar esa bir nechta bo'lishi mumkin. Relyatsion ma'lumotlar bazasining tuzilishi ancha murakkab. Shuning uchun uni batafsilroq tahlil qilish kerak.

Relyatsion ma'lumotlar bazasining asosiy tushunchasi

Bunday model 1970-yillarda fan doktori Edgar Kodd tomonidan ishlab chiqilgan. Bu ma'lumotlar, ularning bir-biri bilan munosabatlari, ular ustida bajariladigan operatsiyalar va eng muhimi, ularning yaxlitligini kafolatlovchi qoidalarni tavsiflovchi maydonlar joylashgan mantiqiy tuzilgan jadval. Nima uchun model relyatsion deb nomlanadi? Bu ma'lumotlar o'rtasidagi munosabatlarga asoslangan (lot. Relatio dan). Ushbu turdagi ma'lumotlar bazasi uchun juda ko'p ta'riflar mavjud. Axborotga ega bo'lgan munosabat jadvallarini tarmoq yoki ierarxik modelga qaraganda tartibga solish va qayta ishlash ancha oson. Buni qanday qilish mumkin? Modelning xususiyatlarini, tuzilishini va relyatsion jadvallarning xususiyatlarini bilish kifoya.

Asosiy elementlarni modellashtirish va chizish jarayoni

O'zingizning ma'lumotlar bazangizni yaratish uchun siz modellashtirish vositalaridan birini ishlatishingiz, qanday ma'lumotlar bilan ishlashingiz kerakligini o'ylab ko'rishingiz, jadvallarni tuzishingiz va ma'lumotlar orasidagi munosabatlarning yagona va ko'p sonli aloqalarini yaratishingiz, ob'ektlar katakchalarini to'ldirishingiz va birlamchi, tashqi kalitlarni o'rnatishingiz kerak.

Jadvalni modellashtirish va ma'lumotlar bazasini relyatsion dizayni Workbench, PhpMyAdmin, Case Studio, dbForge Studio kabi bepul vositalar orqali amalga oshiriladi. Batafsil dizayndan so'ng siz grafik jihatdan tayyor bo'lgan relyatsion modelni saqlashingiz va uni tayyor SQL kodiga aylantirishingiz kerak. Ushbu bosqichda siz ma'lumotlarni saralash, qayta ishlash va tizimlashtirish bilan ishlashni boshlashingiz mumkin.

Relyatsion model bilan bog'liq xususiyatlar, tuzilish va atamalar

Har bir manba o'z elementlarini o'ziga xos tarzda tavsiflaydi, shuning uchun kamroq chalkashliklar uchun kichik bir ishora berishni xohlayman:

  • munosabat yorlig'i \u003d shaxs;
  • layout \u003d atributlar \u003d maydon nomlari \u003d ob'ekt ustunlari sarlavhalari;
  • shaxs misoli \u003d tuple \u003d yozuv \u003d jadval qatori;
  • atribut qiymati \u003d mavjudlik yacheykasi \u003d maydon.

Relyatsion ma'lumotlar bazasining xususiyatlariga kirish uchun uning qaysi asosiy tarkibiy qismlardan iboratligini va ular nima uchun ekanligini bilishingiz kerak.

  1. Mohiyati. Ma'lumotlar bazasining relyatsion jadvali bitta bo'lishi mumkin, yoki ularda saqlanadigan ma'lumotlar tufayli tasvirlangan ob'ektlarni tavsiflovchi butun jadvallar to'plami bo'lishi mumkin. Ular sobit miqdordagi maydonlarga va o'zgaruvchan yozuvlar soniga ega. Ma'lumotlar bazasi modellari jadvali satrlar, atributlar va maketdan iborat.
  2. Ro'yxatdan o'tish - tasvirlangan ob'ektni tavsiflovchi ma'lumotlar aks etadigan qatorlarning o'zgaruvchan soni. Yozuvlar tizim tomonidan avtomatik ravishda raqamlanadi.
  3. Xususiyatlar - bu sub'ekt ustunlari tavsifini ko'rsatadigan ma'lumotlar.
  4. Maydon. Shaxs ustunini ifodalaydi. Ularning soni jadvalni yaratish yoki o'zgartirish paytida o'rnatilgan sobit qiymatdir.

Endi jadvalning tarkibiy elementlarini bilib, ma'lumotlar bazasining relyatsion modeli xususiyatlariga o'tishingiz mumkin:

  • Ma'lumotlar bazasi sub'ektlari ikki o'lchovli. Ushbu xususiyat tufayli ular bilan turli xil mantiqiy va matematik operatsiyalarni bajarish oson.
  • Aloqalar jadvalidagi atributlar va yozuvlarning qiymatlari tartibi o'zboshimchalik bilan bo'lishi mumkin.
  • Bitta munosabat jadvalidagi ustun o'zining shaxsiy nomiga ega bo'lishi kerak.
  • Shaxs ustunidagi barcha ma'lumotlar belgilangan uzunlikka va bir xil turga ega.
  • Har qanday yozuv mohiyatan bitta ma'lumotlar elementi hisoblanadi.
  • Iplarning tarkibiy qismlari o'z turlaridan biridir. Relyatsion mavjudotda takrorlanadigan qatorlar mavjud emas.

Xususiyatlarga asoslanib, atribut qiymatlari bir xil va uzunlikda bo'lishi kerakligi aniq. Atribut qiymatlarining xususiyatlarini ko'rib chiqamiz.

Relyatsion ma'lumotlar bazasi maydonlarining asosiy tavsiflari

Maydon nomlari bir xil birlikda yagona bo'lishi kerak. Ma'lumotlar bazasining atributi yoki maydon turlari qaysi toifadagi ma'lumotlar ob'ekt maydonlarida saqlanishini tavsiflaydi. Ma'lumotlar bazasining relyatsion maydoni belgida belgilangan o'lchamga ega bo'lishi kerak. Atribut qiymatlarining parametrlari va formati ularda ma'lumotlarning qanday tuzatilishini aniqlaydi. Shuningdek, "niqob" yoki "kirish naqshlari" kabi narsalar mavjud. Bu atribut qiymatiga ma'lumotlarni kiritish konfiguratsiyasini aniqlash uchun mo'ljallangan. Qanday bo'lmasin, siz maydonga noto'g'ri narsa yozganingizda, xato haqida xabar berilishi kerak. Shuningdek, maydonlarning elementlariga ba'zi cheklovlar kiritilgan - aniqlik va xatosiz ma'lumotlarni kiritish shartlarini tekshirish. Ma'lumotlar bilan bir qatorda to'ldirilishi kerak bo'lgan ba'zi bir atribut qiymati mavjud. Ba'zi atribut satrlari NULL qiymatlari bilan to'ldirilishi mumkin. Maydon atributlariga bo'sh ma'lumotlarni kiritishga ruxsat beriladi. Xato haqida xabar berish kabi, tizim tomonidan avtomatik ravishda to'ldiriladigan qiymatlar mavjud - bu standart ma'lumotlar. Indekslangan maydon har qanday ma'lumotni qidirishni tezlashtirish uchun mo'ljallangan.

2D relyatsion ma'lumotlar bazasi jadvali

SQL-dan foydalangan holda modelni batafsil tushunish uchun sxemani misollar asosida ko'rib chiqish yaxshiroqdir. Relyatsion ma'lumotlar bazasi nima ekanligini biz allaqachon bilamiz. Har bir jadvaldagi yozuv bitta ma'lumot elementidir. Ma'lumotlarning ortiqcha bo'lishini oldini olish uchun normalizatsiya operatsiyalarini bajarish kerak.

Relyatsion mavjudlikni normallashtirishning asosiy qoidalari

1. Relyatsion jadval uchun maydon nomining qiymati o'ziga xos, turlaridan biri bo'lishi kerak (birinchi normal shakl 1NF).

2. 1NF ga tushirilgan jadval uchun identifikatsiyalanmagan har qanday ustunning nomi jadvalning noyob identifikatoriga (2NF) bog'liq bo'lishi kerak.

3. 2NF-da joylashgan barcha jadval uchun har bir identifikatsiyalanmagan maydon boshqa tan olinmagan qiymat elementiga (3NF-tashkilot) bog'liq bo'lishi mumkin emas.

Ma'lumotlar bazalari: jadvallar orasidagi munosabat

Ikkita asosiy relyatsion jadval mavjud:

  • Bitta. Jadval №1-ning bitta asosiy yozuvlari ikkinchi mavjudotning bir nechta misollariga to'g'ri kelganda paydo bo'ladi. Chizilgan chiziqning bir uchida joylashgan klaviatura mavjudot "bir" tomonda ekanligini bildiradi, chiziqning boshqa uchi ko'pincha cheksizlik belgisi bilan belgilanadi.

  • "Ko'p-ko'p" munosabatlar boshqa jadvaldagi bir qator yozuvlar bilan bitta mavjudotning bir necha qatorlari o'rtasida aniq mantiqiy o'zaro ta'sir mavjud bo'lganda hosil bo'ladi.
  • Agar "birdan bittagacha" birikma ikki mavjudot o'rtasida yuzaga kelsa, demak, bitta jadvalning kalit identifikatori boshqa birlikda mavjud bo'lsa, u holda jadvallardan birini olib tashlash kerak, bu keraksiz. Ammo ba'zida, faqat xavfsizlik sababli, dasturchilar ikkalasini ataylab ajratishadi. Shuning uchun, gipotetik ravishda, birma-bir munosabatlar mavjud bo'lishi mumkin.

Relyatsion ma'lumotlar bazasida kalitlarning mavjudligi

Birlamchi va ikkilamchi kalitlar ma'lumotlar bazasining potentsial munosabatlarini belgilaydi. Ma'lumotlar modelining o'zaro aloqalari faqat bitta potentsial kalitga ega bo'lishi mumkin, bu asosiy kalit bo'ladi. U nimaga o'xshaydi? Birlamchi kalit - bu ma'lum bir qator uchun ma'lumotlarga kirishingiz mumkin bo'lgan shaxs ustuni yoki atributlar to'plami. U noyob, noyob bo'lishi kerak va uning maydonlarida bo'sh qiymatlar bo'lishi mumkin emas. Agar birlamchi kalit faqat bitta atributdan iborat bo'lsa, u holda u oddiy deb nomlanadi, aks holda u komponent bo'ladi.

Asosiy kalitdan tashqari, tashqi kalit ham mavjud. Ko'pchilik ular orasidagi farq nima ekanligini tushunmaydi. Keling, ularni misol yordamida batafsil tahlil qilaylik. Shunday qilib, ikkita jadval mavjud: "Dekanlik" va "Talabalar". "Dekanlik" sub'ektida "Talabalik guvohnomasi", "To'liq ism" va "Guruh" maydonlari mavjud. "Talabalar" jadvalida "Ism", "Guruh" va "O'rtacha" kabi atribut qiymatlari mavjud. Talaba guvohnomasi bir nechta talabalar uchun bir xil bo'lishi mumkin emasligi sababli, bu maydon asosiy kalit bo'ladi. "Talabalar" jadvalidagi "To'liq ism" va "Guruh" bir nechta odam uchun bir xil bo'lishi mumkin, ular "Dekanlik" tashkilotining talaba guvohnomasi raqamiga murojaat qilishadi, shuning uchun ular tashqi kalit sifatida ishlatilishi mumkin.

Ma'lumotlar bazasining relyatsion modeli

Aniqlik uchun biz ikkita ob'ektdan iborat ma'lumotlar bazasining relyatsion modeliga oddiy misol keltiramiz. "Dekanat" deb nomlangan stol mavjud.

To'liq relyatsion ma'lumotlar bazasini olish uchun siz ulanishlarni amalga oshirishingiz kerak. "IN-41" yozuvi, "IN-72" singari, "Dekanlik lavhasida" bir necha bor paydo bo'lishi mumkin va kamdan-kam hollarda talabalarning familiyasi, ismi va otasining ismi bir-biriga to'g'ri kelishi mumkin, shuning uchun bu maydonlarni asosiy kalit qilib bo'lmaydi. Keling, "Talabalar" sub'ektini ko'rsatamiz.

Ko'rib turganimizdek, relyatsion ma'lumotlar bazalaridagi maydonlarning turlari umuman boshqacha. Ham raqamli, ham ramziy yozuvlar mavjud. Shuning uchun atribut sozlamalarida integer, char, vachar, date va boshqalarning qiymatlari ko'rsatilishi kerak. "Dekanlik" jadvalida faqat talabalik guvohnomasi noyob qiymat hisoblanadi. Ushbu maydon asosiy kalit sifatida qabul qilinishi mumkin. "Talabalar" tashkilotining ismi, guruhi va telefon raqami talaba guvohnomasiga ishora qiluvchi xorijiy kalit sifatida qabul qilinishi mumkin. Aloqa o'rnatildi. Bu yakkama-yakka munosabatlar modelining namunasidir. Gipotetik ravishda jadvallardan biri ortiqcha, ularni osonlikcha bitta vujudga birlashtirish mumkin. Talaba guvohnomalarining raqamlari umuman ma'lum bo'lishiga yo'l qo'ymaslik uchun ikkita jadvalning mavjudligi juda aniq.

2. Relyatsion modelning tamoyillari

Ma'lumotlar bazasi modelining asoslari, aloqasi, jadvali, natijalar to'plami, tople, muhimlik, atribut, o'lchov, sarlavha, asosiy narsa, domen

Relyatsion model 1960 yillarning oxirlarida EF Codd (IBM xodimi) tomonidan ishlab chiqilgan va 1970 yilda nashr etilgan. Ma'lumotlarni taqdim etish usuli (ma'lumotlar tarkibi), ma'lumotlarni himoya qilish usullari (ma'lumotlar yaxlitligi) va ular bilan bajarilishi mumkin bo'lgan operatsiyalar ma'lumotlar (ma'lumotlar bilan manipulyatsiya).

Ma'lumotlar bilan ishlashda faqat relyatsion model ishlatilishi mumkin emas. Shuningdek, ierarxik model, tarmoq modeli, yulduz modeli va boshqalar mavjud. Biroq, relyatsion model eng qulay bo'lib chiqdi va shuning uchun hozirda eng keng qo'llanilmoqda.

Relyatsion ma'lumotlar bazalarining asosiy tamoyillarini quyidagicha umumlashtirish mumkin:

· Kontseptual darajadagi barcha ma'lumotlar qatorlar va ustunlar shaklida aniqlangan va munosabat deb nomlangan buyurtma qilingan tashkilot shaklida namoyish etiladi. O'zaro munosabatlarning keng tarqalgan sinonimi bu jadval (yoki yozuvlar to'plami yoki natijalar to'plamidir. Bu erda jadvallar o'rtasidagi munosabatlar emas, balki ma'lumotlar bazalari bilan bog'liq bo'lgan atama kelib chiqadi;

· Barcha qiymatlar skalar hisoblanadi. Bu shuni anglatadiki, har qanday munosabatdagi har qanday satr va ustun uchun bitta va bitta qiymat mavjud;

· Barcha operatsiyalar butun munosabat bo'yicha amalga oshiriladi va ushbu operatsiyalar natijasi ham butun munosabatdir. Ushbu tamoyil snapping deb nomlanadi. Shuning uchun, bitta operatsiyaning natijalari (masalan, so'rov) boshqa operatsiyani (pastki so'rov) bajarish uchun kirish sifatida ishlatilishi mumkin.

Endi rasmiy terminologiya haqida:

· munosabat (munosabat) - bu butun tuzilish, yozuvlar to'plami (odatdagi ma'noda jadval).

· kortej ma'lumotlar o'z ichiga olgan har bir satr. Keyinchalik keng tarqalgan, ammo rasmiy bo'lmagan muddat bu yozuvdir.

· kuch - aloqadagi kranlar soni (boshqacha aytganda, yozuvlar soni);

· xususiyat bu nisbatan ustun;

· o'lchov munosabatdagi atributlar soni (bu holda, 3);

Har bir munosabatni ikki qismga bo'lish mumkin - sarlavha va tanasi... Oddiy tilda munosabat sarlavhasi ustunlar ro'yxati, tanasi esa yozuvlarning o'zlari (karterlar).

· Bizning misolimizda har bir ustun (atribut) nomi ikki nuqta bilan ajratilgan ikkita so'zdan iborat. Rasmiy ta'riflarga ko'ra, birinchi qism atribut nomi (ustun nomi) va ikkinchi qismi domen (ma'lumotlar ustuni ko'rsatadigan ma'lumotlar turi). Domen va ma'lumotlar turi bir-biriga teng kelmaydi. Amalda, domen odatda qoldiriladi.

· Aloqaning tanasi tartibsiz topllar to'plamidan iborat (uning soni har qanday bo'lishi mumkin - 0 dan cheksiz katta).

Ma'lumotlar modeli bu ma'lumotlar tuzilmalari va ularni qayta ishlash operatsiyalari to'plamidir. Ma'lumotlar modeli yordamida siz ob'ektlarning tuzilishini va ular o'rtasida o'rnatilgan munosabatlarni tasavvur qilishingiz mumkin. Ma'lumotlar modellarining terminologiyasi "ma'lumotlar elementi" va "majburiy qoidalar" tushunchalari bilan tavsiflanadi. Ma'lumotlar elementi har qanday ma'lumotlar to'plamini tavsiflaydi va majburiy qoidalar ma'lumotlar elementlarining o'zaro bog'liqligi algoritmlarini belgilaydi. Bugungi kunga qadar ko'plab turli xil ma'lumotlar modellari ishlab chiqilgan, ammo amalda uchta asosiy modeldan foydalanilgan. Ma'lumotlarning ierarxik, tarmoq va relyatsion modellari farqlanadi. Shunga ko'ra, ular ierarxik, tarmoq va relyatsion DBMS haqida gapirishadi.

O ma'lumotlarning ierarxik modeli. Ierarxik ravishda tashkil etilgan ma'lumotlar kundalik hayotda juda keng tarqalgan. Masalan, oliy ta'lim muassasasining tuzilishi ko'p darajali ierarxik tuzilishdir. Ierarxik (daraxtga o'xshash) ma'lumotlar bazasi tartiblangan elementlar to'plamidan iborat. Ushbu modelda asl elementlar boshqa elementlarni hosil qiladi va bu elementlar o'z navbatida quyidagi elementlarni hosil qiladi. Har bir bolaning faqat bitta ota-onasi bor.

Tashkiliy jadvallar, materiallar ro'yxati, kitoblardagi tarkib, loyiha rejalari va boshqa ko'plab ma'lumotlar to'plamlari ierarxik tarzda taqdim etilishi mumkin. Ajdodlar va avlodlar o'rtasidagi aloqalarning yaxlitligi avtomatik ravishda saqlanib qoladi. Umumiy qoida bo'yicha, hech bir avlod ota-onasiz mavjud bo'lolmaydi.

Ushbu modelning asosiy kamchiliklari - bu loyihalash paytida ma'lumotlar bazasi asosida yotgan ierarxiyadan foydalanish zaruriyati. Ma'lumotlarni doimiy ravishda qayta tashkil etish zarurati (va ko'pincha bu qayta tashkil etishning iloji yo'qligi) yanada umumiy model - tarmoq yaratilishiga olib keldi.

Tarmoq ma'lumotlari modeli haqida. Ma'lumotlarni tartibga solishda tarmoq yondoshuvi - bu ierarxik yondashuvning kengaytmasi. Ushbu model ieraxikadan farq qiladi, chunki har bir yaratilgan element bir nechta asosiy elementga ega bo'lishi mumkin. ■

Tarmoq ma'lumotlar bazasi tegishli tashkilot ma'lumotlariga xos bo'lgan barcha turdagi aloqalarni to'g'ridan-to'g'ri aks ettirishi mumkinligi sababli, bu ma'lumotlar navigatsiya qilinishi, o'rganilishi va so'ralishi mumkin, ya'ni tarmoq modeli faqat bitta ierarxiya bilan bog'lanmagan. Biroq, tarmoq ma'lumotlar bazasiga so'rov tuzish uchun uning tarkibiga chuqur kirib borish (ushbu ma'lumotlar bazasining sxemasi bo'lishi kerak) va ushbu ma'lumotlar bazasi modelining muhim kamchiliklari bo'lgan ma'lumotlar bazasida harakatlanish mexanizmini ishlab chiqish kerak.

Ma'lumotlarning relyatsion modeli haqida. Ma'lumotlarning relyatsion modeli asosidagi asosiy g'oya har qanday ma'lumotlar bazasini ikki o'lchovli jadval sifatida ko'rsatishdir. Eng sodda holatda, relyatsion model bitta ikki o'lchovli jadvalni tavsiflaydi, lekin ko'pincha bu model bir nechta turli jadvallarning tuzilishi va munosabatlarini tavsiflaydi.

Ma'lumotlarning relyatsion modeli

Demak, axborot tizimining maqsadi qayta ishlashdir ma'lumotlarhaqida ob'ektlarberilgan haqiqiy dunyo ulanishlarob'ektlar o'rtasida. JB nazariyasida ma'lumotlar tez-tez chaqiriladi atributlari vaob'ektlar - sub'ektlar.Ob'ekt, atribut va aloqa I.S.ning asosiy tushunchalari.

Ob'ekt(yoki mavjudot) mavjud bo'lgan narsadir va tushunarli,ya'ni ob'ektni shu "narsa" deb atash mumkin, buning uchun ism va o'xshash bir ob'ektni boshqasidan farqlash usuli mavjud. Masalan, har bir maktab ob'ektdir. Ob'ektlar shuningdek, bu shaxs, maktabdagi sinf, firma, qotishma, kimyoviy birikma va boshqalar. Ob'ektlar nafaqat moddiy narsalar, balki real dunyoni aks ettiruvchi yanada mavhum tushunchalar ham bo'lishi mumkin. Masalan, tadbirlar, mintaqalar, san'at asarlari; kitoblar (bosma mahsulotlar sifatida emas, balki asarlar sifatida), teatrlashtirilgan tomoshalar, filmlar; huquqiy normalar, falsafiy nazariyalar va boshqalar.

Xususiyat(yoki berilgan)- bu ma'lum bir ob'ektni tavsiflovchi va ob'ektning ma'lum bir misoli uchun raqamli, matnli yoki boshqa qiymatlarni oladigan ko'rsatkichdir. Axborot tizimi o'ziga xos xususiyatlardan foydalanib, ma'lum bir mavzu sohasiga nisbatan ishlab chiqilgan ob'ektlar to'plamlari bilan ishlaydi atribut qiymatlari(ma'lumotlar) ba'zi ob'ektlar. Masalan, maktabdagi darslarni ob'ektlar to'plami sifatida ko'rib chiqamiz. Sinfdagi o'quvchilar soni berilgan qiymat bo'lib, u raqamli qiymatni oladi (bir sinfda 28, boshqasida 32 ta). Sinf nomi - bu matnli ma'noga ega bo'lgan (bitta 10A, ikkinchisida 9B va boshqalar mavjud).

Relyatsion ma'lumotlar bazalarini ishlab chiqish 1960 yillarning oxirlarida, muhokama qilingan birinchi hujjatlar paydo bo'lganda boshlandi; ma'lumotlar bazalarini loyihalashda ma'lumotlarni taqdim etishning tanish va tabiiy usullaridan foydalanish imkoniyati - jadvalli deb nomlangan jadvalli modellar.

Relyatsion ma'lumotlar bazalari nazariyasining asoschisi IBM xodimi, doktor E. Kodd hisoblanadi, u 6-iyun kuni (1970 yil iyun) maqolasini chop etdi. Katta ma'lumot almashadigan banklar uchun ma'lumotlarning relyatsion modeli(Katta jamoaviy ma'lumotlar banklari uchun ma'lumotlarning relyatsion modeli). Ushbu maqola birinchi navbatda "ma'lumotlarning relyatsion modeli" atamasidan foydalangan. 70-yillarda Qo'shma Shtatlarda doktor E. Kodd tomonidan ishlab chiqilgan relyatsion ma'lumotlar bazalari nazariyasi kuchli matematik asosga ega bo'lib, ma'lumotlarni samarali tashkil etish qoidalarini tavsiflaydi. E.Kodd tomonidan ishlab chiqilgan nazariy asos ma'lumotlar bazasini loyihalash nazariyasini rivojlantirish uchun asos bo'ldi.

E.Kodd, ma'lumoti bo'yicha matematik bo'lib, ma'lumotlarni qayta ishlash uchun to'plamlar nazariyasi apparati (birlashma, kesishma, farq, dekart mahsuloti) dan foydalanishni taklif qildi. U har qanday ma'lumotlar to'plamini matematikada "munosabatlar" deb nomlanuvchi maxsus turdagi ikki o'lchovli jadvallar ko'rinishida ifodalash mumkinligini isbotladi.

Aloqaviybarcha ma'lumotlar foydalanuvchiga ma'lumotlar qiymatlarining to'rtburchaklar jadvallari ko'rinishida taqdim etiladigan va ma'lumotlar bazasidagi barcha operatsiyalar jadvallarni manipulyatsiya qilishga qisqartirilgan bunday ma'lumotlar bazasi ko'rib chiqiladi.

Jadval quyidagilardan iborat ustunlar (maydonlar)va chiziqlar (yozuvlar);ma'lumotlar bazasida noyob bo'lgan nomga ega. Jadvalaks ettiradi ob'ekt turihaqiqiy dunyo (mohiyat),va uning har biri string ma'lum bir ob'ekt.Jadvaldagi har bir ustun ob'ektning ma'lum atributi uchun qiymatlar to'plamidir. Qadriyatlar deyiladi ob'ekt atributining barcha mumkin bo'lgan qiymatlari to'plamidan tanlanadi domen.

Uning umumiy ko'rinishida domen elementlari tegishli bo'lgan ba'zi bir asosiy ma'lumotlar turini va ma'lumotlar elementlariga qo'llaniladigan o'zboshimchalik bilan mantiqiy ifodani belgilash orqali aniqlanadi. Agar ma'lumotlar elementidagi mantiqiy holatni baholashda natija "to'g'ri" bo'lsa, unda ushbu element domenga tegishli. Oddiy holatda, domen bir xil turdagi qiymatlarning amaldagi potentsial to'plami sifatida aniqlanadi. Masalan, barcha xodimlarning tug'ilgan kunlari to'plami "tug'ilgan kunning domeni" ni, barcha xodimlarning ismlari esa "xodimlar nomi domenini" tashkil qiladi. Tug'ilgan domen sana vaqt bo'yicha ma'lumotni saqlash uchun ma'lumot turiga ega va xodim nomi domeni belgilar turi bo'lishi kerak.

Agar ikkita qiymat bitta domendan kelib chiqsa, siz ikkita qiymatni taqqoslashingiz mumkin. Misol uchun, agar ikkita qiymat tug'ilgan kunning domeniga tegishli bo'lsa, siz qaysi xodimning yoshi kattaroqligini aniqlash uchun ularni taqqoslashingiz mumkin. Agar qiymatlar turli xil domenlardan olingan bo'lsa, ularni taqqoslashga yo'l qo'yilmaydi, chunki, ehtimol, bu mantiqiy emas. Masalan, xodimning ismi va tug'ilgan kunini taqqoslashdan aniq bir narsa chiqmaydi.

Har bir ustunning (maydonning) nomi bor, u odatda jadvalning yuqori qismida yoziladi. Muayyan DBMS tarkibidagi jadvallarni loyihalashda uning har bir sohasi uchun tanlash mumkin turi,ya'ni uni namoyish qilish uchun bir qator qoidalarni belgilash, shuningdek ushbu sohada saqlanadigan ma'lumotlarda bajarilishi mumkin bo'lgan operatsiyalarni aniqlash. Turli xil ma'lumotlar bazalari uchun turkumlar turlicha bo'lishi mumkin.

Maydon nomi jadvalda yagona bo'lishi kerak, ammo har xil jadvallarda bir xil nomdagi maydonlar bo'lishi mumkin. Har qanday jadvalda kamida bitta maydon bo'lishi kerak; maydonlar jadvalda ularni yaratilish paytidagi nomlariga muvofiq joylashtirilgan. Maydonlardan farqli o'laroq, satrlarning nomlari yo'q; ularning jadvaldagi tartibi aniqlanmagan va ularning soni mantiqan cheklanmagan.

Jadvaldagi qatorlar buyurtma qilinmaganligi sababli, uning pozitsiyasi bo'yicha qatorni tanlash mumkin emas - ular orasida "birinchi", "ikkinchi", "oxirgi" yo'q. Har qanday jadvalda bitta yoki bir nechta ustunlar mavjud bo'lib, ularning qiymatlari uning har bir satrini o'ziga xos tarzda aniqlaydi. Bunday ustun (yoki ustunlar birikmasi) deyiladi asosiy kalit... Sun'iy maydon ko'pincha jadvaldagi yozuvlar bilan tanishtiriladi. Bunday maydon, masalan, jadvaldagi har bir yozuvning o'ziga xosligini ta'minlashi mumkin bo'lgan tartibli bo'lishi mumkin. Kalit quyidagi xususiyatlarga ega bo'lishi kerak.

O'ziga xoslik.Vaqtning istalgan lahzasida, kalitning tarkibiga kiritilgan atributlarning kombinatsiyasi uchun bir xil qiymatga ega bo'lgan ikki xil aloqalar mavjud emas. Ya'ni, jadvalda identifikatsiya raqami yoki pasport raqami bir xil bo'lgan ikkita satr bo'lishi mumkin emas.

Minimallik.Kalitga kiritilgan atributlarning hech biri o'ziga xoslikni buzmasdan kalitdan chiqarib tashlanishi mumkin emas. Bu shuni anglatadiki, pasport raqamini ham, identifikatsiya raqamini ham o'z ichiga olgan kalitni yaratish kerak emas. Koreysni noyob tarzda aniqlash uchun ushbu atributlardan birini ishlatish kifoya. Shuningdek, siz kalitga noyob bo'lmagan atributni kiritmasligingiz kerak, ya'ni kalit sifatida identifikatsiya raqami va xodim ismining kombinatsiyasidan foydalanish taqiqlanadi. Xodimning ismini kalitdan chiqarib, siz hali ham har bir qatorni noyob tarzda aniqlashingiz mumkin.

Har bir munosabat kamida bitta mumkin bo'lgan kalitga ega, chunki uning barcha xususiyatlarining umumiyligi o'ziga xoslik shartini qondiradi - bu munosabat ta'rifidan kelib chiqadi.

Mumkin bo'lgan kalitlardan biri tasodifiy tanlangan asosiy kalit sifatida.Agar mavjud bo'lsa, boshqa mumkin bo'lgan kalitlar sifatida qabul qilinadi muqobil kalitlar.Masalan, identifikatsiya raqamini asosiy kalit sifatida tanlasangiz, u holda pasport raqami muqobil kalit bo'ladi.

Jadvallarning o'zaro bog'liqligi ma'lumotlarning relyatsion modelining muhim elementidir. U qo'llab-quvvatlanadi chet el kalitlari.

Ma'lumotlar bazasi modelini tavsiflashda tavsiflash darajasi (nazariya yoki amaliyot) va tizimga (Access, SQL Server, dBase) qarab, bir xil tushuncha uchun ko'pincha turli xil atamalardan foydalaniladi. Jadval 2.3 ishlatilgan atamalarni umumlashtiradi.

2.3-jadval.Ma'lumotlar bazasi terminologiyasi

Ma'lumotlar bazasi nazariyasi ____________ Relatsion ma'lumotlar bazalari _________ SQL Server __________

Aloqalar jadvali jadvali

Tuple yozuvlar qatori

Xususiyat (maydon) _______________ Ustun yoki ustun

Relyatsion ma'lumotlar bazalari

Relyatsion ma'lumotlar bazasima'lumotlar bazasida saqlanishi kerak bo'lgan barcha ma'lumotlarni o'z ichiga olgan munosabatlar to'plami. Ya'ni ma'lumotlar bazasi barcha ma'lumotlarni saqlash uchun zarur bo'lgan jadvallar to'plamini aks ettiradi. Ma'lumotlar bazasining relyatsion jadvallari bir-biri bilan mantiqan bog'liqdir. Relyatsion ma'lumotlar bazasini loyihalashga qo'yiladigan talablar bir nechta qoidalarda umumlashtirilishi mumkin.

O Har bir jadval ma'lumotlar bazasida o'ziga xos nomga ega va bir xil turdagi qatorlardan iborat.

O har bir jadval belgilangan sonli ustunlar va qiymatlardan iborat. Bir nechta qiymatlarni satrning bitta ustunida saqlash mumkin emas. Masalan, muallif, nashr etilgan sana, tiraji va boshqalar to'g'risidagi ma'lumotlar mavjud jadval mavjud bo'lsa, unda muallifning ismi ko'rsatilgan ustun bir nechta familiyani o'z ichiga olmaydi. Agar kitob ikki yoki undan ortiq muallif tomonidan yozilgan bo'lsa, qo'shimcha jadvallardan foydalanishingiz kerak bo'ladi.

O Vaqtning hech bir qismida jadvalda bir-birini takrorlaydigan ikkita qator bo'lmaydi. Jadvaldagi istalgan qatorni noyob tarzda aniqlash uchun qatorlar kamida bitta qiymat bilan farq qilishi kerak.

O har bir ustunga jadval ichida noyob nom berilgan; u uchun bir xil qiymatlar (sana, familiya, telefon raqamlari, pul summasi va boshqalar) joylashtirilishi uchun ma'lum bir ma'lumot turi o'rnatiladi.

O ma'lumotlar bazasining to'liq axborot tarkibi ma'lumotlarning aniq qiymatlari ko'rinishida taqdim etilgan va ushbu taqdim etish usuli yagona hisoblanadi. Masalan, jadvallar o'rtasidagi munosabatlar sun'iy ravishda munosabatlarni aniqlaydigan har qanday ko'rsatgichlar asosida emas, balki tegishli ustunlarda saqlangan ma'lumotlarga asoslanadi.

O Ma'lumotlarni qayta ishlashda siz jadvalning istalgan qatoriga yoki ustunlariga bemalol murojaat qilishingiz mumkin. Jadvalda saqlangan qiymatlar ma'lumotlarga kirish tartibida hech qanday cheklovlar qo'ymaydi. Ustun tavsifi,

Barcha zamonaviy ma'lumotlar bazalarida CBO (xarajatlarga asoslangan optimallashtirish), xarajatlarni optimallashtirish qo'llaniladi. Uning mohiyati shundan iboratki, har bir operatsiya uchun uning "qiymati" aniqlanadi, so'ngra operatsiyalarning "eng arzon" zanjirlari yordamida so'rovning umumiy qiymati kamayadi.

Narxlarni optimallashtirishni yaxshiroq tushunish uchun biz ikkita jadvalga qo'shilishning uchta umumiy usulini ko'rib chiqamiz va oddiy qo'shilish so'rovi ham optimizatorning dahshatiga aylanib ketishini ko'rib chiqamiz. Bizning munozaramiz uchun biz vaqtning murakkabligiga e'tibor qaratamiz, ammo optimallashtiruvchi protsessor, xotira va I / U manbalaridagi "xarajatlarni" hisoblab chiqadi. Shunchaki vaqt murakkabligi taxminiy tushuncha bo'lib, kerakli protsessor resurslarini aniqlash uchun barcha operatsiyalarni hisoblash kerak, shu jumladan, agar bayonotlar, ko'paytma, takrorlash va hk.

Bundan tashqari:

  • Har bir yuqori darajadagi operatsiya uchun protsessor turli darajadagi past darajadagi operatsiyalarni bajaradi.
  • Protsessor operatsiyalari narxi (tsikllar bo'yicha) har xil turdagi protsessorlar uchun har xil, ya'ni bu protsessorning o'ziga xos arxitekturasiga bog'liq.
Shuning uchun biz murakkablik nuqtai nazaridan baholashimiz osonroq bo'ladi. Ammo esda tutingki, ko'pincha ma'lumotlar bazasining ishlashi protsessor resurslari bilan emas, balki diskning quyi tizimi bilan cheklanadi.

Biz B daraxtlariga qarab, ular haqida gaplashdik. Esingizda bo'lsa, indekslar allaqachon saralangan. Aytgancha, boshqa turdagi indekslar mavjud, masalan, bitmap indekslari. Ammo ular B-daraxt ko'rsatkichlari oldida protsessor, xotira va diskdan foydalanish bo'yicha hech qanday ustunlik bermaydilar. Bundan tashqari, ko'plab zamonaviy ma'lumotlar bazalari dinamik ravishda joriy so'rovlar bo'yicha vaqtinchalik indekslarni yaratishi mumkin, agar bu rejani bajarish xarajatlarini kamaytirishga yordam bersa.

4.4.2. Aloqa usullari

Birlashtirish operatorlaridan foydalanishdan oldin, avval kerakli ma'lumotlarni olishingiz kerak. Buni quyidagi usullar bilan amalga oshirish mumkin.

  • To'liq skanerlash. JB shunchaki jadvalni yoki indeksni to'liq o'qiydi. Siz tasavvur qilganingizdek, diskning quyi tizimi uchun indeksni jadvalga qaraganda arzonroq o'qish mumkin.
  • Oraliq skanerlash. Masalan, WHERE AGE\u003e 20 AND AGE kabi predikatlardan foydalanganda foydalaniladi< 40. Конечно, для сканирования диапазона индекса вам нужно иметь индекс для поля AGE.

    Maqolaning birinchi qismida biz allaqachon intervalli so'rovning vaqt murakkabligi M + log (N) sifatida aniqlanganligini aniqladik, bu erda N - indeksdagi ma'lumotlar miqdori, va M - bu qator ichidagi qatorlarning taxminiy soni. Ushbu ikkala o'zgaruvchining qiymatlari bizga statistika orqali ma'lum. Intervalli skanerlash faqat indeksning bir qismini o'qiydi, shuning uchun bu operatsiya to'liq skanerlashdan kamroq turadi.

  • Noyob qadriyatlar bo'yicha skanerlash. Indeksdan faqat bitta qiymat olish kerak bo'lganda ishlatiladi.
  • Qator identifikatori bo'yicha kirish. Agar ma'lumotlar bazasida indeks ishlatilsa, unda ko'pincha u bilan bog'liq qatorlarni qidiradi. Masalan, biz quyidagi so'rovni beramiz:

    YOSH \u003d 28 bo'lgan odamdan LASTNAME, FIRSTNAME nomini tanlang
    Agar bizda yosh ustunida indeks bo'lsa, unda optimallashtiruvchi indeksdan foydalanib, barcha 28 yoshli bolalarni topadi va keyin tegishli jadval satrlarining identifikatorlarini so'raydi, chunki indeksda faqat yosh haqidagi ma'lumotlar mavjud.

    Aytaylik, bizda boshqa iltimos bor:

    PERSON dan TYPE_PERSON.CATEGORY-ni tanlang, TYPE_PERSON WHERE PERSON.AGE \u003d TYPE_PERSON.AGE
    TYPE_PERSON bilan qo'shilish uchun PERSON ustunidagi indeks ishlatiladi. Ammo biz "PERSON" jadvalidan ma'lumot so'ramaganimiz uchun, hech kim unga satr identifikatorlari bo'yicha murojaat qilmaydi.

    Ushbu yondashuv ozgina xitlar uchun yaxshi, chunki u I / O nuqtai nazaridan qimmatga tushadi. Agar siz ID orqali tez-tez murojaat qilishingiz kerak bo'lsa, unda to'liq skanerdan foydalanish yaxshiroqdir.

  • boshqa usullar... Siz ular haqida Oracle hujjatlarida o'qishingiz mumkin. Turli xil ma'lumotlar bazalarida turli xil nomlar ishlatilishi mumkin, ammo printsiplar hamma joyda bir xildir.
4.4.3. Uyushma faoliyati

Shunday qilib, biz ma'lumotlarni qanday olishni bilamiz, ularni birlashtirish vaqti keldi. Avvalo, ba'zi yangi shartlarni aniqlaymiz: ichki bog'liqliklar va tashqi bog'liqliklar... Narkomaniya bo'lishi mumkin:

  • stol,
  • indeks,
  • oldingi operatsiyaning oraliq natijasi (masalan, oldingi qo'shilish).
Ikki bog'liqlikni birlashtirganimizda, birlashtirish algoritmlari ularni boshqacha boshqaradi. Aytaylik, A JOIN B bu A va B ning birlashmasi, bu erda A tashqi bog'liqlik, B esa ichki bog'liqlik.

Ko'pincha B JOIN B qiymati B JOIN A narxiga teng bo'lmaydi.

Aytaylik, tashqi bog'liqlik N elementga, ichki esa M ga ega bo'lsa, esingizda bo'lsa, optimizator bu qiymatlarni statistika orqali biladi. N va M - bu bog'liqliklarning asosiy raqamlari.

  • Ichki ko'chadan foydalanib birlashma. Bu birlashtirishning eng oddiy usuli.

    U shunday ishlaydi: tashqi bog'liqlikning har bir satri uchun ichki bog'liqlikning barcha satrlari uchun mosliklar qidiriladi.

    Pseudocode misoli:

    Nested_loop_join (qator tashqi, qator ichki) har bir satr uchun tashqi har bir satr uchun b ichki qatorda (match_join_condition (a, b)) write_result_in_output (a, b) end if end for end for end
    Bu ikki marta takrorlanish bo'lgani uchun, vaqt murakkabligi O (N * M) ga teng.

    Tashqi qaramlikning N satrining har biri uchun tashqi bog'liqlikning M satrini hisoblash kerak. Ya'ni, ushbu algoritm N + N * M disk o'qilishini talab qiladi. Agar ichki bog'liqlik etarlicha kichik bo'lsa, unda siz uni to'liq xotiraga qo'yishingiz mumkin, shunda diskning quyi tizimida faqat M + N ko'rsatkichlari bo'ladi. Shunday qilib, ichki bog'liqlikni xotirada saqlash uchun iloji boricha ixcham qilish tavsiya etiladi.

    Vaqtning murakkabligi jihatidan farq yo'q.

    I / O ni tejash uchun ichki bog'liqlikni indeks bilan almashtirishingiz mumkin.
    Agar ichki bog'liqlik xotiraga to'liq mos kelmasa, diskdan tejamkorroq foydalanadigan boshqa algoritmdan foydalanishingiz mumkin.

    • Ikkala bog'liqlikni satrma-navbat o'qish o'rniga, ular satrlar guruhida (shamlardan) o'qiladi, har bir bog'liqlikdan bittadan guruh xotirada saqlanadi.
    • Ushbu guruhlarning satrlari bir-biri bilan taqqoslanadi va topilgan gugurtlar alohida saqlanadi.
    • Keyin yangi guruhlar xotiraga yuklanadi va ular bir-biri bilan taqqoslanadi.
    Va shuning uchun ham guruhlar tugamaguncha.

    Algoritm misoli:

    // I / O diskini kamaytirish uchun takomillashtirilgan versiya. nested_loop_join_v2 (tashqi fayl, ichki fayl) har bir dasta uchun tashqi // ba har bir dasta uchun xotirada bb ichki // bb endi har bir satr uchun har bir satr uchun a har bir satr uchun b har bir satr uchun bb if (match_join_condition ( a, b)) write_result_in_output (a, b) end end if end for end end for end uchun
    Bunday holda, vaqtning murakkabligi bir xil bo'lib qoladi, ammo diskka kirish soni kamayadi: (tashqi guruhlar soni + tashqi guruhlar soni * ichki guruhlar soni). Guruh kattalashishi bilan diskka kirish soni yanada kamayadi.

    Izoh: ushbu algoritmda har bir qo'ng'iroq bilan ko'proq ma'lumotlar o'qiladi, ammo bu muhim emas, chunki qo'ng'iroqlar ketma-ketlikda bo'ladi.

  • Hash qo'shiling. Bu yanada murakkab operatsiya, ammo ko'p hollarda uning narxi arzonroq.

    Algoritm quyidagicha:

    1. Ichki qaramlikdan barcha elementlar o'qiladi.
    2. Xash jadvali xotirada yaratiladi.
    3. Tashqi qaramlikdagi barcha elementlar birma-bir o'qiladi.
    4. Har bir element uchun xash (xash jadvalidagi tegishli funktsiyadan foydalangan holda) hisoblab chiqiladi, shunda tegishli blok ichki bog'liqlikda topilishi mumkin.
    5. Blok elementlari tashqi bog'liqlik elementlari bilan taqqoslanadi.
    Ushbu algoritmni vaqt murakkabligi nuqtai nazaridan baholash uchun bir nechta taxminlarni kiritish kerak:
    • Ichki bog'liqlik X bloklarini o'z ichiga oladi.
    • Xash funktsiyasi ikkala bog'liqlik uchun xeshlarni deyarli bir xil taqsimlaydi. Ya'ni, barcha bloklar bir xil o'lchamga ega.
    • Tashqi qaramlik elementlari va blok ichidagi barcha elementlar o'rtasidagi moslikni topish qiymati blok ichidagi elementlar soniga teng.
    Keyin vaqtning murakkabligi quyidagicha bo'ladi:

    (M / X) * (N / X) + hashtable_cost (M) + hash_cost * N

    Agar xash funktsiyasi etarlicha kichik bloklarni yaratadigan bo'lsa, u holda vaqt murakkabligi O (M + N) bo'ladi.

    Xotirada ko'proq samarador bo'lgan va qo'shimcha I / U talab qilmaydigan yana bir aralashtirish usuli mavjud:

    1. Hash jadvallari ikkala bog'liqlik uchun ham hisoblab chiqilgan.
    2. Diskka joylashtirilgan.
    3. Va keyin ular bir-birlari bilan xatti-harakatlari bilan taqqoslanadi (bitta blok xotiraga yuklanadi, ikkinchisi esa satrma-bosqich o'qiladi).
    Birlashtirish birlashishi. Bu birlashtirishning yagona usuli, natijada ma'lumotlar saralanadi. Ushbu maqola doirasida biz bog'liqliklar tashqi va ichki bo'linmaganda soddalashtirilgan holatni ko'rib chiqamiz, chunki ular xuddi shunday yo'l tutishadi. Biroq, haqiqiy hayotda ular, masalan, dublikatlar bilan ishlashda farq qilishi mumkin.

    Birlashma operatsiyasini ikki bosqichga bo'lish mumkin:

    1. (Majburiy emas) Dastlab, har ikkala ma'lumotlar to'plamlari birlashma tugmachalari bo'yicha saralanganida, tartiblash qo'shilishi amalga oshiriladi.
    2. Keyin birlashma sodir bo'ladi.
    Tartiblash

    Birlashtirish tartiblash algoritmi allaqachon yuqorida muhokama qilingan, agar siz xotirani tejashga qiziqsangiz, bu juda asosli.

    Ammo ma'lumotlar to'plamlari allaqachon tartiblangan bo'lib qoladi, masalan:

    • Agar stol tabiiy ravishda tashkil etilgan bo'lsa.
    • Agar bog'liqlik indeks bo'lsa, qo'shilish sharti mavjud.
    • Agar birlashma oraliq tartiblangan natija bilan yuzaga kelsa.
    Birlashtirish birlashishi

    Ushbu operatsiya birlashtirish tartibida protsedurada birlashtirish operatsiyasiga juda o'xshaydi. Ammo ikkala bog'liqlikning barcha a'zolarini tanlash o'rniga, biz faqat teng a'zolarni tanlaymiz.

    1. Ikkala bog'liqlikning hozirgi ikki a'zosi taqqoslanadi.
    2. Agar ular teng bo'lsa, ular natijalar jadvaliga kiritiladi, so'ngra har bir qaramlikdan bittadan keyingi ikkita element taqqoslanadi.
    3. Agar ular teng bo'lmasa, unda taqqoslash takrorlanadi, lekin ikkita elementning eng kichigi o'rniga bir xil bog'liqlikdan keyingi element olinadi, chunki bu holda tasodif ehtimoli yuqori bo'ladi.
    4. 1-3-qadamlar bog'liqliklardan birining elementlari tugamaguncha takrorlanadi.
    Agar ikkala bog'liqlik allaqachon saralangan bo'lsa, unda vaqtning murakkabligi O (N + M) dir.

    Agar ikkala bog'liqlikni hali ham saralash kerak bo'lsa, unda vaqtning murakkabligi O (N * Log (N) + M * Log (M)).

    Ushbu algoritm yaxshi ishlaydi, chunki ikkala bog'liqlik allaqachon saralangan va biz ularni oldinga va orqaga o'tishimiz shart emas. Biroq, bu erda biroz soddalashtirishga ruxsat beriladi: algoritm bir xil ma'lumotlar bir necha marta sodir bo'lganda, ya'ni bir nechta o'yinlar sodir bo'lganda vaziyatlarni ko'rib chiqmaydi. Haqiqatda algoritmning yanada murakkab versiyasidan foydalaniladi. Masalan:

    MergeJoin (munosabat a, munosabat b) munosabat chiqish tamsayı a_key: \u003d 0; tamsayı b_key: \u003d 0; while (a! \u003d null va b! \u003d null) bo'lsa (a< b) a_key++; else if (a > b) b_key ++; else // predikat qondirish write_result_in_output (a, b) ga qo'shiling // a_key_temp tamsayı ko'rsatgichlarini ko'paytirganda ehtiyot bo'lishimiz kerak: \u003d a_key; tamsayı b_key_temp: \u003d b_key; agar (a! \u003d b) b_key_temp: \u003d b_key + 1; agar if (b! \u003d a) a_key_temp: \u003d a_key + 1; agar if (b \u003d\u003d a && b \u003d\u003d a) a_key_temp: \u003d a_key + 1; b_key_temp: \u003d b_key + 1; a_key: \u003d a_key_temp bo'lsa tugaydi; b_key: \u003d b_key_temp; tugatish agar tugash esa

Qaysi algoritmni tanlashingiz kerak?

Agar birlashtirishning eng yaxshi usuli bo'lsa, unda bu navlarning barchasi mavjud bo'lmaydi. Shunday qilib, bu savolga javob bir qator omillarga bog'liq:

  • Mavjud xotira... Agar bu etarli bo'lmasa, kuchli xash qo'shilishni unuting. Hech bo'lmaganda, uni xotirada to'liq bajarish haqida.
  • Ikkita test holatlarining hajmi. Agar sizda bitta jadval katta bo'lsa, ikkinchisi juda kichik bo'lsa, u holda ichki biriktirilgan birikma eng tez ishlaydi, chunki xash qo'shilishi xeshlarni yaratish uchun qimmatga tushadi. Agar sizda ikkita juda katta jadval mavjud bo'lsa, u holda ichki protsessor barcha CPU resurslarini sarf qiladi.
  • Indekslarning mavjudligi. Agar sizda ikkita B-daraxt ko'rsatkichlari bo'lsa, birlashma qo'shilishidan foydalanish yaxshiroqdir.
  • Natijani saralash kerakmi yoki yo'qmi. Agar siz tartiblanmagan ma'lumotlar to'plamlari bilan ishlayotgan bo'lsangiz, qimmatbaho birlashma (tartiblangan) qo'shilishni xohlashingiz mumkin. Keyin siz chiqishda tartiblangan ma'lumotlarni olasiz, bu boshqa birlashma natijalari bilan birlashtirish uchun qulayroqdir. Yoki so'rov to'g'ridan-to'g'ri yoki aniq ravishda ORDER BY / GROUP BY / DISTINCT so'zlari bo'yicha ma'lumotlarni saralashni o'z ichiga olganligi sababli.
  • Chiqish bog'liqliklari tartiblanganmi... Bunday holda, birlashma qo'shilishidan foydalanish yaxshiroqdir.
  • Siz qanday bog'liqlik turlaridan foydalanmoqdasiz... Ekvivalentlik qo'shilish (jadval.column1 \u003d table.B.column2)? Ichki bog'liqliklar, tashqi, kartezyen mahsulotmi yoki o'z-o'zidan qo'shilishmi? Turli vaziyatlarda ba'zi birlashma usullari ishlamaydi.
  • Ma'lumotlarni tarqatish... Agar ma'lumotlar birlashma sharti tufayli rad etilsa (masalan, siz odamlarni familiya bilan birlashtirsangiz, lekin ko'pincha ismlar mavjud), hech qanday holatda siz xash qo'shilishni ishlatmasligingiz kerak. Aks holda, xash funktsiyasi ichki taqsimoti juda yomon bo'lgan chelaklarni yaratadi.
  • Bir nechta jarayonlarga / ish zarralariga birlashish zarurmi.
Ilmga chanqoq bo'lganlar DB2, ORACLE va SQL Server hujjatlarini chuqurroq o'rganishlari mumkin.

4.4.4. Soddalashtirilgan misollar

Aytaylik, ba'zi odamlar haqida to'liq tasavvurga ega bo'lish uchun beshta jadvalni birlashtirishimiz kerak. Har kim quyidagilarga ega bo'lishi mumkin:

  • Bir nechta mobil telefon raqamlari.
  • Bir nechta elektron pochta manzillari.
  • Bir nechta jismoniy manzillar.
  • Bir nechta bank hisob raqamlari.
Ya'ni, ushbu so'rovga tezda javob berishingiz kerak:

PERSON.PERSON_ID \u003d MOBILES.PERSON_ID AND PERSON.PERSON_ID \u003d MAILS.PERSON_ID AND PERSON.PERSON_ID \u003d ADRESSES.PERSON_ID AND PERSON, MOBILES, MAILS, ADRESSES, BANK_ACCOUNTS dan SELECT * ni tanlang.
Optimizator ma'lumotlarga ishlov berishning eng yaxshi usulini topishi kerak. Ammo ikkita muammo mavjud:

  1. Foydalanish uchun qaysi usulni birlashtirish kerak? 0, 1 yoki 2 indekslardan foydalanish imkoniyati bilan uchta variant mavjud (xash qo'shilish, birlashma qo'shilish, ichki biriktirilgan birikma). Aytish kerak emas, indekslar ham boshqacha bo'lishi mumkin.
  2. Siz qanday tartibda birlashishingiz kerak?
Masalan, to'rtta jadvalning uchta qo'shilishi uchun quyidagilar mumkin:

Yuqoridagilardan kelib chiqib, qanday harakatlarning variantlari mavjud?

  1. Qattiq kuch ishlatish usulidan foydalaning. Statistikadan foydalanib, mumkin bo'lgan har bir so'rovni bajarish rejasining narxini hisoblang va eng arzonini tanlang. Ammo juda ko'p variantlar mavjud. Har bir kombinatsiyalashgan buyurtma uchun jami 34 \u003d 81 ta bajarilishi mumkin bo'lgan rejalar uchun uch xil kombinatsiyalash usullaridan foydalanish mumkin. Ikkilik daraxt holatida birlashish tartibini tanlash masalasi almashtirish masalasiga aylanadi va variantlar soni (2 * 4)! / (4 + 1)! .. Natijada, bu juda soddalashtirilgan misolda, mumkin bo'lgan so'rovlarni bajarish rejalarining umumiy soni 34 * (2 * 4)! / (4 + 1)! \u003d 27 216. Bunga 0, 1 yoki 2 ta B-daraxt indekslari birlashma qo'shilishida foydalaniladigan variantlarni qo'shsak, mumkin bo'lgan rejalar soni 210000 ga etadi.Bu juda JUDA sodda so'rov ekanligini eslatib o'tdikmi?
  2. Yig'lang va chiqing. Juda jozibali, ammo samarasiz va pul kerak.
  3. Bir nechta rejalarni sinab ko'ring va eng arzonini tanlang. Mumkin bo'lgan barcha variantlarning narxini hisoblashning iloji yo'qligi sababli, ularning narxini baholash va eng yaxshisini tanlash uchun siz o'zboshimchalik bilan testlar to'plamini olishingiz va barcha turdagi rejalarni bajarishingiz mumkin.
  4. Mumkin bo'lgan rejalar sonini kamaytirish uchun aqlli qoidalarni qo'llang.
    Ikki xil qoidalar mavjud:
    1. "Mantiqiy", bu bilan siz foydasiz variantlarni chiqarib tashlashingiz mumkin. Ammo ular har doim ham qo'llanilishi mumkin emas. Masalan, "ichki ko'chadan foydalanib birlashganda ichki bog'liqlik eng kichik ma'lumotlar to'plami bo'lishi kerak."
    2. Mumkin bo'lgan rejalar sonini kamaytirish uchun sizga eng foydali echimni izlash va qat'iyroq qoidalarni qo'llash shart emas. "Agar qaramlik kichik bo'lsa, ichki biriktirilgan qo'shilishdan foydalaning, lekin hech qachon birlashma yoki xash qo'shilishni".
Hatto bunday oddiy misol ham bizga ulkan tanlovni taqdim etadi. Va haqiqiy so'rovlarda boshqa aloqalar operatorlari bo'lishi mumkin: OUTER JOIN, CROSS JOIN, GROUP BY, ORDER BY, PROJECTION, UNION, INTERSECT, DISTINCT va boshqalar. Ya'ni, amalga oshirish mumkin bo'lgan rejalar soni yanada ko'proq bo'ladi.

Xo'sh, ma'lumotlar bazasi qanday qilib tanlov qiladi?

4.4.5. Dinamik dasturlash, ochko'zlik algoritmi va evristika

Relyatsion ma'lumotlar bazasida yuqorida aytib o'tilgan turli xil yondashuvlardan foydalaniladi. Va optimizatorning vazifasi cheklangan vaqt ichida tegishli echimni topishdir. Ko'pgina hollarda optimallashtiruvchi eng yaxshisini emas, balki shunchaki yaxshi echimni qidiradi.

Qo'pol kuch kichik so'rovlar uchun javob berishi mumkin. Va keraksiz hisob-kitoblarni yo'q qilish usullari bilan qo'pol kuch hatto o'rta hajmdagi so'rovlar uchun ham ishlatilishi mumkin. Bunga dinamik dasturlash deyiladi.

Uning mohiyati shundan iboratki, ko'plab ijro rejalari juda o'xshashdir.

Ushbu rasmda to'rtta reja ham "A JOIN B" kichik daraxtidan foydalanadi, har bir reja uchun uning narxini hisoblash o'rniga, biz uni faqat bir marta sanab, so'ngra ushbu ma'lumotlardan kerakli darajada foydalanishimiz mumkin. Boshqacha qilib aytganda, yodlash yordamida biz bir-birining ustiga chiqish masalasini hal qilamiz, ya'ni keraksiz hisob-kitoblardan qochamiz.

Ushbu yondashuv tufayli vaqt murakkabligi o'rniga (2 * N)! / (N + 1)! biz "faqat" 3 N olamiz. To'rtta qo'shilish bilan oldingi misol uchun bu variantlar sonining 336 dan 81 gacha kamayishini anglatadi. Agar biz 8 ta qo'shilish bilan so'rov olsak (kichik so'rov), unda murakkablik pasayishi 57 657 600 dan 6561 gacha bo'ladi.

Agar siz dinamik dasturlash yoki algoritmlarni yaxshi bilsangiz, ushbu algoritm bilan o'ynashingiz mumkin:

Findbestplan (S) protsedurasi if (bestplan [S] .cost infinite) return bestplan [S] // else bestplan [S] oldin hisoblanmagan bo'lsa, uni hozir (S faqat 1 ta munosabatni o'z ichiga olgan bo'lsa) bestplan [S] ni o'rnatgan holda hisoblang. plan va bestplan [S] .ko'p kirishni eng yaxshi usuli asosida S / * S ning bo'shliqsiz S1 har bir to'plami uchun S bo'yicha tanlovlardan va S * / else indekslaridan foydalanish uchun S1! \u003d S P1 \u003d findbestplan (S1) P2 \u003d findbestplan (S - S1) A \u003d P1 va P2 natijalariga qo'shilish uchun eng yaxshi algoritm \u003d P1.cost + P2.cost + A qiymati< bestplan[S].cost bestplan[S].cost = cost bestplan[S].plan = “execute P1.plan; execute P2.plan; join results of P1 and P2 using A” return bestplan[S]
Kattaroq so'rovlar uchun dinamik dasturlashdan foydalanish mumkin, ammo mumkin bo'lgan rejalar sonini kamaytirish uchun qo'shimcha qoidalarni (evristika) joriy qilish kerak:


Ochko'zlik algoritmlari

Ammo agar so'rov juda katta bo'lsa yoki biz tezda javob olishimiz kerak bo'lsa, algoritmlarning yana bir klassi - ochko'z algoritmlardan foydalaniladi.

Bunday holda, so'rovni bajarish rejasi ma'lum bir qoida (evristik) yordamida bosqichma-bosqich tuziladi. Uning yordamida ochko'zlik algoritmi har bir bosqich uchun eng yaxshi echimni alohida izlaydi. Reja JOIN bayonoti bilan boshlanadi, so'ngra har bir bosqichda qoidaga muvofiq yangi JOIN qo'shiladi.

Keling, oddiy bir misolni ko'rib chiqaylik. 5 jadvalning (A, B, C, D va E) 4 ta qo'shilishidan iborat so'rovni olaylik. Keling, vazifani biroz soddalashtiramiz va tasavvur qilamizki, bitta variant - ichki algoritmlar yordamida birlashtirish. Biz "eng kam xarajatli qo'shilishni qo'llang" qoidasidan foydalanamiz.

  • Biz jadvallardan biridan boshlaymiz, masalan A.
  • Biz har bir birlashmaning narxini A bilan hisoblaymiz (u tashqi va ichki qaramlik rolida bo'ladi).
  • A JOIN B bizga eng kam xarajat qilishini tushunamiz.
  • Keyin biz har bir birlashmaning narxini A JOIN B natijasi bilan hisoblaymiz (biz uni ikkita rolda ko'rib chiqamiz).
  • Biz bilamizki (A JOIN B) JOIN C eng foydali bo'ladi.
  • Shunga qaramay, biz mumkin bo'lgan variantlarni baholaymiz.
  • Oxirida biz quyidagi so'rovlarni bajarish rejasini olamiz: (((A JOIN B) JOIN C) JOIN D) JOIN E) /
Xuddi shu algoritm B jadvalidan boshlab, keyin C dan va boshqalarga variantlarni baholash uchun qo'llanilishi mumkin. Natijada biz beshta rejani olamiz, ulardan eng arzonini tanlaymiz.

Ushbu algoritm "Yaqin qo'shni algoritmi" deb nomlanadi.

Biz tafsilotlarga to'xtamaymiz, ammo N * log (N) saralashning murakkabligini yaxshi modellashtirish bilan bu muammo bo'lishi mumkin. Algoritmning vaqt murakkabligi dinamik dasturlash bilan to'liq versiyasi uchun O (3 N) o'rniga O (N * log (N)). Agar sizda 20 ta qo'shilish bilan katta so'rov bo'lsa, bu 26 va 3 486 784 401 ga to'g'ri keladi. Katta farq, to'g'rimi?

Ammo bir nuance bor. Ikkala jadvalga qo'shilishning eng yaxshi usulini topsak, oldingi qo'shilish natijasi quyidagi jadvallar bilan birlashganda eng past narxni olamiz deb o'ylaymiz. Ammo, agar JOIN B eng arzon variant bo'lsa ham, (A JOIN C) JOIN B (A JOIN B) JOIN C ga qaraganda arzonroq bo'lishi mumkin.

Shunday qilib, siz barcha vaqtlarning eng arzon rejasini topishni juda xohlasangiz, biz sizga turli xil qoidalar yordamida ochko'z algoritmlarni ko'p marta ishlatishni maslahat beramiz.

Boshqa algoritmlar

Agar siz allaqachon ushbu algoritmlarning barchasidan charchagan bo'lsangiz, unda ushbu bobni o'tkazib yuborishingiz mumkin. Qolgan materiallarni o'zlashtirish kerak emas.

Ko'pgina tadqiqotchilar eng yaxshi so'rovlarni bajarish rejasini topish muammosi bilan shug'ullanmoqdalar. Ular ko'pincha aniq vazifalar va naqshlar uchun echim topishga harakat qilishadi. Masalan, yulduz qo'shilishlari uchun, parallel so'rov bajarilishi va boshqalar.

Biz katta so'rovlarni bajarish uchun dinamik dasturlash o'rnini bosadigan alternativalarni qidirmoqdamiz. Xuddi shu ochko'zlik algoritmlari evristik algoritmlarning bir qismidir. Ular qoida bo'yicha harakat qilishadi, bir bosqich natijasini eslashadi va undan keyingi bosqich uchun eng yaxshi variantni topish uchun foydalanadilar. Va oldingi bosqich uchun topilgan echimdan har doim ham foydalanmaydigan algoritmlarga evristik deyiladi.

Masalan, genetik algoritmlar:

  • Har bir qaror so'rovni to'liq bajarish uchun rejadir.
  • Bitta echim (reja) o'rniga algoritm har bir bosqichda X echimini hosil qiladi.
  • Birinchidan, X rejalari tuziladi, bu tasodifiy ravishda amalga oshiriladi.
  • Ulardan faqat ma'lum bir mezonga mos keladigan rejalar saqlanib qoladi.
  • Keyin ushbu rejalar aralashtiriladi va X yangi rejalar tuziladi.
  • Ba'zi yangi rejalar tasodifiy ravishda o'zgartirilgan.
  • Oldingi uchta qadam Y marta takrorlanadi.
  • Oxirgi tsiklning rejalaridan biz eng yaxshisini olamiz.
Ko'proq tsikllar, arzonroq rejani hisoblash mumkin. Tabiiy tanlov, xususiyatlarni aniqlash, barchasi shu.
Aytgancha, genetik algoritmlar PostgreSQL-ga birlashtirilgan.

Ma'lumotlar bazasida simulyatsiya qilingan tavlanish, takroriy takomillashtirish, ikki fazali optimallashtirish kabi evristik algoritmlardan ham foydalaniladi. Ammo ularning korporativ tizimlarda ishlatilishi haqiqat emas, ehtimol ularning taqdiri tadqiqot mahsulotidir.

4.4.6. Haqiqiy optimizatorlar

Shuningdek, ixtiyoriy bob, uni o'tkazib yuborishingiz mumkin.

Keling, nazariylashtirishdan uzoqlashamiz va hayotiy misollarni ko'rib chiqamiz. Masalan, SQLite optimizatori qanday ishlaydi. Bu qo'shimcha qoidalar bilan oddiy ochko'z optimallashtirish yordamida "engil" ma'lumotlar bazasi:

  • SQLite hech qachon CROSS JOIN operatsiyasida jadvallar tartibini o'zgartirmaydi.
  • Buning uchun ichki ko'chadan birlashma ishlatiladi.
  • Tashqi qo'shilish har doim sodir bo'lgan tartibda baholanadi.
  • 3.8.0 versiyasiga qadar ochko'zlik bilan eng yaqin Neighor algoritmi eng yaxshi so'rovlarni bajarish rejasini topish uchun ishlatiladi. Va 3.8.0 versiyasidan boshlab "N Yaqin Qo'shnilar" (N3, N Yaqin Qo'shnilar) qo'llaniladi.
Yana bir misol. Agar biz IBM DB2 hujjatlarini o'qib chiqsak, uning optimallashtiruvchisi 7 xil optimallashtirish darajasidan foydalanganligini bilib olamiz:
  • Ochko'z algoritmlar:
    • 0 - minimal optimallashtirish. Indekslarni skanerlashdan foydalanadi, ichki ko'chadan qo'shiladi va ba'zi so'rovlarni qayta yozishdan qochadi.
    • 1 - past optimallashtirish
    • 2 - to'liq optimallashtirish
  • Dinamik dasturlash:
    • 3 - o'rtacha optimallashtirish va taxminiy yaqinlashish
    • 5 - to'liq optimallashtirish, barcha evristik usullardan foydalaniladi
    • 7 - xuddi shunday, ammo evristikasiz
    • 9 - sarf qilingan kuchdan qat'i nazar, har qanday narxda maksimal optimallashtirish. Birlashtirishning barcha mumkin bo'lgan usullari, shu jumladan kartezyen mahsulotlari baholanadi.
Sukut bo'yicha 5-daraja. Bunga quyidagilar kiradi:
  • Barcha mumkin bo'lgan statistik ma'lumotlarni, shu jumladan chastotalarni taqsimlash va kvantilalarni to'plang.
  • Barcha so'rovlarni qayta yozish qoidalarini qo'llash, shu jumladan amalga oshirilgan so'rovlar uchun jadval yo'nalishini tuzish). Istisno - bu juda cheklangan hollarda ishlatiladigan hisoblash intensiv qoidalari.
  • Dinamik dasturlash yordamida qo'shilish parametrlari bo'yicha takrorlanganda:
    • Kompozit ichki qaramlik cheklangan darajada qo'llaniladi.
    • Konvertatsiya jadvallari bo'lgan yulduzli jadvallar uchun Kartezyen mahsulotlari cheklangan.
  • Ro'yxatni oldindan olish (quyida quyida keltirilgan), maxsus VA indeks operatsiyalari va amalga oshirilgan so'rovlar uchun jadvalni yo'naltirish kabi keng qamrovli kirish usullari mavjud.
Albatta, ishlab chiquvchilar o'z mahsulotlarida ishlatiladigan evristika haqida batafsil ma'lumot bermaydilar, chunki optimizator ma'lumotlar bazasining eng muhim qismidir. Biroq ma'lumki, birlashish tartibini aniqlash uchun sukut bo'yicha evristik cheklangan dinamik dasturlash ishlatiladi.

Boshqa shartlar (GROUP BY, DISTINCT va boshqalar) oddiy qoidalar bilan ishlaydi.

4.4.7. So'rovlar rejasi keshi

Rejani tuzish uchun vaqt kerak bo'lganligi sababli, ko'pgina ma'lumotlar bazalari rejani so'rovlar rejasi keshida saqlaydi. Bu xuddi shu qadamlarni keraksiz hisoblashdan qochishga yordam beradi. Ma'lumotlar bazasi qachon eskirgan rejalarni yangilash kerakligini aniq bilishi kerak. Buning uchun ma'lum bir chegara o'rnatiladi va agar statistikadagi o'zgarishlar undan oshib ketsa, ushbu jadval bilan bog'liq reja keshdan o'chiriladi.

So'rovlar ijrochisi

Ushbu bosqichda bizning rejamiz allaqachon optimallashtirilgan. U bajariladigan kodga kompilyatsiya qilinadi va agar resurslar etarli bo'lsa, u bajariladi. Rejada keltirilgan bayonotlar (JOIN, SORT BY va boshqalar) ketma-ket va parallel ravishda qayta ishlanishi mumkin, qaror ijrochi tomonidan qabul qilinadi. Ma'lumotlarni qabul qilish va yozish uchun u ma'lumotlar menejeri bilan o'zaro ta'sir qiladi.

5. Ma'lumotlar menejeri


So'rovlar menejeri so'rovni bajarmoqda va jadvallar va indekslardan ma'lumotlarga muhtoj. U ularni ma'lumot menejeridan so'raydi, ammo ikkita qiyinchilik mavjud:

  • Relyatsion ma'lumotlar bazalarida tranzaksiya modeli qo'llaniladi. Muayyan vaqtda istalgan ma'lumotni olishning iloji yo'q, chunki hozirda ulardan kimdir foydalanishi / o'zgartirishi mumkin.
  • Ma'lumotlarni olish ma'lumotlar bazasidagi eng sekin ish. Shuning uchun, xotira buferini o'z vaqtida to'ldirish uchun ma'lumotlar menejeri o'z ishini oldindan bilishi kerak.

5.1. Kesh boshqaruvchisi

Bir necha bor aytilganidek, ma'lumotlar bazasidagi to'siq diskning quyi tizimidir. Shuning uchun ishlashni yaxshilash uchun kesh menejeri ishlatiladi.

Ma'lumotlarni to'g'ridan-to'g'ri fayl tizimidan olish o'rniga, so'rov ijrochisi buning uchun kesh boshqaruvchisiga murojaat qiladi. Bunda xotirada mavjud bo'lgan bufer havzasidan foydalaniladi, bu ma'lumotlar bazasi ishlashini keskin oshirishi mumkin. Raqamlarni taxmin qilish qiyin, chunki ko'p narsa sizga kerak bo'lgan narsaga bog'liq:

  • Ketma-ket kirish (to'liq skanerlash) yoki tasodifiy (chiziq identifikatori bo'yicha kirish).
  • O'qing yoki yozing.
Shuningdek, disk tizimida ishlatiladigan drayvlar turi katta ahamiyatga ega: har xil shpindel tezligiga ega bo'lgan "qattiq disklar", SSD-lar, turli xil konfiguratsiyalarda RAID mavjudligi. Ammo xotiradan foydalanish diskdan 100-100000 marta tezroq deyishimiz mumkin.

Biroq, bu erda biz yana bir muammoga duch kelmoqdamiz. Kesh boshqaruvchisi ma'lumotni so'rov ijrochisiga kerak bo'lmasdan oldin xotiraga joylashtirishi kerak. Aks holda ularni sekin diskdan olishni kutish kerak bo'ladi.

5.1.1. Proaktiv

So'rovlarni bajaruvchi unga qanday ma'lumotlarni kerakligini biladi, chunki u butun rejani, diskda qanday ma'lumotlarni va statistik ma'lumotlarni o'z ichiga olganligini biladi.

Ijrochi ma'lumotlarning birinchi qismini qayta ishlaganda, kesh boshqaruvchisidan keyingi qismni oldindan yuklashni so'raydi. Va uni qayta ishlashga o'tgach, u DC dan uchinchisini yuklashni so'raydi va birinchi qism keshdan olib tashlanishi mumkinligini tasdiqlaydi.

Kesh menejeri bu ma'lumotlarni bufer havzasida saqlaydi. Shuningdek, ularga buferda hali ham zarurligini bilish uchun ularga xizmat ma'lumotlari (trigger, mandal) qo'shiladi.

Ba'zan ijrochi qanday ma'lumotlarga muhtoj bo'lishini bilmaydi yoki ba'zi ma'lumotlar bazalarida bunday funktsiyalar mavjud emas. Keyin spekulyativ prefetchizatsiya ishlatiladi (masalan, agar ijrochi 1, 3, 5 ma'lumotlarini talab qilsa, kelajakda 7, 9, 11 ni talab qilishi mumkin) yoki ketma-ket oldindan olish (bu holda shahar shunchaki keyingisini yuklaydi ma'lumotlarning bir qismiga buyurtma berish.

Bufer mavjud bo'lgan xotira miqdori bilan cheklanganligini unutmang. Ya'ni, ba'zi ma'lumotlarni yuklash uchun vaqti-vaqti bilan boshqalarini o'chirib tashlashimiz kerak. Keshni to'ldirish va yuvish ba'zi disk va tarmoq manbalarini sarf qiladi. Agar sizda tez-tez bajariladigan so'rov bo'lsa, u har safar foydalanadigan ma'lumotlarni yuklash va tozalash samarasiz bo'ladi. Ushbu muammoni hal qilish uchun zamonaviy ma'lumotlar bazalarida buferni almashtirish strategiyasi qo'llaniladi.

5.1.2. Buferni almashtirish strategiyalari

Ko'pgina ma'lumotlar bazalari (hech bo'lmaganda SQL Server, MySQL, Oracle va DB2) buning uchun LRU (Least Recent Used) algoritmidan foydalanadi. Bu ma'lumotlar yaqinda ishlatilgan keshda saqlanishi uchun ishlab chiqilgan, ya'ni uni qayta talab qilish ehtimoli katta.

Algoritmning ishlashini tushunishni osonlashtirish uchun buferdagi ma'lumotlar triggerlar (blokirovka) bilan bloklanmagan va shuning uchun ularni o'chirish mumkin deb taxmin qilaylik. Bizning misolimizda bufer ma'lumotlarning uch qismini saqlashi mumkin:

  1. Kesh boshqaruvchisi 1-ma'lumotdan foydalanadi va uni bo'sh buferga joylashtiradi.
  2. Keyin u 4-ma'lumotdan foydalanadi va uni buferga ham yuboradi.
  3. Xuddi shu narsa 3-ma'lumot bilan amalga oshiriladi.
  4. Qo'shimcha ma'lumotlar olinadi 9. Ammo bufer allaqachon to'ldirilgan. Shuning uchun, ma'lumotlar 1 undan o'chiriladi, chunki u eng uzoq vaqt ishlatilmagan. Shundan so'ng, ma'lumotlar 9 buferga joylashtiriladi.
  5. Kesh menejeri yana ma'lumotlar 4 dan foydalanmoqda. U allaqachon buferda, shuning uchun u oxirgi ishlatilgan deb belgilanadi.
  6. Ma'lumotlar 1 yana talabga javob beradi, uni buferga qo'yish uchun, undan eng uzoq vaqt ishlatilmagani uchun ma'lumotlar 3 o'chiriladi.
Bu yaxshi algoritm, lekin ba'zi cheklovlarga ega. Agar biz katta stolni to'liq skaner qilsak nima bo'ladi? Agar jadval / indeks buferdan kattaroq bo'lsa, nima bo'ladi? Bunday holda, algoritm uning barcha tarkibini keshdan butunlay o'chirib tashlaydi, shuning uchun to'liq skanerlash ma'lumotlari faqat bir marta ishlatiladi.

Algoritmni takomillashtirish

Bunga yo'l qo'ymaslik uchun ba'zi ma'lumotlar bazalarida maxsus qoidalar qo'llaniladi. Oracle hujjatlariga muvofiq:

«Juda katta jadvallar uchun odatda to'g'ridan-to'g'ri kirish ishlatiladi, ya'ni kesh buferi to'lib toshmasligi uchun ma'lumotlar bloklari to'g'ridan-to'g'ri o'qiladi. O'rta jadvallar uchun to'g'ridan-to'g'ri kirish va keshdan o'qish mumkin. Agar tizim keshdan foydalanishga qaror qilsa, JB buferni yuvishni oldini olish uchun ma'lumotlar bloklarini LRU ro'yxatining oxiriga qo'yadi. "

LRU - LRU-K ning takomillashtirilgan versiyasi ham qo'llaniladi. SQL Server KR \u003d 2 bo'lganda LRU-K dan foydalanadi. Ushbu algoritmning mohiyati shundaki, vaziyatni baholashda u o'tgan operatsiyalar to'g'risida ko'proq ma'lumotni hisobga oladi va nafaqat oxirgi ishlatilgan ma'lumotlarni eslab qoladi. Ismdagi K harfi algoritmda oxirgi K marta qaysi ma'lumotlar ishlatilganligi hisobga olinishini anglatadi. Ularga ma'lum og'irlik beriladi. Keshga yangi ma'lumotlar yuklanganda eski, lekin tez-tez ishlatiladigan ma'lumotlar o'chirilmaydi, chunki ularning vazni yuqoriroq. Albatta, agar ma'lumotlar endi ishlatilmasa, ular baribir o'chib ketadi. Va ma'lumotlar qancha vaqt talab qilinmasdan qolsa, vaqt o'tishi bilan uning vazni shunchalik kamayadi.

Og'irlikni hisoblash juda qimmatga tushadi, shuning uchun SQL Server KR 2 ga teng bo'lganda LRU-K dan foydalanadi. K ning bir oz ortishi bilan algoritm samaradorligi yaxshilanadi. Siz tufayli u bilan yaxshiroq tanishishingiz mumkin.

Boshqa algoritmlar

Albatta, LRU-K yagona echim emas. Bundan tashqari, 2Q va CLOCK (ikkalasi ham LRU-K ga o'xshash), MRU (LRU mantig'idan foydalanadigan, ammo boshqacha qoidalar qo'llaniladi, LRFU (Eng kam yaqinda va tez-tez ishlatiladigan) va boshqalar mavjud. Ba'zi ma'lumotlar bazalarida siz quyidagilarni tanlashingiz mumkin, qanday algoritmdan foydalaniladi.

5.1.3. Buferni yozing

Biz faqat o'qish buferi haqida gaplashdik, ammo ma'lumotlar bazalarida ketma-ket yozish o'rniga ma'lumotlarni to'playdigan va diskka qismlarga ajratadigan yozish buferlari ham ishlatiladi. Bu I / U operatsiyalarini tejaydi.
Buferlar saqlanishini unutmang sahifalar (ma'lumotlar bo'linmas bo'linmalari), jadvallar qatorlari emas. Bufer havzasidagi sahifa o'zgartirilgan, ammo diskka yozilmagan bo'lsa, iflos deb nomlanadi. Nopok sahifalarni yozish vaqti tanlangan turli xil algoritmlar mavjud. Ammo bu operatsiyalar tushunchasi bilan juda ko'p bog'liqdir.

5.2. Tranzaksiya menejeri

U har bir so'rovning o'z bitimi bilan bajarilishini hisobga olish uchun javobgardir. Ammo dispetcher haqida gapirishdan oldin, kislota operatsiyalari kontseptsiyasiga aniqlik kiritamiz.

5.2.1. "Kislota ostida" (agar kimdir tushunmasa, so'zlar bilan o'ynash)

Kislotali tranzaksiya (Atomiklik, Izolyatsiya, Chidamlilik, Mustahkamlik) - bu 4 ta shartni bajaradigan elementar operatsiya, ish birligi:

  • Atomiklik Bitimdan "kam" narsa yo'q, mayda bitim ham bo'lmaydi. Bitim 10 soat davom etsa ham. Agar tranzaksiya bajarilmasa, tizim "oldin" holatiga qaytadi, ya'ni tranzaksiya orqaga qaytariladi.
  • Izolyatsiya... Agar bir vaqtning o'zida ikkita A va B bitimlar bajarilgan bo'lsa, unda ularning natijasi ulardan biri ikkinchisining bajarilishidan oldin, paytida yoki undan keyin bajarilganligiga bog'liq bo'lmasligi kerak.
  • Chidamlilik. Bitim amalga oshirilganda (amalga oshirilganda), ya'ni muvaffaqiyatli yakunlanganda, u foydalanadigan ma'lumotlar mumkin bo'lgan hodisalardan (xatolar, qulashlar) qat'iy nazar ma'lumotlar bazasida qoladi.
  • Muvofiqlik (izchillik). Ma'lumotlar bazasiga faqat tegishli ma'lumotlar yoziladi (munosabat va funktsional munosabatlar nuqtai nazaridan). Muvofiqlik atomlik va izolyatsiyaga bog'liq.

Bitimni amalga oshirish paytida siz ma'lumotlarni o'qish, yaratish, yangilash va o'chirish uchun turli xil SQL so'rovlarini bajarishingiz mumkin. Muammolar ikkita operatsiya bir xil ma'lumotdan foydalanganda boshlanadi. Klassik misol - bu A hisobvarag'idan B hisob raqamiga pul o'tkazishdir, deylik bizda ikkita operatsiya:

  • T1 A hisobvarag'idan 100 AQSh dollarini oladi va uni B hisob raqamiga yuboradi.
  • T2 A hisobvarag'idan $ 50 oladi va uni B hisobiga yuboradi.
Keling, ushbu holatni kislota kislotasi xususiyatlari bo'yicha ko'rib chiqamiz:
  • Atomiklik T1 paytida qanday voqea sodir bo'lishidan qat'i nazar (serverning ishdan chiqishi, tarmoqdagi nosozlik), $ 100 A dan debetlanib, B ga kelmasligi mumkin emasligiga ishonch hosil qilishingizga imkon beradi (aks holda ular "mos kelmaydigan holat" deyishadi).
  • Izolyatsiya agar T1 va T2 bir vaqtning o'zida amalga oshirilsa ham, natijada $ 100 A dan o'chiriladi va shuncha miqdor B ga tushadi, qolgan barcha holatlarda ular yana kelishmovchilik holati haqida gapirishadi.
  • Ishonchlilik bazasi T1 bajarilgandan so'ng darhol tushib qolsa, T1 yo'qolishi haqida tashvishlanmaslikka imkon beradi.
  • Muvofiqlik tizimda pulni yaratish yoki yo'q qilish imkoniyatini oldini oladi.
Siz quyida o'qishingiz shart emas, endi materialning qolgan qismini tushunish uchun bu muhim emas.

Ko'pgina ma'lumotlar bazalari sukut bo'yicha to'liq izolyatsiyani ta'minlamaydi, chunki bu katta ishlashga olib keladi. SQL 4 darajadagi izolyatsiyadan foydalanadi:

  • Serializatsiya qilinadigan operatsiyalar. Izolyatsiyaning eng yuqori darajasi. Odatiy qiymati SQLite-da ishlatiladi. Har bir bitim o'zining to'liq izolyatsiya qilingan muhitida ishlaydi.
  • Qayta o'qish. Sukut bo'yicha MySQL-da ishlatiladi. Har bir bitimning o'z muhiti bor, faqat bitta holat bundan mustasno: agar bitim bo'lsa yangi ma'lumotlar qo'shadi va muvaffaqiyatli bo'lsa, ular davom etayotgan boshqa operatsiyalarga ko'rinadi. Ammo bitim bo'lsa ma'lumotlarni o'zgartiradi va muvaffaqiyatli bo'lsa, ushbu o'zgarishlar hali davom etayotgan operatsiyalarga ko'rinmaydi. Ya'ni, yangi ma'lumotlar uchun izolyatsiya printsipi buzilgan.

    Masalan, A tranzaksiya amalga oshiriladi

    TABLE_X dan (1) sonni tanlang
    Keyin B tranzaktsiyasi X jadvaliga qo'shiladi va yangi ma'lumot beradi. Va agar bu operatsiyadan keyin A yana (1) sonini bajaradigan bo'lsa, unda natija boshqacha bo'ladi.

    Bunga xayoliy o'qish deyiladi.

  • Maqola o'qing... Odatiy ravishda Oracle, PostgreSQL va SQL Server-da ishlatiladi. Bu takroriy o'qish bilan bir xil, ammo qo'shimcha izolyatsiyani buzish bilan. Aytaylik, tranzaksiya A ma'lumotlarni o'qiydi; keyinchalik ular ushbu operatsiyalarni bajaradigan B bitimi bilan o'zgartiriladi yoki o'chiriladi. Agar A yana ushbu ma'lumotni o'qisa, u B tomonidan kiritilgan o'zgarishlarni (yoki o'chirish faktini) ko'radi.

    Bunga takrorlanmaydigan o'qish deyiladi.

  • Qabul qilinmagan ma'lumotlarni o'qing. Izolyatsiyaning eng past darajasi. O'qilgan ma'lumotlarga yangi izolyatsiya buzilishi qo'shiladi. Aytaylik, tranzaksiya A ma'lumotlarni o'qiydi; keyinchalik ular B bitimi bilan o'zgartiriladi (o'zgarishlar kiritilmaydi, B hali ham davom etmoqda). Agar A yana ma'lumotlarni o'qisa, u kiritilgan o'zgarishlarni ko'radi. Agar B orqaga qaytarilsa, unda takroriy o'qish paytida A hech qanday voqea sodir bo'lmaganday, hech qanday o'zgarishlarni ko'rmaydi.

    Bunga iflos o'qish deyiladi.

Ko'pgina ma'lumotlar bazalari o'zlarining izolyatsiya darajalarini qo'shadilar (masalan, PostgreSQL, Oracle va SQL Server singari oniy rasmlarga asoslangan holda). Bundan tashqari, ko'plab ma'lumotlar bazalari yuqoridagi barcha to'rt darajani amalga oshira olmaydi, ayniqsa, yuborilmagan ma'lumotlarni o'qish.

Foydalanuvchi yoki ishlab chiquvchi ulanish o'rnatilgandan so'ng darhol standart izolyatsiya darajasini bekor qilishi mumkin. Buning uchun juda oddiy kod satrini qo'shish kifoya.

5.2.2. Birgalikda nazorat qilish

Biz uchun izolyatsiya, izchillik va atomiklik zarur bo'lgan asosiy narsa bir xil ma'lumotlarga yozish operatsiyalarini bajarish (qo'shish, yangilash va o'chirish) qobiliyatidir.

Agar barcha operatsiyalar faqat ma'lumotlarni o'qisa, ular boshqa operatsiyalarga ta'sir qilmasdan bir vaqtning o'zida ishlashi mumkin.
Agar kamida bitta operatsiya boshqa operatsiyalar tomonidan o'qilgan ma'lumotlarni o'zgartirsa, ma'lumotlar bazasi ushbu o'zgarishlarni ulardan yashirish uchun yo'l topishi kerak. Shuningdek, kiritilgan ma'lumotlarni ko'rmaydigan boshqa operatsiyalar orqali kiritilgan o'zgarishlar o'chirilmasligiga ishonch hosil qilishingiz kerak.

Bunga parallellikni boshqarish deyiladi.

Eng oson yo'li - bittadan bittasini bittadan bajarish. Ammo bu yondashuv odatda samarasiz (bitta protsessorning faqat bitta yadrosi ishlatiladi), shuningdek, masshtablash qobiliyatini yo'qotadi.

Muammoni hal qilishning ideal usuli quyidagicha ko'rinadi (har safar bitim tuzilganda yoki bekor qilganda):

  • Har bir operatsiyaning barcha operatsiyalarini kuzatib boring.
  • Agar bir xil ma'lumotlarni o'qish / o'zgartirish tufayli ikki yoki undan ortiq bitimlar qarama-qarshilik ko'rsatsa, unda sabablar sonini minimallashtirish uchun nizolashayotgan tomonlar ichidagi operatsiyalar tartibini o'zgartiring.
  • Bitimlarning qarama-qarshi qismlarini ma'lum tartibda bajaring. Qarama-qarshi bitimlar bu vaqtda parallel ravishda amalga oshiriladi.
  • Shuni yodda tutingki, operatsiyalar bekor qilinishi mumkin.
Rasmiy ravishda, bu nizolarni rejalashtirish muammosi. Buni hal qilish juda qiyin va optimallashtirish juda ko'p protsessor resurslarini talab qiladi. Korxonaning ma'lumotlar bazalari har bir yangi operatsiya uchun eng yaxshi jadvalni qidirish uchun soatlab sarflashga qodir emas. Shuning uchun mojarolarga ko'proq vaqt sarflanadigan unchalik murakkab bo'lmagan yondashuvlardan foydalaniladi.

5.2.3. Qulfni boshqarish

Yuqoridagi muammoni hal qilish uchun ko'plab ma'lumotlar bazalarida qulflar va / yoki ma'lumotlar versiyalari qo'llaniladi.
Agar tranzaksiya ba'zi ma'lumotlarga muhtoj bo'lsa, u holda ularni blokirovka qiladi. Agar boshqa operatsiya ham ularga kerak bo'lsa, unda birinchi tranzaksiya qulfni chiqarguncha kutish kerak bo'ladi.

Bunga eksklyuziv blokirovka deyiladi.

Ammo operatsiyalar faqat ma'lumotni o'qish kerak bo'lganda, eksklyuziv qulflardan foydalanish juda behuda. Ma'lumotlarni o'qishga nima uchun aralashish kerak? Bunday hollarda umumiy qulflardan foydalaniladi. Agar tranzaktsiya ma'lumotlarni o'qishi kerak bo'lsa, u umumiy qulfni qo'llaydi va o'qiydi. Bu boshqa operatsiyalarni qulflarni almashish va ma'lumotlarni o'qishlariga to'sqinlik qilmaydi. Agar ulardan birortasi ma'lumotlarni o'zgartirishi kerak bo'lsa, u holda barcha umumiy qulflar olib tashlanishini kutish kerak bo'ladi. Shundan keyingina u eksklyuziv qulfni qo'llashi mumkin. Va keyin boshqa barcha operatsiyalar ushbu ma'lumotni o'qish uchun uning o'chirilishini kutishi kerak.

Qulfni boshqarish menejeri - bu qulflarni qo'llaydigan va chiqaradigan jarayon. Ular xash-jadvalda saqlanadi (kalitlar ma'lumotlarning bloklanishi). Dispetcher barcha tranzaktsiyalar qulflangan yoki chiqarilishini kutayotgan barcha ma'lumotlarni biladi.

Tugatish

Qulflardan foydalanish ikkita tranzaktsiyalar qulflarni chiqarishni muddatsiz kutib turadigan vaziyatga olib kelishi mumkin:

Bu erda A tranzaktsiyasi faqat 1-ma'lumotni blokirovka qilgan va 2-ma'lumotni chiqarilishini kutmoqda. Shu bilan birga, B tranzaktsiyasi faqat 2-ma'lumotni bloklagan va 1-ma'lumotni chiqarilishini kutmoqda.

Tugunli vaziyatda dispetcher qaysi operatsiyani bekor qilishni (qaytarib olishni) tanlaydi. Va qaror qabul qilish juda oson emas:

  • Oxirgi ma'lumotlar to'plamini o'zgartirgan tranzaktsiyani o'ldirish yaxshiroqmi (bu orqaga qaytish eng og'riqli bo'ladi)?
  • Boshqa operatsiyalar foydalanuvchilari ko'proq kutishganligi sababli, eng yosh operatsiyani o'ldirish yaxshiroq bo'larmidi?
  • Tugatish uchun kam vaqt talab qiladigan operatsiyani o'ldirish yaxshiroqmi?
  • Qaytish yana qancha tranzaktsiyalarga ta'sir qiladi?
Ammo qaror qabul qilishdan oldin, dispetcher haqiqatan ham boshi berk ko'chirilganligini tekshirishi kerak.

Yuqoridagi rasmdagi kabi xesh jadvalini diagramma shaklida tasavvur qilaylik. Agar diagrammada tsiklik aloqa mavjud bo'lsa, blokirovka tasdiqlanadi. Ammo ilmoqlarni tekshirish qimmatga tushganligi sababli (barcha qulflar aks ettirilgan diagramma juda katta bo'ladi), ko'pincha oddiy yondashuv qo'llaniladi: vaqt tugashidan foydalanish. Agar ma'lum vaqt ichida qulf chiqarilmasa, u holda tranzaksiya blokirovka holatiga tushgan.

Dispetcher shuningdek, qulfni o'rnatishdan oldin uning tiqilib qolishiga olib kelishini tekshirishi mumkin. Ammo bunga aniq javob berish uchun siz hisob-kitoblarga pul sarflashingiz kerak. Shuning uchun, bunday oldindan tekshirishlar ko'pincha asosiy qoidalar to'plami sifatida taqdim etiladi.

Ikki fazali blokirovka

To'liq izolyatsiyaga blokirovkaning boshida qo'llanilganda va operatsiyaning oxirida qo'yilganda osonlikcha erishiladi. Bu shuni anglatadiki, tranzaksiya boshlanishidan oldin barcha qulflar chiqarilguncha kutish kerak va u qo'llagan qulflar faqat tugagandan so'ng chiqariladi. Ushbu yondashuvdan foydalanish mumkin, ammo keyinchalik qulflarning chiqarilishini kutish uchun ko'p vaqt sarflanadi.

DB2 va SQL Server tranzaktsiyalarni ikki bosqichga ajratadigan ikki fazali blokirovka protokolidan foydalanadi:

  • O'sish bosqichitranzaktsiya faqat qulflarni qo'llashi mumkin, lekin ularni qo'yib yubormaydi.
  • Siqilish bosqichitranzaksiya faqat qulflarni chiqarishi mumkin bo'lganda (allaqachon qayta ishlangan va qayta ishlanmaydigan ma'lumotlardan), ammo yangilarini qo'llamaydi.
Ikki fazali qulf bo'lmagan taqdirda yuzaga keladigan tez-tez to'qnashuv:

A tranzaktsiyasidan oldin X \u003d 1 va Y \u003d 1. U A tranzaksiya boshlangandan so'ng B tranzaksiya bilan o'zgartirilgan Y \u003d 1 ma'lumotlarni qayta ishlaydi. Izolyatsiya printsipi tufayli A tranzaksiya Y \u003d 2 ni qayta ishlashi kerak.

Ushbu ikkita oddiy qoidadan foydalangan holda amalga oshiriladigan maqsadlar:

  • Boshqa operatsiyalarni kutish vaqtini qisqartirish uchun endi kerak bo'lmagan qulflarni bo'shating.
  • Tranzaksiya avval boshlangan tranzaksiya tomonidan o'zgartirilgan ma'lumotlarni oladigan holatlarning oldini olish. Bunday ma'lumotlar so'ralgan ma'lumotlarga mos kelmaydi.
Ushbu protokol juda yaxshi ishlaydi, faqat tranzaksiya ma'lumotni o'zgartirgan va uni blokdan chiqargan va keyin bekor qilingan holatlar bundan mustasno. Bunday holda, boshqa bir tranzaksiya ma'lumotni o'qishi va o'zgartirishi mumkin, bu esa orqaga qaytariladi. Bunday vaziyatdan qochish uchun tranzaksiya oxirida barcha eksklyuziv qulflar chiqarilishi kerak.

Albatta, haqiqiy ma'lumotlar bazalarida yanada murakkab tizimlar, ko'proq turdagi qulflar va katta donadorlik (satrlar, sahifalar, bo'limlar, jadvallar, jadval bo'shliqlari uchun qulflar) ishlatiladi, ammo mohiyati bir xil.

Ma'lumotlarning versiyasi

Tranzaktsiya ziddiyatini hal qilishning yana bir usuli bu ma'lumotlar versiyasini ishlatishdir.

  • Barcha operatsiyalar bir vaqtning o'zida bir xil ma'lumotlarni yangilashi mumkin.
  • Har bir operatsiya ma'lumotlarning o'z nusxasi (versiyasi) bilan ishlaydi.
  • Agar ikkita bitim bir xil ma'lumotni o'zgartirsa, unda faqat bitta modifikatsiya qabul qilinadi, ikkinchisi rad qilinadi va uni amalga oshirgan bitim orqaga qaytariladi (va ehtimol qayta boshlanadi).
Bu ishlashni oshirishga imkon beradi, chunki:
  • O'qish operatsiyalari yozish operatsiyalarini bloklamaydi va aksincha.
  • Noqulay qulf menejeri hech qanday ta'sir ko'rsatmaydi.
Umuman olganda, har qanday narsa bir xil ma'lumotlarni yozmasa, hamma narsa qulflardan yaxshiroqdir. Bundan tashqari, bu diskdagi bo'sh joyni katta chiqindilariga olib kelishi mumkin.

Ikkala yondashuv - qulflash va versiya - ijobiy va salbiy tomonlari bor, ko'p jihatdan ular qo'llaniladigan vaziyatga bog'liq (ko'proq o'qish yoki ko'proq yozish). PostgreSQL-da multiversion paralellik boshqaruvini amalga oshirish bo'yicha juda yaxshi taqdimotni tekshirishingiz mumkin.

Ba'zi ma'lumotlar bazalarida (9.7 versiyasidan oldingi DB2, SQL Server) faqat qulflar ishlatiladi. PostgreSQL, MySQL va Oracle kabi boshqalar, yondashuvlarning kombinatsiyasidan foydalanadilar.

Izoh: Versiyalarni yaratish ko'rsatkichlarga qiziqarli ta'sir ko'rsatadi. Ba'zan dublikatlar noyob indeksda paydo bo'ladi, indeks jadvaldagi qatorlarga qaraganda ko'proq yozuvlarni o'z ichiga olishi mumkin va hokazo.

Agar ma'lumotlarning bir qismi izolyatsiyaning bir darajasida o'qilsa va u ko'payib ketsa, unda qulflar soni ko'payadi, demak tranzaktsiyalarni kutish uchun ko'proq vaqt sarflanadi. Shuning uchun, ko'pgina ma'lumotlar bazalarida sukut bo'yicha maksimal izolyatsiya darajasi ishlatilmaydi.

Odatdagidek qo'shimcha ma'lumot olish uchun hujjatlarni ko'ring: MySQL, PostgreSQL, Oracle.

5.2.4. Jurnal menejeri

Ma'lumki, ishlashni oshirish uchun ma'lumotlar bazasi bufer xotirasida ma'lumotlarning bir qismini saqlaydi. Ammo operatsiyani bajarish paytida server ishdan chiqsa, xotiradagi ma'lumotlar yo'qoladi. Va bu operatsiyalarning ishonchliligi printsipini buzadi.

Albatta, siz hamma narsani diskka yozishingiz mumkin, ammo agar siz qulab tushsangiz, sizda to'liq bo'lmagan ma'lumotlar qoladi va bu allaqachon atomlik printsipining buzilishi.

Bitim tomonidan yozilgan har qanday o'zgarishlar qaytarilishi yoki bajarilishi kerak.

Bu ikki usulda amalga oshiriladi:

  • Soya nusxalari / Sahifalar. Har bir bitim ma'lumotlar bazasining (yoki uning bir qismining) nusxasini yaratadi va shu nusxa bilan ishlaydi. Agar xato bo'lsa, nusxa o'chiriladi. Agar hamma narsa yaxshi bo'lsa, ma'lumotlar bazasi darhol fayl tizimi darajasida bitta hiyla-nayrang yordamida nusxadagi ma'lumotlarga o'tadi va keyin "eski" ma'lumotlarni o'chirib tashlaydi.
  • Tranzaksiyalar jurnali. Bu maxsus ombor. Har bir diskka yozishdan oldin ma'lumotlar bazasi operatsiyalar jurnaliga ma'lumot yozadi. Shunday qilib, ishdan chiqqanda, ma'lumotlar bazasi tugatilmagan operatsiyani qanday o'chirishni yoki qanday bajarishni bilib oladi.
WAL

Ko'p sonli operatsiyalarga ega bo'lgan katta ma'lumotlar bazalarida soya nusxalari / sahifalar juda katta hajmdagi disk maydonini egallaydi. Shuning uchun zamonaviy ma'lumotlar bazalarida tranzaksiyalar jurnalidan foydalaniladi. U xatosiz saqlanadigan joyda bo'lishi kerak.

Mahsulotlarning aksariyati (xususan, Oracle, SQL Server, DB2, PostgreSQL, MySQL va SQLite) WAL (Write-Ahead Logging) protokoli orqali tranzaksiyalar jurnali bilan ishlaydi. Ushbu protokol uchta qoidadan iborat:

  1. Ma'lumotlar bazasidagi har bir modifikatsiyaga jurnal yozuvi qo'shilishi va ma'lumotlar diskka yozilishidan oldin kiritilishi kerak.
  2. Jurnal yozuvlari tegishli tadbirlar tartibiga muvofiq joylashtirilishi kerak.
  3. Bitim amalga oshirilganda, bu haqda operatsiyani muvaffaqiyatli yakunlashidan oldin qayd etish kerak.

Ushbu qoidalarning bajarilishini jurnal menejeri nazorat qiladi. Kesh boshqaruvchisi va ma'lumotlarga kirish menejeri o'rtasida mantiqan to'g'ri keladi. Jurnal menejeri diskka yozilguncha tranzaksiyalar tomonidan amalga oshiriladigan har bir operatsiyani qayd qiladi. To'g'ri ko'rinadi?

YO'Q! Ushbu maqolada biz o'tganimizdan so'ng, ma'lumotlar bazasi bilan bog'liq barcha narsalar "ma'lumotlar bazasi effekti" la'natiga duchor bo'lishini esga olish vaqti keldi. Jiddiy ravishda, muammo yaxshi ishlashni saqlab, jurnalga yozish usulini topishda. Axir tranzaktsiyalar jurnali sekin bo'lsa, u holda barcha boshqa jarayonlar sekinlashadi.

ARIYALAR

1992 yilda IBM tadqiqotchilari WAL-ning kengaytirilgan ARIES nomli versiyasini yaratdilar. ARIES eng zamonaviy ma'lumotlar bazalarida u yoki bu shaklda qo'llaniladi. Agar siz ushbu protokolni chuqurroq o'rganmoqchi bo'lsangiz, tegishli ishni o'rganishingiz mumkin.

Shunday qilib, ARIES so'zi Auchun lgoritmlar Recovery va Menyolg'izlik Exploiting Semantika. Ushbu texnologiya ikkita maqsadga ega:

  1. Jurnallarni yozishda yaxshi ishlashni ta'minlang.
  2. Tez va ishonchli tiklanishni ta'minlang.
Ma'lumotlar bazasi tranzaktsiyani qaytarishi kerak bo'lgan bir necha sabablar mavjud:
  1. Foydalanuvchi uni bekor qildi.
  2. Server yoki tarmoq xatosi.
  3. Bitim ma'lumotlar bazasining yaxlitligini buzdi. Masalan, siz UNIQUE bandini ustunga qo'lladingiz va tranzaksiya dublikat qo'shdi.
  4. O'liklarning borligi.
Ammo ba'zida ma'lumotlar bazasi tranzaktsiyani tiklashi mumkin, masalan, tarmoqdagi xatolik yuz berganda.

Bu qanday bo'lishi mumkin? Bunga javob berish uchun avval jurnalda qanday ma'lumotlar saqlanganligini aniqlash kerak.

Jurnallar
Bitimni bajarish paytida har bir operatsiya (qo'shish / o'chirish / o'zgartirish) jurnalda yozuv paydo bo'lishiga olib keladi. Yozuvda quyidagilar mavjud:

  • LSN (jurnalning tartib raqami)... Bu noyob raqam, uning ma'nosi xronologik tartibda aniqlanadi. Ya'ni, agar A operatsiyasi B operatsiyasidan oldin sodir bo'lgan bo'lsa, A uchun LSN B uchun LSN dan kam bo'ladi, aslida LSNni yaratish usuli ancha murakkab, chunki u jurnalni saqlash usuli bilan ham bog'liq.
  • TransID. Amaliyotni amalga oshirgan bitimning identifikatori.
  • PageID... O'zgartirilgan ma'lumotlar joylashgan disk maydoni.
  • PrevLSN... Xuddi shu operatsiya tomonidan yaratilgan oldingi jurnal yozuviga havola.
  • UNDO... Amalni qanday qaytarish kerak.

    Masalan, agar yangilash operatsiyasi bajarilgan bo'lsa, u holda o'zgartirilgan elementning oldingi qiymati / holati (jismoniy UNDO) yoki oldingi holatga qaytishga imkon beradigan teskari operatsiya (mantiqiy UNDO) UNDOga yoziladi. ARIES faqat mantiqiy foydalanadi, jismoniy ish juda qiyin.

  • REDO... Amaliyotni takrorlash usuli.
Bundan tashqari, diskdagi har bir sahifada (ma'lumotni saqlash uchun emas, balki jurnal) oxirgi operatsiyaning LSN, bu erda joylashgan o'zgartirilgan ma'lumotlar mavjud.

Ma'lumki, UNDO nafaqat PostgreSQL-da ishlatiladi. Buning o'rniga axlat yig'uvchi ma'lumotlarning eski versiyalarini tozalash uchun ishlatiladi. Buning sababi ushbu ma'lumotlar bazasini ma'lumotlar bazasini ishlab chiqarishni amalga oshirishdir.

Jurnal yozuvlari tarkibini tasavvur qilishni osonlashtirish uchun bu erda ingl.Soddalashtirilgan misol keltirilgan bo'lib, unda ULARNING O'RNATIShI SET AGE \u003d 18; so'rov bajariladi. U 18-raqamli bitimda bajarilsin:

Har bir jurnalda noyob LSN mavjud. Bog'langan jurnallar xuddi shu operatsiyani anglatadi va ular xronologik tartibda bog'langan (ro'yxatdagi oxirgi jurnal oxirgi operatsiyani bildiradi).

Kundalik bufer
Tizimda darz ketishiga yo'l qo'ymaslik uchun jurnal buferidan foydalaniladi.

So'rov bajaruvchisi o'zgartirilgan ma'lumotlarni so'raganda:

  1. Kesh boshqaruvchisi ularni buferda saqlaydi.
  2. Jurnal menejeri tegishli jurnalni o'z buferida saqlaydi.
  3. So'rovlarni bajaruvchisi operatsiya tugatilganligini va shunga mos ravishda o'zgartirilgan ma'lumotlarni so'rash mumkinligini aniqlaydi.
  4. Jurnal menejeri tranzaktsiyalar jurnalida kerakli ma'lumotlarni saqlaydi. Ushbu yozuvni amalga oshirish momentini algoritm belgilaydi.
  5. Kesh menejeri o'zgarishlarni diskka yozadi. Yozib olish momenti ham algoritm bilan belgilanadi.
Tranzaksiya amalga oshirilganda, bu 1 dan 5 gacha bo'lgan barcha bosqichlar bajarilganligini anglatadi. Tranzaksiyalar jurnaliga yozish tezda amalga oshiriladi, chunki bu "bitimlar jurnalining biron joyiga jurnal qo'shiladi". Shu bilan birga, ma'lumotni keyinchalik tezda o'qish kerakligini hisobga olgan holda diskka ma'lumotlarni yozish ancha murakkab protsedura hisoblanadi.

O'g'irlash va majburlash siyosati

Ishlashni yaxshilash uchun 5-qadam bajarilganidan keyin bajarilishi kerak, chunki muvaffaqiyatsizlikka uchragan taqdirda ham REDO yordamida operatsiyani tiklash mumkin. Bunga "KUCHLIKNI QO'LLASH siyosati" deyiladi.

Ammo ma'lumotlar bazasi tiklash paytida yukni kamaytirish uchun FORCE siyosatini ham tanlashi mumkin. So'ngra 5-qadam bajarishdan oldin bajariladi.

Ma'lumotlar bazasi, shuningdek, ma'lumotlarni diskka bosqichma-bosqich yozishni (STEAL siyosati) yoki agar bufer menejeri majburiyatni kutishi kerak bo'lsa, barchasini birdan yozishni (NO-STEAL) tanlaydi. Tanlash siz xohlagan narsaga bog'liq: uzoq vaqt tiklanish bilan tezkor yozuvmi yoki tez tiklanishmi?

Qayd etilgan qoidalar tiklash jarayoniga qanday ta'sir qiladi:

  • STEAL / NO-FORCE uchun UNDO va REDO kerak. Ishlash ustun, ammo jurnallar va tiklash jarayonlarining murakkab tuzilishi (ARES kabi). Ko'pgina ma'lumotlar bazalarida ushbu qoidalar kombinatsiyasi qo'llaniladi.
  • STEAL / FORCE faqat UNDOga muhtoj.
  • NO-STEAL / NO-FORCE uchun - faqat REDO.
  • NO-STEAL / FORCE uchun umuman hech narsa kerak emas. Bunday holda ishlash eng past ko'rsatkichdir va katta hajmdagi xotira talab qilinadi.
Qayta tiklash

Xo'sh, qanday qilib ajoyib jurnallarimizdan foydalanishimiz mumkin? Deylik, yangi xodim ma'lumotlar bazasini ishdan chiqarmoqda (qoida №1: yangi kelgan har doim aybdor!). Siz uni qayta ishga tushirasiz va tiklash jarayoni boshlanadi.
ARIES uch bosqichda tiklanadi:

  1. Tahlil... Asosiy tushish paytida sodir bo'lgan voqealar xronologiyasini tiklash uchun butun operatsiyalar jurnali o'qiladi. Bu qaysi operatsiyani orqaga qaytarish kerakligini aniqlashga yordam beradi. Barcha operatsiyalar majburiy buyurtmaisiz qaytarib olinadi. Tizim, shuningdek, halokat paytida diskka qanday ma'lumotlar yozilishi kerakligini hal qiladi.
  2. Takrorlang... REDO ma'lumotlar bazasini halokatga qadar holatini yangilash uchun ishlatiladi. Uning jurnallari xronologik tartibda qayta ishlanadi. Har bir jurnal uchun o'zgartirilishi kerak bo'lgan ma'lumotlarni o'z ichiga olgan diskdagi sahifaning LSN o'qiladi.

    Agar LSN (pages_on_disk)\u003e \u003d LSN (records_in_log) bo'lsa, u holda diskka ma'lumotlar ishlamay qolguncha yozilgan. Ammo qiymat jurnalga yozilgandan so'ng va muvaffaqiyatsizlikka qadar bajarilgan operatsiya bilan yozilgan. Shunday qilib, hech narsa qilinmagan.

    Agar LSN bo'lsa (page_on_disk)

    Qayta tiklash hatto qaytarib olinadigan operatsiyalar uchun ham amalga oshiriladi, chunki bu tiklash jarayonini soddalashtiradi. Ammo zamonaviy ma'lumotlar bazalari yo'q.

  3. Bekor qilish. Ushbu bosqichda, muvaffaqiyatsizlikka uchragan paytda amalga oshirilmagan barcha operatsiyalar qaytarib olinadi. Jarayon har bir operatsiyaning oxirgi jurnallaridan boshlanadi va UNDO-ni PrevLSN yordamida teskari xronologik tartibda qayta ishlaydi.
Qayta tiklash jarayonida tranzaktsiyalar jurnali tiklash paytida qanday choralar ko'rilishini bilishi kerak. Bu diskka saqlangan ma'lumotlarni tranzaktsiyalar jurnalida yozilganlar bilan sinxronlashtirish uchun zarur. Orqaga qaytarilayotgan tranzaktsiyalar yozuvlarini o'chirish mumkin, ammo buni amalga oshirish juda qiyin. Buning o'rniga, ARIES bitimlar jurnaliga kompensatsion yozuvlarni yozadi va qaytarib berilayotgan bitimlar yozuvlarini mantiqiy ravishda bekor qiladi.

Agar blokirovka menejeri tomonidan yoki "tarmoq" ishlamay qolishi sababli tranzaksiya "qo'lda" bekor qilinsa, unda tahlil qilish bosqichi kerak emas. Axir, REDO va UNDO ma'lumotlari xotirada joylashgan ikkita jadvalda joylashgan:

  • Bitimlar jadvalida (barcha joriy operatsiyalarning holatlari shu erda saqlanadi).
  • Nopok sahifalar jadvali (diskka qanday ma'lumotlarni yozish kerakligi haqida ma'lumotlarni o'z ichiga oladi).
Yangi tranzaksiya paydo bo'lishi bilan ushbu jadvallar kesh boshqaruvchisi va tranzaksiya menejeri tomonidan yangilanadi. Va jadvallar xotirada saqlanganligi sababli, ma'lumotlar bazasi ishdan chiqqanda, ular yo'qoladi.

Tahlil bosqichi bitimlar jurnalidan olingan ma'lumotlardan foydalangan holda ikkala jadvalni tiklash uchun kerak. Ushbu bosqichni tezlashtirish uchun ARIES nazorat punktlaridan foydalanadi. Ikkala jadvalning mazmuni vaqti-vaqti bilan diskka yoziladi, shuningdek LSN yozilishi paytida oxirgi. Shuning uchun tiklash paytida faqat ushbu LSN-dan keyin qayd qilingan jurnallar tahlil qilinadi.

6. Xulosa

Ma'lumotlar bazalari haqida o'qish uchun qo'shimcha ma'lumot sifatida ma'lumotlar bazasi arxitekturasi maqolasini tavsiya qilaman. Bu juda sodda tilda yozilgan mavzuga yaxshi kirish.

Agar siz yuqoridagi barcha ma'lumotlarni diqqat bilan o'qigan bo'lsangiz, unda ma'lumotlar bazalarining imkoniyatlari qanchalik katta ekanligi haqida tasavvurga ega bo'lishingiz mumkin. Biroq, ushbu maqola boshqa muhim masalalarni qamrab olmaydi:

  • Klasterli ma'lumotlar bazalari va global operatsiyalarni boshqarish.
  • Ma'lumotlar bazasi ishlayotgan bo'lsa, qanday qilib suratga olish mumkin.
  • Qanday qilib ma'lumotlarni samarali saqlash va siqish kerak.
  • Xotirani boshqarish.
Shunday qilib, buggy NoSQL ma'lumotlar bazasi va qattiq relyatsion ma'lumotlar bazasi o'rtasida qaror qabul qilishdan oldin ikki marta o'ylang. Xato qilmang, ba'zi NoSQL ma'lumotlar bazalari juda yaxshi. Ammo ular hali ham mukammal emas va faqat ba'zi ilovalar bilan bog'liq bo'lgan aniq muammolarni hal qilishda yordam berishi mumkin.

Shunday qilib, agar kimdir sizdan ma'lumotlar bazalari qanday ishlaydi, deb so'rasa, tupurish va tark etish o'rniga siz javob berishingiz mumkin:

Teglar: Teglar qo'shish

Maqola sizga yoqdimi? Do'stlar bilan bo'lishish uchun: