Qaysi ma'lumotlar bazalari relyatsion deb ataladi. Nisbiy ma'lumotlar bazasi. Bulutli xizmatlar uchun javob beradi

DBMS funktsiyalari.

DBMS funktsiyalari yuqori va past.

Yuqori darajadagi xususiyatlar:

1. Ma'lumotni aniqlash   - ushbu funktsiyadan foydalanib, ma'lumotlar bazasida qanday ma'lumotlar saqlanishi aniqlanadi (turi, ma'lumotlar xususiyatlari va ular o'zaro qanday bog'liq bo'lishi).

2. Ma'lumotlarni qayta ishlash.   Axborotni har xil usulda qayta ishlash mumkin: saralash, filtrlash, saralash, bitta ma'lumotni boshqasi bilan birlashtirish, umumiy qiymatlarni hisoblash.

3. Ma'lumotlarni boshqarish.   Ushbu funktsiyadan foydalanib, ma'lumotlar bilan tanishish, ularni to'g'rilash yoki yangi ma'lumotlarni kiritish, shuningdek, umumiy foydalanish qoidalarini belgilashga ruxsat berilganligi ko'rsatiladi.

Past darajadagi vazifalar:

1. Tashqi xotirada ma'lumotlarni boshqarish;

2. RAM buferini boshqarish;

3. Tranzaktsiyalarni boshqarish;

4. Ma'lumotlar bazasiga o'zgartirishlar jurnalini kiritish;

5. Ma'lumotlar bazasining yaxlitligi va xavfsizligini ta'minlash.

Bitim   MBning boshidan oxirigacha kuzatiladigan va agar bitta operatsiya bajarilmasa, butun ketma-ketlik bekor qilinadigan operatsiyalarning ajralmas ketma-ketligi deb nomlanadi.

DBMS jurnali   - maxsus ma'lumotlar bazasi yoki asosiy ma'lumotlar bazasining bir qismi, foydalanuvchi foydalana olmaydigan va ma'lumotlar bazasidagi barcha o'zgarishlar to'g'risida ma'lumot yozishda foydalaniladigan.

DBMS jurnaliga kirish   Apparatdagi nosozliklar va nosozliklar, shuningdek, dasturiy ta'minotdagi xatolar mavjud bo'lganda ma'lumotlar bazasida saqlashning ishonchliligini ta'minlash uchun mo'ljallangan.

Ma'lumotlar bazasining yaxlitligi   - bu ma'lumotlar bazasi xususiyati bo'lib, unda mavzu sohasidagi ma'lumotlarni to'liq, izchil va etarli darajada aks ettirishi kerak.

DBMS tasnifi.

Ma'lumotlar bazasini tasniflash mumkin:

1. Dastur turi bo'yicha:

a. Ma'lumotlar bazasi serverlari   (masalan, MS SQL Server, InterBase (Borland)) - kompyuter tarmoqlarida ma'lumotlar markazlarini tashkil qilish va mijoz dasturlari tomonidan SQL so'rovlaridan foydalangan holda ma'lumotlar bazasini boshqarish funktsiyalarini bajarish uchun mo'ljallangan (ya'ni so'rovlarga javob beradigan dasturlar);

b. MB mijozlari   - ma'lumotlarni talab qiladigan dasturlar. Mijoz dasturlari sifatida PFSUBD, jadvallar, matn protsessorlari, elektron pochta dasturlari;

v. To'liq tanlangan ma'lumotlar bazalari (MS Access, MS Fox Pro) - jadvallarni tuzish va o'zgartirish, ma'lumotlarni kiritish, so'rovlarni yaratish va formatlash, hisobotlarni ishlab chiqish va chop etish imkonini beruvchi ishlab chiqilgan interfeysga ega dastur.

2. Ma'lumotlar bazasi ma'lumotlar bazasi ma'lumotlar bazasiga ko'ra (shuningdek ma'lumotlar bazasi):

a. Ierarxik   - ma'lumot saqlashning daraxtga o'xshash tuzilishiga asoslanib, kompyuter fayl tizimiga o'xshaydi; asosiy kamchilik - ko'pchilikka munosabatlarni amalga oshirishning mumkin emasligi;

b. Tarmoq   - ierarxik o'rnini bosgan va uzoq davom etmagan, chunki asosiy kamchilik jiddiy dasturlarni ishlab chiqishning murakkabligi. Tarmoq va ierarxik tizimning asosiy farqi shundaki, ierarxik tuzilishda "yozuv avlodi" atigi bitta ajdodga ega, va tarmoq avlodida u har qanday ajdodlarga ega bo'lishi mumkin;

v. Qarindoshlik - ma'lumotlar ma'lum o'zaro bog'liqlik bo'lgan jadvallarga joylashtirilgan;

d. Ob'ektga yo'naltirilgan   - ular ma'lumotlarni ob'ektlar ko'rinishida saqlaydilar va ular bilan ishlashda asosiy afzallik shundaki, siz ularga ob'ektga yo'naltirilgan yondashuvni qo'llashingiz mumkin;

e. Gibrid, ya'ni ob'ekt - aloqador   - relyatsion va ob'ektga yo'naltirilgan ma'lumotlar bazalarining imkoniyatlarini birlashtirish. Bunday ma'lumotlar bazasining namunasi - Oracle (ilgari u relatsion edi).

3. Ma'lumotlar bazasining alohida qismlarining joylashishiga qarab quyidagilar mavjud:

a. mahalliy   - ularning barcha qismlari bitta kompyuterda joylashgan;

b. tarmoqqa ulangan.

Tarmoq quyidagilarni o'z ichiga oladi:

- fayl-server tashkiloti bilan;

Bunday tashkilot yordamida barcha ma'lumotlar fayl - server deb ataladigan va tarmoqqa ulangan bitta kompyuterda bo'ladi. Kerakli ma'lumotlarni topganda, butun fayl, shu qatorda ortiqcha ma'lumotlarni ham o'z ichiga oladi. Va faqat mahalliy nusxani yaratishda kerakli yozuv topiladi.

- mijoz-server tashkiloti bilan;

Ma'lumotlar bazasi serveri mijozdan so'rov oladi, ma'lumotlardagi kerakli yozuvni qidiradi va uni mijozga uzatadi. Serverga so'rov tuzilgan SQL so'rovlari tilida hosil bo'ladi, shuning uchun ma'lumotlar bazasi serverlari SQL - serverlar deb nomlanadi.

- tarqatilgan ma'lumotlar bazasi   katta hududda joylashgan bir necha o'nlab va yuzlab serverlarni o'z ichiga oladi.

Ma'lumotlar bazasi modelining asosiy qoidalari.

Nisbiy ma'lumotlar bazasi ma'lumotlar bazasi deyiladi, unda barcha ma'lumotlar jadvallar shaklida tashkil etiladi va ushbu ma'lumotlar bo'yicha barcha operatsiyalar jadvallardagi operatsiyalargacha kamayadi.

Relyatsion ma'lumotlar bazasining xususiyatlari:

1. Ma'lumotlar ustunlar va satrlardan iborat jadvallarda saqlanadi;

2. Har bir ustun va satrning kesishmasida bitta qiymat bo'ladi;

3. Har bir ustun - maydonning o'z nomi bor, bu uning nomi - atribut bo'lib xizmat qiladi va bitta ustundagi barcha qiymatlar bir xil bo'ladi;

4. Ustunlar tasodifiy tartibda joylashtirilgan qatorlardan farqli o'laroq jadvalni yaratishda o'rnatiladigan ma'lum bir tartibda joylashtirilgan. Jadvalda bitta qator bo'lmasligi mumkin, lekin kamida bitta ustun bo'lishi kerak.

Ma'lumotlar bazasi terminologiyasi:

  Ma'lumotlar bazasi elementi   Taqdimot shakli
  1. Ma'lumotlar bazasi   Jadvallar to'plami
  2. Ma'lumotlar bazasining sxemasi   Jadval sarlavhasi to'plami
  3. munosabat   Jadval
  4. Aloqa sxemasi   Jadval ustunining sarlavhasi
  5. mohiyati   Ob'ekt xususiyatlarining tavsifi
  6. Atribut   Ustun sarlavhasi
  7. Domen   Ko'pgina atribut qiymatlari
  8. Birlamchi kalit   Jadvaldagi har bir yozuvni aniq belgilaydigan noyob identifikator.
  9. Ma'lumot turi   Jadvaldagi qiymatlarning turi
  10. Tuple   Qator (yozuv)
  11. Kardiologiya   Jadvaldagi qatorlar soni
  12. munosabat darajasi   Maydonlar soni
  13. Aloqa tanasi   Ko'p munosabat bog'lari

Nisbiy ma'lumotlar bazasini loyihalashda ma'lumotlar bir nechta jadvallarga joylashtiriladi. Jadvallar o'rtasida tugmachalar yordamida aloqalar o'rnatiladi. Jadvallarni bog'lashda asosiy va ikkilamchi (bo'ysunuvchi) jadvallar ajralib turadi.

Jadvallar o'rtasidagi munosabatlarning quyidagi turlari mavjud:

1. 1: 1 shaklining o'zaro aloqasi (bittadan)   demak, asosiy jadvaldagi har bir yozuv qo'shimcha jadvaldagi bitta yozuvga va aksincha qo'shimcha jadvaldagi har bir yozuv asosiy jadvaldagi bitta yozuvga to'g'ri keladi.

2. 1-shaklning o'zaro munosabati: M (birdan ko'pgacha) asosiy jadvaldagi har bir yozuv qo'shimcha jadvaldagi bir nechta yozuvlarga mos kelishini va aksincha qo'shimcha jadvaldagi har bir yozuv asosiy jadvaldagi bitta yozuvga to'g'ri kelishini anglatadi.

3. M: 1 shaklining o'zaro aloqasi (bittadan ko'p) asosiy jadvaldagi bir yoki bir nechta yozuv qo'shimcha jadvaldagi bitta yozuvga to'g'ri kelishini bildiradi.

4. M: M shaklidagi munosabatlar (ko'pchilik uchun)   - ana shunda asosiy jadvalning bir nechta yozuvlari bir nechta qo'shimcha yozuvlarga to'g'ri keladi va aksincha.

5. MS Access-ning asosiy tarkibiy qismlari.

MS Access-ning asosiy tarkibiy qismlari (ob'ektlari):

1. Jadvallar;

3. Shakllar;

4. Hisobotlar;

5. Makroslar:

Modullar

Jadval   Ma'lumotni yozuvlar (satrlar) va maydonlar (ustunlar) shaklida saqlash uchun mo'ljallangan ob'ekt. Har bir maydon yozuvning alohida qismini o'z ichiga oladi va har bir jadval bitta alohida masala bo'yicha ma'lumotlarni saqlash uchun ishlatiladi.

Talab - jadvallarda saqlanadigan ma'lumotlar yoki o'zgartirilishi kerak bo'lgan yozuvlarni tanlash bo'yicha ko'rsatma.

Shakl - bu ob'ektlarni kiritish, tasvirlash va jadvallarni o'zgartirish uchun mo'ljallangan boshqaruv elementlarini joylashtiradigan ob'ekt.

Hisobot   - Bu foydalanuvchi tomonidan belgilangan ma'lumotlarni ma'lum bir shaklda taqdim etish, ko'rish va chop etish imkonini beradigan ob'ekt.

Ibratli - Muayyan vazifani avtomatlashtirish uchun ishlatilishi mumkin bo'lgan bir yoki bir nechta so'l. Makro bu so'lning asosiy qurilish blokidir; Vazifani avtomatlashtirish uchun boshqa makroslar bilan birlashtirilishi mumkin bo'lgan mustaqil ko'rsatma.

Modul - bitta nom ostida saqlanadigan tavsiflar, ko'rsatmalar va protseduralar to'plami. MS Access-da uch xil modul mavjud: ariza, hisobot moduli va umumiy modul. Forma va hisobot modullarida shakllar va hisobotlar uchun mahalliy dastur mavjud.

6. MS Access-dagi jadvallar.

MS Access-da quyidagi jadvallarni yaratish usullari mavjud:

1. Jadval rejimi;

2. Konstruktor;

3. Stol ustasi;

4. Jadvallarni import qilish

5. Jadvallar bilan aloqa.

Ichida stol holati   ma'lumotlar bo'sh jadvalga kiritiladi. Ma'lumotlar kiritish uchun 30 ta maydonchadan iborat jadval mavjud. Saqlagandan so'ng, MS Access har bir maydonga qaysi turdagi ma'lumotni tayinlashni hal qiladi.

Konstruktor   Mustaqil ravishda maydonlar yaratish, maydonlar uchun ma'lumotlar turlarini, maydon o'lchamlarini va maydon xususiyatlarini belgilash qobiliyatini ta'minlaydi.

Rejimdagi maydonni aniqlash uchun Konstruktor   o'rnatildi:

1. Maydon nomi , har bir jadvalda noyob nom bo'lishi kerak, bu harflar, raqamlar, bo'shliqlar va maxsus belgilar birikmasidan iborat, "bundan mustasno" .!” “ ". Ismning maksimal uzunligi 64 belgidan iborat.

2. Ma'lumot turi   Qabul qilinadigan qiymatlarning turi va oralig'ini, shuningdek ushbu maydon uchun ajratilgan xotira hajmini aniqlaydi.

MS Access ma'lumotlar turlari

  Ma'lumot turi   Ta'rif
  Matn   Ismlar va manzillar, telefon raqamlari, pochta indeksi (255 belgigacha) kabi matn va raqamlar.
  Memo maydoni   Sharhlar va tushuntirishlar kabi uzun matn va raqamlar (64000 belgigacha).
  Raqamli   Matematik hisob-kitoblarni amalga oshirishga imkon beradigan raqamli ma'lumotlar uchun umumiy ma'lumotlar turi, pul hisob-kitoblari bundan mustasno.
  Sana / vaqt   Sana va vaqt qiymatlari. Foydalanuvchi standart shakllarni tanlashi yoki maxsus formatni yaratishi mumkin.
  Naqd pul   Pul qiymatlari. Pul hisob-kitoblarini amalga oshirish uchun ma'lumotlarning raqamli turlaridan foydalanish tavsiya etilmaydi hisoblash paytida ular yaxlitlanishi mumkin. "Pul" turidagi qiymatlar har doim belgilangan o'nlik sonlar bilan ko'rsatiladi.
  Hisoblagich Avtomatik ravishda ketma-ket raqamlarni o'rnatish. Raqamlash 1 dan boshlanadi. Hisoblagich maydoni kalit yaratish uchun qulay. Bu maydon o'lchov xossasida Long xususiyati ko'rsatilgan raqamli sonli maydon bilan mos keladi.
  Mantiqiy   Ha / Yo'q, to'g'ri / noto'g'ri, yoqish / o'chirish, ikkita mumkin bo'lgan qiymatlardan biri.
  OLE ob'ekt maydoni   OLE protokolini qo'llab-quvvatlaydigan boshqa dasturlarda yaratilgan ob'ektlar.

3. Eng muhim maydon xususiyatlari:

- Maydon hajmi  maydonda saqlanadigan ma'lumotlarning maksimal hajmini belgilaydi.

- Maydon formati  Bu ma'lum bir turdagi ma'lumotlar uchun displey formatidir va u namoyish etilganda yoki chop etilganda ma'lumotlarni taqdim etish qoidalarini o'rnatadi.

- Maydon imzosi  jadvallarda, shakllarda, hisobotlarda ko'rsatiladigan matnni o'rnatadi.

- Qiymat holati  kirishni boshqarishga imkon beradi, kirish qiymatlariga cheklovlar qo'yadi; agar shartlar buzilgan bo'lsa, kirishni taqiqlaydi va Error xabari xususiyati tomonidan belgilangan matnni namoyish qiladi;

- Xato xabari  ekranda ko'rsatilgan xabarning matnini Value Shartida belgilangan cheklovlarni buzgan holda o'rnatadi.

Boshqarish turi  - jadval dizayneri oynasida "Almashtirish" yorlig'ida joylashgan xususiyat. Ushbu xususiyat maydonning jadvalda va qaysi shaklda - maydon yoki kombinatsiya oynasi sifatida ko'rsatilishini belgilaydi.

Noyob (asosiy) kalit  jadvallar oddiy yoki aralash bo'lishi mumkin, shu jumladan bir nechta maydonlar.

Kalitni aniqlash uchun tugmachani tashkil etadigan maydonlar tanlanadi va asboblar panelida tugma bosiladi asosiy maydonyoki buyruq bajariladi Kalit maydonchasini tahrirlash.


© 2015-2019 veb-sayti
Barcha huquqlar ularning mualliflariga tegishli. Ushbu sayt mualliflik huquqini talab qilmaydi, lekin undan bepul foydalanishni ta'minlaydi.
Sahifani yaratish sanasi: 2016-02-16

ularning yuqori ishlashini ta'minlaydigan til vositalari va dasturiy ta'minot tizimlari hamda ma'lumotlar bazasini loyihalash nazariyasi asoslarini yaratish. Ammo, umumiy aloqador MBBT foydalanuvchisi uchun ushbu tushunchalarning norasmiy ekvivalentlarini muvaffaqiyatli qo'llash mumkin:

"Aloqa" bu "jadval" (ba'zan fayl), "tuple" - "qator" (ba'zan yozuv), "atribut" - "ustun", "maydon".

Shu bilan "yozuv" "yozuv inventarizatsiyasi" degan ma'noni anglatadi, "maydon" esa "maydon nomi va turi" degan ma'noni anglatadi.

Nisbiy ma'lumotlar bazasi

Relyatsion ma'lumotlar bazasi - bu ma'lumotlar bazasida saqlanishi kerak bo'lgan barcha ma'lumotlarni o'z ichiga olgan munosabatlar to'plami. Biroq, foydalanuvchilar bunday ma'lumotlar bazasini jadvallar to'plami sifatida qabul qilishlari mumkin. Shuni ta'kidlash kerak:

Har bir jadval bir xil turdagi satrlardan iborat va o'ziga xos nomga ega; Qatorlarda belgilangan maydonlar (ustunlar) va qiymatlar (ko'plari) mavjud

takroriy maydonlar va takroriy guruhlarga yo'l qo'yilmaydi). Boshqacha qilib aytganda, jadvalning har bir pozitsiyasida satr va ustunning kesishmasida har doim bitta qiymat yoki hech narsa bo'lmaydi;

Jadval satrlari, albatta, bir-biridan kamida bitta qiymat bilan farq qiladi, bu sizga jadvalning har qanday satrini noyob aniqlash imkonini beradi;

Jadvalning ustunlarida noyob nom berilgan va ularning har biri bir xil ma'lumot qiymatlarini (sanalar, familiyalar, butun sonlar yoki pul summalari) o'z ichiga oladi;

Ma'lumotlar bazasining to'liq ma'lumot tarkibi aniq ma'lumotlar qiymatlari ko'rinishida taqdim etiladi va ushbu usul yagona hisoblanadi; Jadval bilan operatsiyalarni amalga oshirishda, ularning tarkibiy qismlaridan qat'i nazar, uning qatorlari va ustunlari istalgan tartibda qayta ishlanishi mumkin. Bunga jadval nomlari va ularning ustunlari mavjudligi, shuningdek, belgilangan atributlarga ega bo'lgan har qanday satr yoki satrlar to'plamini tanlash imkoniyati yordam beradi (masalan, "Parij" yo'nalishi bo'yicha parvozlar va vaqt.

tiya 12 soatgacha).

Aloqador ma'lumotlarni boshqarish

Relyatsion ma'lumotlar modelini taklif qilish bilan E.F. Codd shuningdek, munosabatlar bilan qulay ish uchun vositani - relyatsion algebrani yaratdi. Ushbu algebraning har bir operatsiyasi bir yoki bir nechta jadvallarni (aloqalarni) o'z operandalari sifatida ishlatadi va natijada yangi jadval paydo bo'ladi, ya'ni. stolni "kesish" yoki "yopishtirish" imkonini beradi (1.5-rasm).

Shakl 1.5. Relyatsion algebraning ba'zi operatsiyalari

Relyatsion algebraning barcha operatsiyalarini va ularning deyarli har qanday kombinatsiyasini amalga oshirishga imkon beradigan ma'lumotlar manipulyatsiyasi tillari yaratilgan. Ular orasida eng keng tarqalganlari SQL (Strukturalangan so'rovlar tili).

so'rovlar tili) va QBE (Quere-By-Example - namunaviy so'rovlar). Ikkalasi ham

juda yuqori darajadagi tillarga shoshiling, uning yordamida foydalanuvchi ularni olish tartibini ko'rsatmasdan, qanday ma'lumotlarni olish kerakligini ko'rsatib beradi.

Ushbu tillarning istalganida bitta so'rovdan foydalanib, siz bir nechta jadvallarni vaqtinchalik jadvalga qo'shishingiz va undan kerakli satrlar va ustunlarni kesib tashlashingiz mumkin (tanlash va proektsiyalash).

Nisbiy ma'lumotlar bazasini loyihalash, dizayn maqsadlari

Faqatgina kichik tashkilotlar ma'lumotlarni bitta to'liq o'rnatilgan ma'lumotlar bazasida baham ko'rishlari mumkin. Ko'pincha, tashkilot xodimlarining barcha ma'lumotlarini (ya'ni tizimning kelajakdagi foydalanuvchilarini) qamrab olish va tushunish deyarli mumkin emas. Shu sababli, yirik tashkilotlarning axborot tizimlarida turli xil bo'limlarning bir-biriga bog'langan kompyuterlari o'rtasida tarqatiladigan o'nlab ma'lumotlar bazalari mavjud. (Shunday qilib, yirik shaharlarda bitta emas, balki bir nechta sabzavot bazalari turli joylarda joylashgan.)

Alohida ma'lumotlar bazalari bitta yoki bir nechta amaliy muammolarni hal qilish uchun zarur bo'lgan barcha ma'lumotlarni yoki har qanday fan sohasiga tegishli ma'lumotlarni (masalan, moliya, talabalar, o'qituvchilar, ovqat tayyorlash va boshqalar) birlashtirishi mumkin. Birinchisi odatda amaliy ma'lumotlar bazasi deb nomlanadi, ikkinchisi esa sub'ektlar ma'lumotlar bazasi deb nomlanadi (tashkilot ma'lumotlari emas, balki tashkilot ob'ektlari bilan bog'liq). Birinchisini moddiy-texnik ta'minot yoki bo'sh vaqtni, ikkinchisini esa sabzavot va kiyim do'konlari bilan taqqoslash mumkin.

Mavzu ma'lumotlar bazalari har qanday joriy va kelajakdagi dasturlarni qo'llab-quvvatlashi mumkin, chunki ularning ma'lumotlar elementlari to'plamiga amaliy ma'lumotlar bazasining ma'lumotlar elementlari to'plamlari kiradi. Natijada, mavzu bo'yicha ma'lumotlar bazasi

norasmiy, o'zgaruvchan va noma'lum so'rovlar va arizalarni qayta ishlash uchun asos yaratadi (ma'lumotlar uchun talablarni oldindan aniqlashning iloji bo'lmagan arizalar). Bunday moslashuvchanlik va moslashuvchanlik ma'lumotlar bazalari asosida ancha barqaror axborot tizimlarini yaratishga imkon beradi. eski dasturlarni qayta yozmasdan, aksariyat o'zgartirishlar kiritilishi mumkin bo'lgan tizimlar.

Mavjud va ko'zda tutilgan dasturlarda xuddi shu ma'lumotlar bazasi dizayni asosida yuqori samarali axborot tizimini yaratishni sezilarli darajada tezlashtirish mumkin. tuzilishi ma'lumotlarga kirishning eng keng tarqalgan yo'llarini hisobga oladigan tizim. Shu sababli, amaliy dizayn hali ham ba'zi ishlab chiquvchilarni o'ziga jalb qilmoqda. Shu bilan birga, bunday axborot tizimlaridan foydalanish ko'lami oshgani sayin, qo'llaniladigan ma'lumotlar bazalari soni tez sur'atlar bilan o'sib boradi, ma'lumotlarni ko'paytirish darajasi keskin oshadi va ularni saqlash xarajatlari oshadi.

Shunday qilib, ko'rib chiqilayotgan dizaynga yondashuvlar har xil yo'nalishdagi dizayn natijalariga ta'sir qiladi. Ham moslashuvchanlikka, ham samaradorlikka erishish istagi asosli va amaliy yondoshuvni qo'llaydigan dizayn uslubini shakllantirishga olib keldi. Umumiy holda, ob'ektiv yondashuv dastlabki ma'lumotlarning tuzilishini yaratishda qo'llaniladi, qo'llaniladigan yondashuv esa ma'lumotlarni qayta ishlash samaradorligini oshirish uchun uni takomillashtirishdan iborat.

Axborot tizimini loyihalashda ushbu tizimning maqsadlarini tahlil qilish va unga alohida foydalanuvchilar (tashkilot xodimlari) tomonidan qo'yiladigan talablarni aniqlash kerak. Ma'lumot to'plash tashkilot sub'ektlarini va ushbu ob'ektlardan foydalanadigan jarayonlarni o'rganishdan boshlanadi. Korxonalar "o'xshashlik" (muayyan harakatlarni bajarish uchun ulardan foydalanish chastotasi) va ular orasidagi o'zaro bog'liqlik soni (samolyot - yo'lovchi, o'qituvchi - intizom, talaba - sessiya va boshqalar) bo'yicha guruhlangan. Eng ko'p o'xshashlik va (yoki) assotsiativ ulanishlarning eng yuqori chastotasiga ega bo'lgan sub'ektlar yoki sub'ektlar guruhlari ob'ektiv ma'lumotlar bazalariga birlashtirilgan. (Ko'pincha, sub'ektlar ma'lumotlar bazalariga rasmiy uslublardan foydalanmasdan birlashtiriladi - "umumiy ma'noda").

Ma'lumotlar bazasini loyihalashning asosiy maqsadi saqlanadigan ma'lumotlarning zaxira miqdorini kamaytirish va shuning uchun ishlatilgan xotira hajmini tejash, ortiqcha nusxalarni yangilash uchun bir nechta operatsiyalarning narxini kamaytirish va bir xil ob'ekt to'g'risidagi ma'lumotlarni turli joylarda saqlash tufayli nomuvofiqliklarni bartaraf etish. "Toza" ma'lumotlar bazasi dizayni ("Har bir fakt bir joyda") munosabatlarni normallashtirish metodologiyasidan foydalangan holda yaratilishi mumkin.

Normallashtirish - bu ma'lumotlarni yoqish, o'zgartirish yoki yo'q qilish paytida yaxshiroq xususiyatlarga ega bo'lgan jadvalni ikkita yoki undan ko'p qismlarga bo'lish.

Normallashtirishning yakuniy maqsadi ma'lumotlar bazasini loyihalashtirishdir, bunda har bir fakt bitta joyda paydo bo'ladi, ya'ni. ma'lumotlarning ko'payishi olib tashlanmaydi. Bu xotirani saqlash uchun emas, balki saqlangan ma'lumotlarning mumkin bo'lgan nomuvofiqligini bartaraf etish uchun amalga oshiriladi.

Aloqador ma'lumotlar bazasidagi har bir jadval har bir satr va ustunning kesishish joyida doimo bitta atom qiymati bo'lishi shartini qondiradi va bunday qiymatlar hech qachon bo'lmasligi mumkin. Ushbu shartni qondiradigan har qanday jadval normallashtirilgan deb nomlanadi. Aslida, odatiylashtirilmagan jadvallar, ya'ni. Ikki nusxadagi guruhlarni o'z ichiga olgan jadvallarga nisbiy ma'lumotlar bazasida ruxsat berilmaydi.

Har qanday normallashtirilgan jadval avtomatik ravishda ichidagi jadval hisoblanadi birinchi normal shakl, qisqartirilgan 1NF. Shunday qilib, qat'iy aytganda, "normallashtirilgan" va "1NF-da joylashgan" xuddi shu narsani anglatadi. Biroq, amalda, "normallashtirilgan" atamasi tor ma'noda ishlatiladi.

- "to'liq normallashtirilgan", ya'ni loyiha biron bir normallashtirish printsiplarini buzmasligini anglatadi.

Endi, 1NF-ga qo'shimcha ravishda, normal darajadagi keyingi darajalar

malizatsiya - ikkinchi normal shakl (2NF), uchinchi normal shakl

(3NF) va boshqalar. Aslida, jadval 1NF bo'lsa, 2NF ichida

va bundan tashqari, qo'shimcha shartlarni qondiradi, ularning mohiyati quyida muhokama qilinadi. Agar jadval 2NF ichida bo'lsa va qo'shimcha ravishda yana bir qo'shimcha shartni qondirsa, u 3NF da bo'ladi

va hokazo.

Shunday qilib, har bir normal shakl ma'lum ma'noda cheklangan, ammo avvalgisiga qaraganda ko'proq istalgan. Buning sababi, "(N + 1) oddiy shakli" "N normal shakl" ga xos bo'lgan ba'zi yoqimsiz xususiyatlarga ega emas. N-normal shaklga nisbatan (N + 1) - normal shaklga qo'yilgan qo'shimcha shartning umumiy ma'nosi bu yoqimsiz xususiyatlarni istisno qilishdir.

Normallashtirish nazariyasi jadval maydonlari o'rtasida u yoki bu bog'liqlikning mavjudligiga asoslanadi. Bunday qaramlikning ikki turi aniqlanadi:

milliy va ko'p qadrli.

Funktsional qaramlik.Jadvalning B maydoni funktsional ravishda bir xil jadvalning A maydoniga bog'liq, agar va shu vaqtning o'zida A maydonining har bir qiymatlari uchun faqat B maydonining har xil qiymatlaridan bittasi bo'lishi shart bo'lsa, bu erda A maydonlari qabul qilinganligini hisobga oling. va B aralashma bo'lishi mumkin.

To'liq funktsional qaramlik. B maydoni to'liq ishlamoqda.

a tarkibidagi maydonga milliy bog'liqlik, agar u A ga funktsional bog'liq bo'lsa va A maydonining biron bir to'plamiga funktsional bog'liq bo'lmasa.

Ko'p qiymatli qaramlik. A maydoni B maydonini belgilaydi

Barcha zamonaviy ma'lumotlar bazalarida xarajatlarni optimallashtirish CBO (Cost based Optimization) dan foydalaniladi. Uning mohiyati shundan iboratki, har bir operatsiya uchun uning "qiymati" aniqlanadi, so'ngra operatsiyalarning eng arzon "zanjirlari" yordamida so'rovning umumiy qiymati kamayadi.

Xarajatlarni optimallashtirishni yaxshiroq bilish uchun biz ikkita jadvalga qo'shilishning uchta keng tarqalgan usulini ko'rib chiqamiz va qanday qilib oddiy qo'shilish so'rovi ham optimizator uchun kabusga aylanishini ko'rib chiqamiz. Optimizator protsessor resurslari, xotira va kirish / tushirish operatsiyalarida "narx" ni hisoblagan bo'lsa ham, biz ko'rib chiqishda vaqtning murakkabligiga e'tibor qaratamiz. Vaqtning murakkabligi - bu taxminiy tushunchadir va kerakli protsessor resurslarini aniqlash uchun siz barcha operatsiyalarni hisoblashingiz kerak, jumladan, agar ifoda, ko'paytirish, iteratsiya va hk.

Bundan tashqari:

  • Har bir yuqori darajadagi operatsiyani bajarish uchun protsessor turli darajadagi past darajadagi operatsiyalarni bajaradi.
  • Protsessor ishlarining narxi (tsikl jihatidan) har xil turdagi protsessorlar uchun har xil, ya'ni protsessorning o'ziga xos arxitekturasiga bog'liq.
  Shuning uchun, biz murakkablik shaklida baholashni osonlashtiramiz. Ammo esda tutingki, ko'p vaqtlarda ma'lumotlar bazasining ishlashi protsessor resurslari emas, balki disk quyi tizimi tomonidan cheklangan.

Biz B-daraxtlariga qaraganimizda ular haqida gaplashdik. Esingizda bo'lsa, indekslar allaqachon tartiblangan. Aytgancha, indekslarning boshqa turlari mavjud, masalan, bitmap indekslari. Ammo ular B-daraxtlari indeksiga nisbatan protsessor, xotira va disk quyi tizimini ishlatish nuqtai nazaridan katta foyda keltirmaydi. Bundan tashqari, ko'plab zamonaviy ma'lumotlar bazalari hozirgi so'rovlar uchun vaqtincha indekslarni dinamik ravishda yaratishi mumkin, agar bu rejani amalga oshirish xarajatlarini kamaytirsa.

4.4.2. Aloqa usullari

Uyushma operatorlariga murojaat qilishdan oldin siz avval kerakli ma'lumotlarni olishingiz kerak. Buni quyidagi usullar bilan qilishingiz mumkin.

  • To'liq ko'rish.  Ma'lumotlar bazasi oddiygina jadval yoki indeksni o'qiydi. Siz tushunganingizdek, disk quyi tizimi uchun indeks jadvalga qaraganda o'qish osonroq.
  • Qatorlarni tekshirish.  Masalan, WHERE AGE\u003e 20 va AGE kabi predikatlardan foydalanganda foydalaniladi< 40. Конечно, для сканирования диапазона индекса вам нужно иметь индекс для поля AGE.

    Maqolaning birinchi qismida, biz oraliq so'rovning vaqt murakkabligi M + log (N) deb aniqlanganligini aniqladik, bu erda N - indeksdagi ma'lumotlar miqdori, M - bu doiradagi satrlarning taxminiy soni. Ushbu ikkala o'zgaruvchining qiymatlari bizga statistika tufayli ma'lum. Diapazonni skanerlashda indeksning faqat bir qismi o'qiladi, shuning uchun bu operatsiya to'liq skanerdan kamroq turadi.

  • Noyob qadriyatlar bo'yicha skanerlash.  Bu indeksdan faqat bitta qiymatni olish kerak bo'lgan holatlarda qo'llaniladi.
  • Qator identifikatori bo'yicha kirish.  Agar ma'lumotlar bazasi indeksdan foydalansa, u ko'pincha u bilan bog'liq qatorlarni qidiradi. Masalan, biz quyidagi so'rovni qilamiz:

    TANLASH LASTNAME, FIRSTNAME, ASHA \u003d 28 yoshda
      Agar bizda yosh kolonasi uchun indeks mavjud bo'lsa, unda optimizator barcha 28 yoshli bolalarni qidirish uchun indeksdan foydalanadi va keyin jadvalning tegishli satrlarining identifikatorini talab qiladi, chunki indeksda faqat yosh haqida ma'lumot mavjud.

    Aytaylik, yana bitta iltimosimiz bor:

    PERSON, TYPE_PERSON dan TYPE_PERSON.CATEGORYNI TANLASH.AGE \u003d TYPE_PERSON.AGE
      TYPE_PERSON bilan birlashtirish uchun PERSON ustunidagi indeks ishlatiladi. Ammo biz PERSON jadvalidan ma'lumot so'ramaganimiz sababli, hech kim unga ID raqami orqali kira olmaydi.

    Ushbu yondashuv faqat oz sonli xitlar uchun foydalidir, chunki u kirish / chiqish nuqtai nazaridan qimmat. Agar siz tez-tez ID bilan bog'lanishingiz kerak bo'lsa, unda to'liq tekshiruvdan foydalanish yaxshiroqdir.

  • Boshqa usullar. Siz ular haqida Oracle hujjatlarida o'qishingiz mumkin. Turli xil ma'lumotlar turli ma'lumotlar bazalarida ishlatilishi mumkin, ammo hamma joyda tamoyillar bir xil.
4.4.3. Birlashtirish operatsiyalari

Shunday qilib, biz ma'lumotlarni qanday olishni bilamiz, ularni birlashtirish vaqti keldi. Avvalo, yangi atamalarni aniqlaylik: ichki qaramlik va tashqi qaramlik. Qaramlik quyidagicha bo'lishi mumkin:

  • jadval
  • indeks
  • oldingi operatsiyaning oraliq natijasi (masalan, oldingi qo'shilish).
  Ikkita qaramlikni birlashtirsak, birlashma algoritmlari ularni boshqacha boshqaradi. Aytaylik, B qo'shiling A va B ning birlashmasi, bu erda A tashqi munosabatlar, B esa ichki munosabatlar.

Ko'pincha A JOIN B qiymati B JOIN A qiymatiga teng kelmaydi.

Aytaylik, tashqi qaramlik tarkibida N elementlar, ichki tarkibda esa M. elementlari bor. Esingizda bo'lsa, ushbu qiymatlar statistika tufayli optimizatorga ma'lum. N va M - qaramlikning kardinal soni.

  • Ichki pastadir yordamida birlashtirish.  Bu birlashtirishning eng oson usuli.

    Bu shunday ishlaydi: tashqi qaramlikning har bir satrida ichki qaramlikning barcha satrlari uchun mosliklar topiladi.

    Soxta kod kodiga misol:

    Nested_loop_join (tashqi qator, ichki qator) har bir satr uchun tashqi har bir satr uchun b ichkaridagi if (match_join_condition (a, b)) write_result_in_output (a, b) tugatish uchun tugash
      Ikkilamchi iteratsiya mavjud bo'lganligi sababli, vaqtning murakkabligi O (N * M) deb belgilanadi.

    Tashqi bog'liqlikning N satrlari uchun siz tashqi bog'liqlikning M chiziqlarini hisobga olishingiz kerak. Ya'ni, ushbu algoritm diskdan N + N * M o'qilishini talab qiladi. Agar ichki qaramlik etarlicha kichik bo'lsa, unda siz uni to'liq xotiraga qo'yishingiz mumkin, keyin disk quyi tizimida faqat M + N o'qishlari bo'ladi. Shuning uchun uni ichki xotiraga tushirish uchun ichki qaramlikni iloji boricha ixcham qilish tavsiya etiladi.

    Vaqt murakkabligi nuqtai nazaridan farq yo'q.

    Shuningdek, siz ichki qaramlikni indeks bilan almashtirishingiz mumkin, bu kirish / chiqish operatsiyalarini tejashga yordam beradi.
      Agar ichki qaramlik butunlay xotiraga to'g'ri kelmasa, siz diskni yanada tejamkor ishlatadigan boshqa algoritmdan foydalanishingiz mumkin.

    • Ikkala qaramlik satrlarini satr bo'yicha o'qish o'rniga, ular satrlar guruhlari (shamlardan) bo'yicha o'qiladi, har bir qaramlikning bitta guruhi esa xotirada saqlanadi.
    • Ushbu guruhlarning chiziqlari bir-biri bilan taqqoslanadi va topilgan gugurt alohida saqlanadi.
    • Keyin yangi guruhlar xotiraga yuklanadi va bir-biri bilan taqqoslanadi.
      Va hokazo, guruhlar tugamaguncha.

    Algoritmga misol:

      // I / O diskini kamaytirish uchun yaxshilangan versiya. nested_loop_join_v2 (tashqi fayl, fayl ichki) har bir to'da uchun // tashqi // ba har bir to'plam uchun bb uchun ichki // bb hozirda har bir satr uchun a in ba b har bir qator uchun b in, agar (match_join_condition ( a, b)) write_result_in_output (a, b) tugash bo'lsa, oxir tugaydi, oxir uchun tugaydi
      Bunday holda, vaqtning murakkabligi bir xil bo'lib qoladi, ammo diskka kirish soni kamayadi: (tashqi guruhlar soni + tashqi guruhlar soni * ichki guruhlar soni). Guruhlarning kattalashishi bilan diskka kirishlar soni ham kamayadi.

    Eslatma: ushbu algoritmda har bir qo'ng'iroq bilan katta hajmdagi ma'lumotlar o'qiladi, ammo bu muhim emas, chunki qo'ng'iroqlar ketma-ket.

  • Hash qo'shilish.  Bu ancha murakkab operatsiya, ammo ko'p hollarda uning narxi ancha past.

    Algoritm quyidagicha:

    1. Barcha elementlar ichki qaramlikdan o'qiladi.
    2. Xotirada xesh jadvali yaratiladi.
    3. Tashqi qaramlikdan kelib chiqadigan barcha elementlar birma-bir o'qiladi.
    4. Ichki qaramlikda tegishli blokni topish uchun har bir element uchun hash (xesh jadvalidagi tegishli funktsiyadan foydalangan holda) hisoblanadi.
    5. Blok elementlari tashqi qaramlik elementlari bilan taqqoslanadi.
      Ushbu algoritmni vaqt murakkabligi nuqtai nazaridan baholash uchun bir nechta taxminlarni bajarish kerak:
    • Ichki qaramlik X bloklarini o'z ichiga oladi.
    • Hash funktsiyasi ikkala qaramlik uchun ham xeshlarni taqsimlaydi. Ya'ni, barcha bloklarning o'lchamlari bir xil.
    • Tashqi bog'liqlik elementlari va blok ichidagi barcha elementlar o'rtasidagi yozishmalarni topish qiymati blok ichidagi elementlar soniga teng.
      Vaqtning murakkabligi quyidagiga teng bo'ladi:

      (M / X) * (N / X) + xesh jadvalini yaratish_ qiymati (M) + hash funktsiyasining narxi * N

    Va agar hash funktsiyasi etarlicha kichik bloklarni yaratsa, vaqtning murakkabligi O (M + N) ga teng bo'ladi.

    Ko'proq xotirani tejaydigan va qo'shimcha I / O talab qilinmaydigan yana bir hash qo'shilish usuli mavjud:

    1. Ikkala qaramlik uchun ham hash jadvallari hisoblanadi.
    2. Diskka qo'ying.
    3. Va keyin ular bir-biri bilan xulq-atvorni taqqoslashadi (bitta blok xotiraga yuklanadi, ikkinchisi esa satr bo'yicha o'qiladi).
    Birlashtirish.  Bu birlashtirishning yagona usuli, natijada ma'lumotlar saralanadi. Ushbu maqola doirasida, qaramliklar tashqi va ichki qismlarga bo'linmasa, soddalashtirilgan ishni ko'rib chiqamiz, chunki ular bir xil harakat qiladi. Biroq, hayotda ular farq qilishi mumkin, aytaylik, dublikatlar bilan ishlashda.

    Birlashtirish operatsiyasini ikki bosqichga bo'lish mumkin:

    1. (Ixtiyoriy) birinchidan, qo'shilish tartiblash orqali amalga oshiriladi, agar ikkala ma'lumotlar to'plami qo'shilish tugmachalari bilan tartiblangan bo'lsa.
    2. Keyin birlashtirish amalga oshiriladi.
    Saralash

    Birlashtirish tartiblash algoritmi yuqorida muhokama qilingan, bu holda, agar siz xotirani saqlashingiz muhim bo'lsa, u o'zini oqlaydi.

    Ma'lumotlar to'plamlari allaqachon saralangan bo'lishi mumkin, masalan:

    • Agar stol mahalliy tarzda tashkil etilgan bo'lsa.
    • Agar qaramlik qo'shilish sharti mavjud bo'lgan indeks bo'lsa.
    • Agar birlashtirish oraliq saralangan natija bilan sodir bo'lsa.
    Birlashtirish

    Ushbu operatsiya birlashtirish tartibida birlashtirish operatsiyasiga juda o'xshash. Ammo ikkala qaramlikning barcha elementlarini tanlash o'rniga biz faqat teng elementlarni tanlaymiz.

    1. Ikkala qaramlikning ikkita joriy elementi taqqoslanadi.
    2. Agar ular teng bo'lsa, natijada olingan jadvalga kiritiladi va undan keyin keyingi ikkita element taqqoslanadi, bittasi har biriga bog'liq.
    3. Agar ular teng bo'lmasa, taqqoslash takrorlanadi, lekin ikkita elementning eng kichigi o'rniga keyingi element xuddi shu qaramlikdan olinadi, chunki bu holda tasodif ehtimoli yuqoriroqdir.
    4. Bog'lanishlardan birining elementlari tugamaguncha 1-3-bosqichlar takrorlanadi.
      Agar ikkala qaramlik allaqachon saralangan bo'lsa, vaqtning murakkabligi O (N + M) dir.

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

    Ushbu algoritm yaxshi ishlaydi, chunki ikkala qaramlik allaqachon saralangan, va biz ularga orqaga va oldinga borishimiz shart emas. Biroq, bu erda ba'zi soddalashtirishga ruxsat beriladi: algoritm bir xil ma'lumotlar bir necha marta sodir bo'lganda, ya'ni bir nechta mos kelganda vaziyatlarni hal qilmaydi. Aslida, algoritmning yanada murakkab versiyasidan foydalaniladi. Masalan:

    MergeJoin (munosabatlar a, munosabatlar b) a1key: butun sonni chiqarish soni: \u003d 0; b_key: butun son \u003d \u003d 0; while (a! \u003d null va b! \u003d null) if (a< b) a_key++; else if (a >  b) b_key ++; else // predikatlar bilan qoniqadigan yozish_result_in_output (a, b) ga qo'shiling // A_key_temp butun sonini oshirganda ehtiyot bo'lishimiz kerak: \u003d a_key; b_key_temp butun son: \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; oxiri; b_key: \u003d b_key_temp; end bo'lsa end end

Qaysi algoritmni tanlash kerak?

Agar birlashtirishning yaxshiroq usuli bo'lsa, unda bu navlarning barchasi mavjud bo'lmaydi. Demak, bu savolga javob ko'pgina omillarga bog'liq:

  • Mavjud xotira. Agar bu etarli bo'lmasa, kuchli hash qo'shilishini unuting. Hech bo'lmaganda, uning ishlashi haqida to'liq xotirada.
  • Ikki ma'lumotlar to'plamining hajmi.  Agar sizda bitta stol katta bo'lsa, ikkinchisida juda kichkina bo'lsa, u holda ichkaridan qilingan halqa bilan birlashish eng tez ishlaydi, chunki hash qo'shilishi shashka yaratish uchun qimmat protsedurani o'z ichiga oladi. Agar sizda ikkita juda katta jadval bo'lsa, u holda ichki pastadirlardan foydalanib barcha protsessor resurslari iste'mol qilinadi.
  • Indekslarning mavjudligi.  Agar sizda ikkita B daraxti indekslari bo'lsa, birlashishni qo'llash yaxshidir.
  • Natija saralanishi kerakmi? Agar siz saralanmagan ma'lumotlar to'plamlari bilan ishlayotgan bo'lsangiz, siz qimmatbaho birlashma (saralash bilan) dan foydalanishni xohlashingiz mumkin. Keyin chiqish paytida siz boshqa birlashmaning natijalari bilan birlashtirish uchun qulayroq bo'lgan tartiblangan ma'lumotlarni olasiz. Yoki so'rov bilvosita yoki aniq tarzda ORDER BY / GROUP BY / DISTINCT ko'rsatmalari bo'yicha tartiblangan ma'lumotlarni olishni o'z ichiga olganligi sababli.
  • Chiqish bog'liqliklari tartiblangan. Bunday holda, birlashma uyushmasidan foydalanish yaxshiroqdir.
  • Qanday qaramlik turlaridan foydalanasiz. Ekvivalentlik ittifoqi (jadval A. ustun 1 \u003d jadval B. 2 ustun)? Ichki qaramlik, tashqi, Karteziya mahsuloti yoki o'z-o'zini qo'shilishmi? Turli vaziyatlarda ba'zi birlashtirish usullari ishlamaydi.
  • Ma'lumotlarni tarqatish. Agar ma'lumotlar qo'shilish sharti bilan rad etilsa (masalan, siz odamlarni familiyasi bo'yicha birlashtirasiz, lekin firma nomlari tez-tez uchraydi), hech qanday holatda siz xash qo'shilishidan foydalana olmaysiz. Aks holda, hash funktsiyasi juda yomon ichki taqsimot bilan savat yaratadi.
  • Bir nechta jarayonlar / mavzularga birlashtirishim kerakmi?
  Ilmga chanqoq bo'lganlar DB2, ORACLE va SQL Server hujjatlari bilan chuqurroq tanishishlari mumkin.

4.4.4. Soddalashtirilgan misollar

Aytaylik, ba'zi odamlar haqida to'liq tasavvurga ega bo'lish uchun biz beshta jadvalni birlashtirishimiz kerak. Har kim 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, siz ushbu so'rovga tezda javob berishingiz kerak:

SELECT * shaxsdan, MOBILES, pochta, ADRESSES BANK_ACCOUNTS WHERE PERSON.PERSON_ID \u003d MOBILES.PERSON_ID VA PERSON.PERSON_ID \u003d MAILS.PERSON_ID VA PERSON.PERSON_ID \u003d ADRESSES.PERSON_ID VA PERSON.PERSON_ID \u003d BANK_ACCOUNTS.PERSON_ID
  Optimizator ma'lumotni qayta ishlashning eng yaxshi usulini topishi kerak. Ammo ikkita muammo mavjud:

  1. Qaysi usul bilan birlashtirish mumkin? 0, 1 yoki 2 indekslardan foydalanish imkoniyati mavjud bo'lgan uchta variant mavjud (hash qo'shilish, birlashtirish, birlashtirilgan ko'chadan yordamida qo'shilish). Indekslar ham har xil bo'lishi mumkinligi haqida gapirmaslik kerak.
  2. Qaysi tartibda birlashtirish kerak?
  Masalan, to'rtta jadvalning uchta birlashmasi uchun quyidagi rejalar mavjud:

Ta'riflanganlarga asoslanib, qanday imkoniyatlar mavjud?

  1. Shafqatsiz kuch yondashuvidan foydalaning. Statistikadan foydalanib, so'rovni bajarish uchun mumkin bo'lgan har bir rejaning narxini hisoblang va eng arzonini tanlang. Ammo bir nechta variant mavjud. Birlashish uchun har bir buyurtma uchun siz uchta turli xil birlashtirish usullaridan foydalanishingiz mumkin, bunda jami 34 \u003d 81 mumkin bo'lgan ijro rejalari mavjud. Ikkilik daraxt bo'lsa, birlashma tartibini tanlash muammosi permütasyon muammosiga aylanadi va variantlar soni (2 * 4)! / (4 + 1)! .. Natijada, ushbu juda soddalashtirilgan misolda so'rovni bajarish uchun mumkin bo'lgan rejalarning umumiy soni 34 * (2 * 4)! / (4 + 1)! \u003d 27,216 Agar siz bunga qo'shsangiz, birlashtirish 0, 1 yoki 2 B daraxtlarining indekslaridan foydalansa, mumkin bo'lgan rejalar soni 210,000 ga ko'tariladi.Biz bu juda oddiy iltimos ekanligini aytib 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. Barcha mumkin bo'lgan variantlarning narxini hisoblashning iloji bo'lmaganda, siz o'zboshimchalik bilan test ma'lumotlarini yig'ib, ularning narxini baholash va eng yaxshisini tanlash uchun barcha turdagi rejalarni amalga oshirishingiz mumkin.
  4. Mumkin bo'lgan rejalar sonini kamaytirish uchun aqlli qoidalarni qo'llang.
      Ikki xil qoidalar mavjud:
    1. "Mantiqiy", unda siz foydasiz variantlarni chiqarib tashlashingiz mumkin. Ammo ular har doim ham qo'llanilishi mumkin bo'lgan narsalardan uzoqdir. Masalan, "joylashtirilgan pastadirlardan foydalanilganda, ichki bog'liqlik eng kichik ma'lumot to'plami bo'lishi kerak."
    2. Siz eng foydali echimni izlay olmaysiz va mumkin bo'lgan rejalar sonini kamaytirish uchun yanada qat'iy qoidalarni qo'llaysiz. Ayting: "Agar qaramlik kichik bo'lsa, biz ichkaridan qilingan ko'chadan foydalanamiz, lekin hech qachon qo'shilmaymiz yoki hash qo'shmaymiz".
  Hatto bunday oddiy misol bizga katta tanlovni taqdim etadi. Ammo boshqa aloqalar operatorlari haqiqiy so'rovlarda ishtirok etishlari mumkin: OUTER JOIN, CROSS JOIN, GROUP BY, ORDER BY, LOYIHALASH, BIRLAShMA, O'ZGARTIRISH, A'ZOLASH va hk. Ya'ni, ijro etilishi mumkin bo'lgan rejalar soni bundan ham ko'proq bo'ladi.

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

4.4.5. Dinamik dasturlash, ochko'z algoritm va evristik

Aloqador ma'lumotlar bazasida yuqorida aytib o'tilgan turli xil yondoshuvlar qo'llaniladi. Va optimizatorning vazifasi cheklangan vaqt ichida to'g'ri echimni topishdir. Ko'pgina hollarda, optimizator eng yaxshi narsani qidirmaydi, ammo shunchaki yaxshi echim.

Bruteforce kichik so'rovlar bilan ishlashi mumkin. Va keraksiz hisob-kitoblarni yo'q qilish usullari tufayli, hatto o'rta darajadagi so'rovlar uchun ham, siz shafqatsiz kuchdan foydalanishingiz mumkin. Bunga dinamik dasturlash deyiladi.

Uning mohiyati shundaki, ko'plab ijro rejalari juda o'xshash.

Ushbu rasmda barcha to'rtta reja A JOIN B subtridan foydalanadi va har bir reja uchun uning narxini hisoblash o'rniga biz uni faqat bir marta hisoblashimiz mumkin va keyin ushbu ma'lumotlardan kerak bo'lganda foydalanamiz. Boshqacha qilib aytganda, eslab qolish yordamida biz bir-birining ustiga chiqish muammosini hal qilamiz, ya'ni keraksiz hisob-kitoblardan qochamiz.

Ushbu yondashuv tufayli vaqt murakkabligi o'rniga (2 * N)! / (N + 1)! biz "faqat" 3 N ni olamiz. Oldingi misol to'rtta assotsiatsiyaga nisbatan, bu variantlar sonining 336 dan 81gacha kamayishini anglatadi. Agar siz 8 ta assotsiatsiya bilan so'rov bersangiz (kichik so'rov), unda murakkablik 57 657 600 dan 6 561gacha kamayadi.

Agar siz dinamik dasturlash yoki algoritmizatsiya bilan tanish bo'lsangiz, ushbu algoritm bilan o'ynashingiz mumkin:

Agar (Bestplan [S]. Narxi cheksiz) Bestplan [S] // qaytadan bestplan [S] protsedurasi avval hisoblanmagan bo'lsa, uni aniqlang, agar S (faqat 1 ta aloqani o'z ichiga olsa), eng yaxshi plan (S) ni belgilasa. S / * ga kirishning eng yaxshi usuliga asoslangan reja va eng yaxshi reja [S]. S1 ning har bir bo'sh bo'lmagan S1 to'plami uchun S * va boshqa indekslardan foydalanish S1! \u003d S P1 \u003d findbestplan (S1). P2 \u003d topish sxemasi (S - S1) A \u003d P1 va P2 natijalariga qo'shilish uchun eng yaxshi algoritm qiymati \u003d P1.cost + P2.cost + A qiymati, agar xarajat< 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]
  Katta so'rovlar uchun dinamik dasturlashni ham ishlatish mumkin, ammo mumkin bo'lgan rejalar sonini kamaytirish uchun qo'shimcha qoidalar (evristik) kiritilishi kerak:


Ochko'z

Ammo agar so'rov juda katta bo'lsa yoki biz tezda javob olishimiz kerak bo'lsa, algoritmlarning yana bir turi - ochko'z algoritmlar qo'llaniladi.

Bunday holda, so'rovni bajarish rejasi muayyan qoidadan (evristik) foydalanib, bosqichma-bosqich tuziladi. Unga rahmat, ochko'z algoritm har bir bosqich uchun individual echimni topadi. Reja QO'ShISh bayonotidan boshlanadi, so'ngra har bir bosqichda qoidaga muvofiq yangi QO'ShIMChA qo'shiladi.

Oddiy misolni ko'rib chiqing. 5 jadvalning 4 ta birlashmasidan iborat so'rovni oling (A, B, C, D va E). Muammoni biroz soddalashtiramiz va tasavvur qilamizki, yagona variant - o'rnatilgan algoritmlardan foydalanib birlashtirish. Biz "eng kam xarajatli kombinatsiyani qo'llang" qoidasidan foydalanamiz.

  • Biz jadvallardan birini boshlaymiz, masalan, A.
  • Biz A bilan har bir birlashmaning narxini hisoblaymiz (tashqi va ichki qaramlik rolida ham bo'ladi).
  • Biz eng arzon A JOIN B ekanligini topdik.
  • Keyin har bir uyushmaning narxini A JOIN B natijasi bilan hisoblaymiz (biz uni ikkita rolda ko'rib chiqamiz).
  • (A JOIN B) JOIN C. eng foydali bo'lishini aniqladik.
  • Yana biz variantlarni baholaymiz.
  • Oxirida biz so'rovni bajarish uchun quyidagi rejani olamiz: (((A JOIN B) JOIN C) JOIN D) JOIN E) /
  Xuddi shu algoritm B variantlaridan, so'ngra C va hokazolardan boshlangan variantlarni baholash uchun ishlatilishi mumkin. Natijada, biz beshta rejani olamiz, ular orasidan eng arzonini tanlaymiz.

Ushbu algoritm "eng yaqin qo'shni algoritm" deb nomlanadi.

Biz batafsil ma'lumotga kirmaymiz, lekin N * log (N) tartiblash murakkabligini yaxshi modellashtirish bilan bu muammo bo'lishi mumkin. Algoritmning vaqt murakkabligi dinamik dasturlash bilan to'liq versiya uchun O (N * log (N)) emas. Agar sizda 20 ta assotsiatsiyadan iborat katta so'rovingiz bo'lsa, bu 3,486,784,401 ga qarshi 26 bo'ladi. Juda katta farq, to'g'rimi?

Ammo bir nuance bor. Ikkala jadvalni birlashtirishning eng yaxshi usulini topsak, oldingi qo'shilish natijalarini quyidagi jadvallar bilan birlashtirishda eng kam xarajatlarni olamiz deb taxmin qilamiz. Ammo, agar A JOIN B eng arzon variant bo'lsa ham, (A JOIN C) JOIN B (A JOIN B) JOIN C ga qaraganda ancha past narxga ega bo'lishi mumkin.

Shunday qilib, agar siz har doim eng arzon rejani topishga umid qilsangiz, sizga har xil qoidalardan foydalanib, ochko'z algoritmlarni bir necha marta ishlatishni maslahat berishlari mumkin.

Boshqa algoritmlar

Agar siz allaqachon ushbu algoritmlarning barchasidan qoniqsangiz, ushbu bobni o'tkazib yuborishingiz mumkin. Boshqa barcha materiallarni o'zlashtirish uchun talab qilinmaydi.

Ko'pgina tadqiqotchilar so'rovni bajarish uchun eng yaxshi rejani topish bilan qiziqishadi. Ko'pincha ular aniq vazifalar va naqshlarning echimini topishga harakat qilishadi. Masalan, yulduz shaklidagi qo'shilishlar uchun, so'rovlarni parallel bajarish va boshqalar.

Biz katta so'rovlarni bajarish uchun dinamik dasturlashni almashtirish variantlarini qidirmoqdamiz. Xuddi shu ochko'z algoritmlar evristik algoritmlarning quyi qismidir. Ular qoidaga muvofiq harakat qilishadi, bir bosqich natijasini eslashadi va undan keyingi bosqich uchun eng yaxshi variantni topish uchun foydalanadilar. Va har doim oldingi bosqich uchun topilgan echimdan foydalanmaydigan algoritmlar evristik deb ataladi.

Bunga misol genetik algoritmlar:

  • Har bir qaror so'rovni to'liq bajarish uchun rejadir.
  • Bitta echim (reja) o'rniga har bir bosqichda algoritm X qarorlarni chiqaradi.
  • Birinchidan, X rejalar tuziladi, bu tasodifiy ravishda amalga oshiriladi.
  • Ularning faqat ma'lum bir mezonga javob beradigan rejalari saqlanib qoladi.
  • Keyin X rejalarini yaratish uchun ushbu rejalar aralashtiriladi.
  • Ba'zi yangi rejalar tasodifiy ravishda o'zgartiriladi.
  • Oldingi uchta bosqich Y marta takrorlanadi.
  • So'nggi tsiklning rejalaridan eng yaxshisini olamiz.
  Qancha ko'p tsikl bo'lsa, shuncha arzonroq rejani hisoblash mumkin. Tabiiy tanlanish, belgilarni o'rnatish, bularning barchasi.
  Aytgancha, genetik algoritmlar PostgreSQL-ga birlashtirilgan.

Ma'lumotlar bazasida shuningdek, simulyatsiyalangan yumshatish, iterativ takomillashtirish va ikki fazali optimallashtirish kabi evristik algoritmlardan foydalaniladi. Ammo bu korporativ tizimlarda qo'llanilishi haqiqat emas, ehtimol ularning taqdiri tadqiqot mahsulotlaridir.

4.4.6. Haqiqiy optimizatorlar

Shuningdek, ixtiyoriy bobni o'tkazib yuborishingiz mumkin.

Keling, nazariyadan uzoqlashaylik va haqiqiy misollarni ko'rib chiqaylik. Masalan, SQLite optimizatori qanday ishlaydi. Bu qo'shimcha qoidalar bilan ochko'z algoritmga asoslangan oddiy optimallashtirishdan foydalanadigan "engil" ma'lumotlar bazasi:

  • SQLite hech qachon CROSS JOIN ishida jadvallar tartibini o'zgartirmaydi.
  • Ichki pastadir yordamida ishlatilgan birlashma.
  • Tashqi birlashmalar har doim ular amalga oshirilgan tartibda baholanadi.
  • 3.8.0 versiyasiga qadar so'rovni bajarish uchun eng yaxshi rejani topish uchun ochko'z Yaqin-atrofdagi algoritm ishlatiladi. Va 3.8.0 versiyasidan "N yaqin qo'shnilar" (N3, N Yaqin qo'shnilar) ishlatiladi.
  Mana yana bir misol. Agar siz IBM DB2 hujjatlarini o'qisangiz, uning optimizatori 7 xil optimallashtirish darajasidan foydalanishini bilib olamiz:
  • Ochko'z algoritmlar:
    • 0 - minimal optimallashtirish. U indeksli tekshiruvdan foydalanadi, ichiga joylashtirilgan pastadir yordamida birlashtiradi va ba'zi so'rovlarning ustiga yozilishini olib tashlaydi.
    • 1 - past optimallashtirish
    • 2 - to'liq optimallashtirish
  • Dinamik dasturlash:
    • 3 - o'rtacha optimallashtirish va qo'pol yaqinlashish
    • 5 - to'liq optimallashtirish, barcha evristik metodlardan foydalaniladi
    • 7 - bir xil, ammo evristiksiz
    • 9 - sarflangan sa'y-harakatlardan qat'i nazar, har qanday narxda maksimal optimallashtirish. Birlashtirishning barcha mumkin bo'lgan usullari, shu jumladan, karteziya mahsulotlari baholanadi.
  Standart daraja - 5. Bunga quyidagilar kiradi:
  • Barcha mumkin bo'lgan statistik ma'lumotlarni to'plash, shu jumladan chastota taqsimoti va kvantil.
  • So'rovlarni qayta yozish uchun barcha qoidalarni qo'llash, shu jumladan materiallashtirilgan so'rovlar uchun jadvalli marshrutni yaratish). Istisno - bu cheklangan miqdordagi holatlar uchun qo'llaniladigan intensiv hisoblashlarni talab qiladigan qoidalar.
  • Birlashtirish variantlarini dinamik dasturlash yordamida ro'yxatga olishda:
    • Murakkab ichki qaramlikdan cheklangan foydalanish.
    • Konversiyalash stollari bo'lgan yulduz shaklidagi konturlar uchun cheklangan darajada Karteziya mahsulotlari ishlatiladi.
  • Ruxsatnomani oldindan belgilash (quyida batafsilroq), AND ko'rsatkichlari bilan maxsus operatsiya va materiallashtirilgan so'rovlar uchun jadvalli marshrutni tuzish kabi keng qamrovli usullar ko'rib chiqiladi.
  Albatta, ishlab chiquvchilar o'z mahsulotlarida ishlatiladigan evristik xususiyatlar haqida tafsilotlarni baham ko'rmaydilar, chunki optimizator ma'lumotlar bazasining eng muhim qismidir. Shu bilan birga, sukut bo'yicha, qo'shilish tartibini aniqlash uchun, evristikada cheklangan dinamik dasturlash ishlatiladi.

Boshqa shartlar (GROUP BY, DISTINCT va boshqalar) oddiy qoidalar bo'yicha ishlanadi.

4.4.7. So'rovlar rejasi keshi

Rejalashtirish vaqt talab qilishi sababli, ko'pgina ma'lumotlar bazalari rejani so'rovlar rejasi keshida saqlaydi. Bu bir xil bosqichlarni keraksiz hisob-kitoblardan qochishga yordam beradi. Ma'lumotlar bazasi eskirgan rejalarni qachon yangilash kerakligini aniq bilishi kerak. Buning uchun ma'lum bir chegara belgilanadi va agar statistikadagi o'zgarishlar undan oshib ketsa, unda ushbu jadval bilan bog'liq reja keshdan o'chiriladi.

So'rov ijrochisi

  Ushbu bosqichda bizning rejamiz allaqachon optimallashtirilgan. U bajariladigan kodga qaytariladi va agar resurslar etarli bo'lsa, bajariladi. Rejada mavjud bo'lgan operatorlar (JOIN, SORT BY va boshqalar) ketma-ket va parallel ravishda qayta ishlanishi mumkin, qaror ijrochi tomonidan qabul qilinadi. Ma'lumotlar menejeri bilan ma'lumotlarni qabul qilish va yozib olish uchun o'zaro ishlaydi.

5. Ma'lumotlar menejeri


So'rovlar menejeri so'rovni bajaradi va jadvallar va indekslardan ma'lumotlarni talab qiladi. U ularni ma'lumotlar menejeridan talab qiladi, ammo ikkita qiyinchilik mavjud.

  • Relatsion ma'lumotlar bazalarida tranzaktsion model qo'llaniladi. Ma'lum bir vaqtda istalgan ma'lumotni olishning iloji yo'q, chunki o'sha paytda ular kimdir tomonidan ishlatilishi yoki o'zgartirilishi mumkin.
  • Ma'lumotlar olish bu ma'lumotlar bazasida eng sekin ishlaydigan operatsiya. Shuning uchun, ma'lumotlar menejeri xotira buferini o'z vaqtida to'ldirish uchun o'z ishini oldindan aytib bera olishi kerak.

5.1. Kesh boshqaruvchisi

  Bir necha marotaba aytilganidek, ma'lumotlar bazasida eng qiyin narsa bu disk quyi tizimi. Shuning uchun, kesh boshqaruvchisi ishlashni oshirish uchun ishlatiladi.

Ma'lumotni to'g'ridan-to'g'ri fayl tizimidan olishning o'rniga, so'rovchi uni kesh boshqaruvchisidan talab qiladi. U xotirada joylashgan bufer pulidan foydalanadi, bu ma'lumotlar bazasi ishini keskin oshirishga imkon beradi. Raqamlarda buni baholash qiyin, chunki ko'p narsa sizga kerak bo'lgan narsaga bog'liq:

  • Serial kirish (to'liq ko'rish) yoki tasodifiy kirish (line ID orqali kirish).
  • O'qing yoki yozing.
  Shuningdek, disk tizimida ishlatiladigan drayverlarning turi katta ahamiyatga ega: turli xil tezlikda ishlaydigan "qattiq disklar", SSD-lar, turli xil konfiguratsiyalarda RAID mavjudligi. Ammo aytishimiz mumkinki, xotiradan foydalanish diskdan 100-100000 marta tezroq.

Biroq, bu erda biz boshqa muammoga duch kelmoqdamiz. Kesh boshqaruvchisi ma'lumotlarni so'rovni bajaruvchisiga kerak bo'lishidan oldin xotirada saqlashi kerak. Aks holda, u ularni sekin diskdan olishlarini kutishga majbur bo'ladi.

5.1.1. Oldindan kutish

So'rovchi unga qanday ma'lumot kerakligini biladi, chunki u butun rejani, diskda qanday ma'lumotlar borligini va statistikani biladi.

Ijrochi birinchi ma'lumot to'plamini qayta ishlaganda, u kesh boshqaruvchisidan keyingi to'plamni qayta yuklashni so'raydi. Va uni qayta ishlashga o'tganda, u DCdan uchinchi qismni yuklashni so'raydi va birinchi qism keshdan o'chirilishi mumkinligini tasdiqlaydi.

Kesh menejeri bu ma'lumotlarni bufer pulida saqlaydi. U, shuningdek, tamponda hali ham zarur yoki yo'qligini bilish uchun ularga xizmat to'g'risidagi ma'lumotlarni (trigger, latch) qo'shib qo'yadi.

Ba'zan pudratchi unga qanday ma'lumot kerakligini bilmaydi yoki ba'zi ma'lumotlar bazalarida bunday funktsiyalar mavjud emas. Keyin spekulyativ prefeshlash ishlatiladi (masalan, agar pudratchi 1, 3, 5 ma'lumotlarini talab qilsa, u holda kelajakda u 7, 9, 11 ni talab qiladi) yoki ketma-ket oldindan yuklab olish (bu holda, shahar shunchaki keyingi yuklaydi) ma'lumotlar to'plami.

Bufer mavjud xotira miqdori bilan cheklanganligini unutmang. Ya'ni, ba'zi ma'lumotlarni yuklash uchun biz vaqti-vaqti bilan boshqalarni o'chirib tashlashimiz kerak. Keshni to'ldirish va tozalash, disk quyi tizimi va tarmoq manbalarining bir qismini iste'mol qiladi. Agar sizda tez-tez bajariladigan so'rovingiz bo'lsa, u har safar ishlatadigan ma'lumotni yuklash va tozalab qo'yish samarasiz bo'ladi. Ushbu muammoni hal qilish uchun zamonaviy ma'lumotlar bazalarida buferni almashtirish strategiyasi qo'llaniladi.

5.1.2. Tamponni almashtirish strategiyalari

Ko'pgina ma'lumotlar bazalari (kamida SQL Server, MySQL, Oracle va DB2) buning uchun LRU (Yaqinda ishlatilgan) algoritmidan foydalanadi. U yaqinda ishlatilgan ma'lumotlarni keshda saqlash uchun mo'ljallangan, bu ularga yana kerak bo'lishi mumkinligini anglatadi.

Algoritmni tushunishni osonlashtirish uchun, buferdagi ma'lumotlar tetikleyicilar tomonidan bloklanmagan, shuning uchun o'chirilishi mumkin deb taxmin qilamiz. Bizning misolimizda, bufer uchta ma'lumotlarni saqlashi mumkin:

  1. Kesh boshqaruvchisi 1-ma'lumotlardan foydalanadi va uni bo'sh buferga joylashtiradi.
  2. Keyin u 4 ma'lumotdan foydalanadi va ularni buferga yuboradi.
  3. Xuddi shu narsa 3-ma'lumotlar bilan amalga oshiriladi.
  4. Keyingi, ma'lumotlar olinadi 9. Ammo bufer allaqachon to'la. Shu sababli, 1-ma'lumotlar undan o'chiriladi, chunki u eng uzoq vaqt ishlatilmadi. Shundan so'ng, ma'lumotlar 9 buferga joylashtiriladi.
  5. Kesh menejeri yana 4 ma'lumotlarni ishlatadi va u allaqachon buferda bo'lgan, shuning uchun u oxirgi ishlatilgan deb belgilangan.
  6. 1-ma'lumotlar yana talabga ega, uni tamponga qo'yish uchun undan uzoq vaqt ishlatilmagandek 3-ma'lumotlar o'chiriladi.
  Bu yaxshi algoritm, ammo u ba'zi cheklovlarga ega. Katta stolni to'liq ko'rib chiqsak nima bo'ladi? Agar jadval / indeks hajmi bufer hajmidan oshsa nima bo'ladi? Bunday holda, algoritm barcha tarkibni umuman keshdan o'chiradi, shuning uchun to'liq skanerlash ma'lumotlari, ehtimol, faqat bir marta ishlatiladi.

Algoritmni takomillashtirish

Buning oldini olish uchun ba'zi ma'lumotlar bazalarida maxsus qoidalar qo'llaniladi. Oracle hujjatlariga muvofiq:

"Juda katta jadvallar uchun to'g'ridan-to'g'ri kirish odatda ishlatiladi, ya'ni kesh-bufer toshib ketmasligi uchun to'g'ridan-to'g'ri ma'lumotlar bloklari o'qiladi. O'rta o'lchovli jadvallar uchun to'g'ridan-to'g'ri kirish va keshdan o'qish mumkin. Agar tizim keshni ishlatishga qaror qilsa, ma'lumotlar bazasi buferni tozalashni oldini olish uchun ma'lumot bloklarini LRU ro'yxatining oxiriga joylashtiradi. "

LRU - LRU-K ning takomillashtirilgan versiyasi ham ishlatiladi. SQL Server LRU-K-ni K \u003d 2-dan foydalanadi. Ushbu algoritmning mohiyati shundan iboratki, vaziyatni baholashda avvalgi operatsiyalar haqida ko'proq ma'lumot olinadi va nafaqat ishlatilgan so'nggi ma'lumotlar eslab qolinadi. Ismdagi K harfi algoritm oxirgi K marta qaysi ma'lumotlar ishlatilganligini hisobga olishini anglatadi. Ularga ma'lum bir vazn beriladi. Keshga yangi ma'lumotlar kiritilganda, eski, lekin tez-tez ishlatib turilgan ma'lumotlar o'chirilmaydi, chunki uning og'irligi yuqori bo'ladi. Albatta, agar ma'lumotlar endi ishlatilmasa, u hali ham o'chiriladi. Ma'lumotlar qanchalik uzoq vaqt talab qilinmasa, vaqt o'tishi bilan ularning og'irligi kamayadi.

Og'irlikni hisoblash ancha qimmatga tushadi, shuning uchun SQL Serverda LRU-K faqat K bilan 2 ga teng K dan foydalaniladi, K ning ozgina oshishi bilan algoritmning samaradorligi oshadi. U bilan yaxshiroq tanishishingiz mumkin rahmat.

Boshqa algoritmlar

Albatta, LRU-K bu yagona echim emas. Bundan tashqari, 2Q va CLOCK (ikkalasi ham LRU-K ga o'xshash), MRU (LRU mantig'idan foydalanadigan, Yaqinda ishlatilgan, ammo boshqa qoida qo'llaniladi, LRFU (Yaqinda eng kam ishlatilgan va tez-tez ishlatiladigan) va boshqalar mavjud. Ba'zi ma'lumotlar bazalarida siz tanlashingiz mumkin. qaysi algoritm ishlatiladi.

5.1.3. Yozish buferi

Biz faqat o'qish buferi haqida suhbatlashdik, lekin MB ma'lumotlar yozish tamponlaridan ham foydalanadi, ular ma'lumotni to'playdi va ketma-ket yozish o'rniga diskka qismlarni to'ldiradi. Bu I / O ni tejaydi.
  Tamponlar do'koni ekanligini unutmang sahifalar  (jadvallarning ketma-ket emas) (bo'linmas ma'lumotlar bloklari). Bufer pulidagi sahifa o'zgartirilgan, ammo diskka yozilmagan bo'lsa, iflos deb nomlanadi. Nopok sahifalarni yozib olish vaqtini tanlaydigan turli xil algoritmlar mavjud. Ammo bu asosan bitimlar kontseptsiyasiga bog'liq.

5.2. Tranzaksiya menejeri

  Uning majburiyatlari har bir so'rov o'z tranzaktsiyasidan foydalangan holda bajarilishini kuzatishni o'z ichiga oladi. Ammo dispetcher haqida gapirishdan oldin, keling, ACID operatsiyalari tushunchasiga aniqlik kiritaylik.

5.2.1. "Kislota ostida" (pun, agar hech kim tushunmasa)

ACID bitimi (Atomlik, izolyatsiya, chidamlilik, uyg'unlik) - bu 4 shartni qondiradigan elementar operatsiya, ish birligi:

  • Atomiklik  Bitimdan boshqa narsa yo'q, kichikroq operatsiya ham bo'lmaydi. Agar operatsiya 10 soat davom etsa ham. Muvaffaqiyatsiz tranzaksiya holatida tizim "oldingi" holatga qaytadi, ya'ni tranzaktsiya orqaga qaytariladi.
  • Izolyatsiya. Agar bir vaqtning o'zida A va B ikkita operatsiyalar bajarilsa, ularning natijasi ulardan biri ikkinchisining bajarilishidan oldin, davomida yoki keyin bajarilganligiga bog'liq bo'lmasligi kerak.
  • Ishonchlilik (barqarorlik).  Tranzaktsiya amalga oshirilganda, ya'ni muvaffaqiyatli bajarilganda, foydalanilgan ma'lumotlar, mumkin bo'lgan noxush hodisalar (xatolar, avariyalar) ga qaramay, ma'lumotlar bazasida qoladi.
  • Muvofiqlik (izchillik).  Ma'lumotlar bazasiga faqat tegishli ma'lumotlar yoziladi (o'zaro va funktsional munosabatlar nuqtai nazaridan). Muvofiqlik atomiklik va izolyatsiyaga bog'liq.

Bitimni bajarish paytida ma'lumotlarni o'qish, yaratish, yangilash va o'chirish uchun turli xil SQL so'rovlarini bajarishingiz mumkin. Muammolar ikkita operatsiyalar bir xil ma'lumotlardan foydalanganda boshlanadi. Klassik misol - bu A hisobidan B hisobvarag'iga pul o'tkazish. Aytaylik, biz ikkita operatsiyani bajaramiz:

  • T1 A hisobidan $ 100 oladi va ularni B hisobvarag'iga yuboradi.
  • T2 A hisobidan $ 50 oladi va ularni B hisobvarag'iga yuboradi.
  Endi bu holatni ACID xususiyatlari nuqtai nazaridan ko'rib chiqing:
  • Atomiklik  T1 paytida nima bo'lishidan qat'i nazar (serverning ishdan chiqishi, tarmoqning ishdan chiqishi), $ 100 A dan o'chirilishi mumkin, ammo B ga kelmaydi (aks holda ular "nomuvofiq holat" haqida gapirishadi).
  • Izolyatsiya  aytadiki, agar T1 va T2 bir vaqtning o'zida bajarilsa ham, natijada A dan 100 dollar miqdorida mablag 'kelib tushadi va B miqdori o'sha miqdorga tushadi. Boshqa barcha holatlarda ular yana nomuvofiq holat haqida gapirishadi.
  • Ishonchlilik  Agar baza T1 qilinganidan keyin darhol tushib qolsa, T1 yo'q bo'lib ketishi haqida xavotirlanmasligingizga imkon beradi.
  • Muvofiqlik  pulni yaratish yoki tizimda uni yo'q qilishning oldini oladi.
Siz quyida o'qiy olmaysiz, endi materialning qolgan qismini tushunish uchun endi muhim emas.

Ko'pgina ma'lumotlar bazalari sukut bo'yicha to'liq izolyatsiyani ta'minlamaydi, chunki bu juda katta xarajatlarni keltirib chiqaradi. SQL 4 izolyatsiya darajasidan foydalanadi:

  • Serializatsiya qilinadigan bitimlar.  Izolyatsiyaning eng yuqori darajasi. SQLite-da standart sifatida ishlatiladi. Har bir operatsiya o'ziga xos, mutlaqo xavfsiz muhitda amalga oshiriladi.
  • Qayta o'qish mumkin  MySQL-da standart sifatida ishlatiladi. Har bir tranzaktsiyaning o'ziga xosligi bor, bitta holatdan tashqari: agar bitim yangi ma'lumotlar qo'shadi  va muvaffaqiyatli bo'lsa, ular hali ham davom etayotgan boshqa operatsiyalarga ko'rinadi. Ammo agar bitim bo'lsa ma'lumotlarni o'zgartiradi va muvaffaqiyatli bo'lsa, ushbu o'zgarishlar hali ham davom etayotgan bitimlarga ko'rinmaydi. Ya'ni, yangi ma'lumotlar uchun izolyatsiya tamoyili buziladi.

    Masalan, A bitimi bajariladi

    TABLE_X dan SELECT soni (1)
      Keyin B bitimi X jadvalga qo'shiladi va yangi ma'lumotlarni oladi. Va agar ushbu operatsiyadan keyin A yana hisoblashni amalga oshirsa (1), unda natija boshqacha bo'ladi.

    Bunga fantom o'qish deyiladi.

  • Majburiy ma'lumotlarni o'qing. Odatiy bo'lib Oracle, PostgreSQL va SQL Server-da foydalaniladi. Bu takroriy o'qish bilan bir xil, ammo qo'shimcha izolyatsiyani buzish bilan. A tranzaktsiyasi deylik, ma'lumot o'qiydi; keyin ushbu amallarni bajaradigan B bitimi tomonidan o'zgartiriladi yoki yo'q qilinadi. Agar A bu ma'lumotlarni qayta ko'rib chiqsa, u B tomonidan kiritilgan o'zgarishlarni (yoki o'chirish faktini) ko'radi.

    Bunga takrorlanmaydigan o'qish deyiladi.

  • Xavfsiz ma'lumotlarni o'qing.  Izolyatsiyaning eng past darajasi. Olingan ma'lumotlarni o'qish uchun izolyatsiyaning yangi buzilishi qo'shiladi. A tranzaktsiyasi deylik, ma'lumot o'qiydi; keyin ular B bitimi bilan o'zgartiriladi (o'zgarishlar kiritilmaydi, B hali bajarilmoqda). Agar A ma'lumotlarni qayta o'qisa, u kiritilgan o'zgarishlarni ko'radi. Agar B orqaga qaytarilsa, qayta o'qigandan so'ng, A hech qanday o'zgarish bo'lmagandek, 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 Serverlardagi kabi suratga olishlarga asoslangan). Bundan tashqari, ko'plab ma'lumotlar bazalarida yuqoridagi to'rtliklarning barchasi bajarilmaydi, ayniqsa tashlab yuborilgan ma'lumotlarni o'qish.

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

5.2.2. Muvofiqlikni boshqarish

Izolyatsiya, izchillik va atomilikka muhtoj bo'lgan asosiy narsa bu bir xil ma'lumotlarga yozish (qo'shish, yangilash va o'chirish) qobiliyatidir.

Agar barcha operatsiyalar faqat ma'lumotlarni o'qiydigan bo'lsa, ular boshqa operatsiyalarga ta'sir qilmasdan bir vaqtning o'zida ishlashlari mumkin.
  Agar kamida bitta bitim boshqa operatsiyalar tomonidan o'qilgan ma'lumotni o'zgartirsa, unda ma'lumotlar bazasi ushbu o'zgarishlarni ulardan yashirish uchun usul topishi kerak. Bundan tashqari, kiritilgan o'zgarishlarni boshqa ma'lumotlarni ko'rmagan boshqa operatsiyalar o'chirilmasligiga ishonch hosil qilishingiz kerak.

Bu kelishuvni boshqarish deb ataladi.

Eng oson yo'li - operatsiyalarni birma-bir bajarish. Ammo bu yondashuv odatda samarasiz (bitta protsessorning faqat bitta yadrosi ishtirok etadi) va bundan tashqari, o'lchov qobiliyati yo'qoladi.

Muammoni hal qilishning ideal usuli quyidagicha (har safar tranzaktsiya yaratilganda yoki bekor qilinganda):

  • Har bir operatsiyaning barcha operatsiyalarini kuzatib boring.
  • Agar bitta ma'lumotni o'qish / o'zgartirish tufayli ikki yoki undan ortiq bitimlar to'qnash kelsa, unda sabablarni kamaytirish uchun nizolashayotgan tomonlar ichidagi operatsiyalar ketma-ketligini o'zgartiring.
  • Muayyan tartibda ziddiyatli bitimlarni amalga oshiring. Hozirgi vaqtda qarama-qarshi bo'lmagan bitimlar parallel ravishda amalga oshiriladi.
  • Shuni yodda tutingki, bitimlar bekor qilinishi mumkin.
  Agar siz muammoga ko'proq rasmiy ravishda murojaat qilsangiz, unda bu jadval jadvalining to'qnashuvi muammosi. Buni hal qilish juda qiyin va optimallashtirish katta protsessor resurslarini talab qiladi. Korporativ ma'lumotlar bazalari har bir yangi operatsiya uchun eng yaxshi jadvalni qidirishga ko'p vaqt sarflashga qodir emas. Shuning uchun mojarolarga ko'proq vaqt sarflanadigan kamroq mukammal yondashuvlar qo'llaniladi.

5.2.3. Qulf boshqaruvchisi

Yuqoridagi muammoni hal qilish uchun ko'pgina ma'lumotlar bazalari qulflash va / yoki tahrirlangan ma'lumotlardan foydalanadilar.
  Agar tranzaktsiyalar ba'zi ma'lumotlarga muhtoj bo'lsa, ularni blokirovka qiladi. Agar ular yana boshqa tranzaktsiyaga muhtoj bo'lishsa, u holda birinchi operatsiya qulfni bo'shatguncha kutish kerak bo'ladi.

Bunga eksklyuziv qulf deyiladi.

Faqat ma'lumotni o'qish kerak bo'lgan hollarda eksklyuziv qulflardan foydalanish behuda. Ma'lumotni o'qishga nima hojat? Bunday hollarda, umumiy qulflar ishlatiladi. Agar tranzaktsiyalar ma'lumotlarni o'qishi kerak bo'lsa, ularga qo'shma qulf qo'llaniladi va o'qiydi. Bu boshqa operatsiyalarni birgalikda qulflash va ma'lumotlarni o'qish uchun to'sqinlik qilmaydi. Agar ulardan birortasi ma'lumotni o'zgartirishi kerak bo'lsa, u holda barcha qo'shma qulflar bo'shaguncha kutishga to'g'ri keladi. Shundagina u eksklyuziv qulfni qo'llay oladi. Va keyin barcha boshqa operatsiyalar ushbu ma'lumotni o'qish uchun uning olib qo'yilishini kutish kerak bo'ladi.

Qulf boshqaruvchisi - bu qulflarni qo'llaydigan va olib tashlaydigan jarayon. Ular xesh-jadvalda saqlanadi (tugmalar qulflangan ma'lumotlar). Dispetcher, qulflashga to'g'ri kelgan yoki olib tashlanishini kutayotgan barcha ma'lumotlarni biladi.

Tugash

Qulflardan foydalanish natijasida ikkita operatsiya qulflarning ochilishini kutib turgan vaziyatga olib keladi:

Bu erda A bitimi faqat 1-ma'lumotni blokirovka qilgan va 2-ma'lumotlarni chiqarilishini kutmoqda. Shu bilan birga, B bitimi faqat 2-ma'lumotni blokirovka qilgan va 1-ma'lumotlar chiqishini kutmoqda.

O'zaro qulf bilan, dispetcher qaysi operatsiyani bekor qilishni (orqaga qaytarishni) tanlaydi. Va qaror qabul qilish unchalik oson emas:

  • So'nggi ma'lumotlar to'plamini o'zgartirgan tranzaktsiyani o'ldirish yaxshiroq bo'larmidi?
  • Boshqa tranzaktsiyalar foydalanuvchilari uzoq kutganidek, eng yosh tranzaktsiyani o'ldirish yaxshiroq bo'ladimi?
  • Bajarishga oz vaqt talab qiladigan bitimni o'ldirish yaxshiroq bo'ladimi?
  • Qancha boshqa operatsiyalar orqaga qaytarishga ta'sir qiladi?
  Ammo qaror qabul qilishdan oldin, dispetcher haqiqatan ham qiyin vaziyat yuzaga kelganiga ishonch hosil qilishi kerak.

Yuqoridagi rasmda bo'lgani kabi, xesh jadvalini diagramma shaklida tasavvur qiling. Agar diagrammada tsiklik aloqa mavjud bo'lsa, qulf tasdiqlangan. Ammo tsiklning mavjudligini tekshirish juda qimmat bo'lgani uchun (chunki barcha qulflar ko'rsatilgan diagramma juda katta bo'ladi), ko'pincha sodda usul qo'llaniladi: taym-autdan foydalanish. Agar qulf ma'lum vaqt ichida chiqarilmasa, u holda bitim o'zaro qulflash holatiga o'tdi.

Qulfni qo'yishdan oldin, dispetcher shuningdek, bu qulashga olib kelishini tekshirishi mumkin. Bunga aniq javob berish uchun, shuningdek, hisob-kitoblarga pul sarflash kerak. Shuning uchun bunday oldindan tekshiruvlar ko'pincha asosiy qoidalar to'plami sifatida taqdim etiladi.

Bifazik blokirovka

To'liq izolyatsiyani ta'minlashning eng oson usuli - bu qulf boshida qo'llanilganda va bitim oxirida olib tashlanganida. Bu shuni anglatadiki, tranzaktsiyalar ishga tushirishdan oldin barcha qulflar bo'shatilishini kutish kerak va u ishlatgan qulflar faqat oxirida bo'shatiladi. Ushbu yondashuvni qo'llash mumkin, ammo keyin qulfni ochishning barcha kutishlariga ko'p vaqt sarflanadi.

DB2 va SQL Server ikki fazali blokirovka protokolidan foydalanadi, bunda bitim ikki bosqichga bo'linadi:

  • Ko'tarilish fazasi (o'sish bosqichi)operatsiya faqat qulflarni qo'llashi mumkin, ammo ularni qo'yib yubormang.
  • Siqilish fazasitranzaktsiya faqat qulflarni bo'shatishi mumkin (avval ishlov berilgan va qayta ishlanmagan ma'lumotlardan), lekin yangisini ishlatmang.
  Ikki fazali qulf bo'lmaganda yuzaga keladigan tez-tez to'qnashuvlar:

A, X \u003d 1 va Y \u003d 1. tranzaktsiyalaridan oldin u A bitimining boshlanishidan keyin B bitimi bilan o'zgartirilgan Y \u003d 1 ma'lumotlarini qayta ishlaydi, izolyatsiya printsipi tufayli A bitim Y \u003d 2 ni qayta ishlashi kerak.

Ushbu ikkita oddiy qoidalar yordamida erishiladigan maqsadlar:

  • Boshqa operatsiyalarning kechikishini kamaytirish uchun endi kerak bo'lmagan qulflarni bo'shating.
  • Tranzaksiya avval boshlangan tranzaktsiyada o'zgartirilgan ma'lumotlarni qabul qilish holatlarining oldini olish uchun. Bunday ma'lumotlar so'ralmagan.
  Ushbu protokol juda yaxshi ishlaydi, faqatgina tranzaktsiya ma'lumotni o'zgartirgan va undan blokirovka olib tashlangan holatlar bundan mustasno. Bunday holda, boshqa tranzaktsiya ma'lumotlarni o'qiydi va o'zgartiradi, shundan so'ng ular orqaga qaytariladi. Bunday vaziyatni oldini olish uchun bitim oxirida barcha maxsus qulflarni olib tashlash kerak.

Albatta, haqiqiy ma'lumotlar bazalarida yanada murakkab tizimlar, qulflarning ko'proq turlari va kattaroq darajadagi (to'siqlar qatorlari, sahifalar, bo'limlar, jadvallar, stol bo'sh joylari) foydalaniladi, ammo mohiyati bir xil.

Ma'lumotlarni tahrirlash

Tranzaktsion ziddiyatli muammoni hal qilishning yana bir usuli - ma'lumotlarni qayta ishlashdan foydalanish.

  • Barcha operatsiyalar bir vaqtning o'zida bir xil ma'lumotlarni o'zgartirishi mumkin.
  • Har bir operatsiya ma'lumotlarning o'z nusxasi (versiyasi) bilan ishlaydi.
  • Agar ikkita operatsiya bir xil ma'lumotni o'zgartirsa, unda modifikatsiyaning faqat bittasi qabul qilinadi, ikkinchisi rad qilinadi va uni amalga oshirgan operatsiya orqaga qaytariladi (va ehtimol qayta boshlanadi).
  Bu sizga samaradorlikni oshirishga imkon beradi, chunki:
  • O'qish operatsiyalari yozishni blokirovka qilmaydi va aksincha.
  • Sekin qulflash menejeri hech qanday ta'sir ko'rsatmaydi.
  Umuman olganda, har qanday narsa qulflardan yaxshiroq bo'ladi, ikkita operatsiya bir xil ma'lumotlarni yozib qo'ygandan tashqari. Bundan tashqari, bu disk maydonining haddan tashqari ko'payishiga olib kelishi mumkin.

Ikkala yondashuv - blokirovka qilish va nusxalash - ijobiy va salbiy tomonlariga ega, ko'p narsa ular ishlatilgan vaziyatga bog'liq (ko'proq o'qiladi yoki ko'proq yozuvlar). PostgreSQL-da ko'p versiyali kelishuvni boshqarish tizimini joriy etish bo'yicha juda yaxshi taqdimotni o'rganishingiz mumkin.

Ba'zi ma'lumotlar bazalarida (DB2 9.7 versiyasidan oldin, SQL Server) faqat qulflardan foydalaniladi. Boshqalar, masalan PostgreSQL, MySQL va Oracle, birlashtirilgan yondashuvlardan foydalanadilar.

Izoh: versiyalarni tuzish indekslarga qiziqarli ta'sir ko'rsatadi. Ba'zan nusxalar noyob indeksda paydo bo'ladi, indeks jadvaldagi satrlarga qaraganda ko'proq yozuvlarni o'z ichiga olishi mumkin va hokazo.

Agar ma'lumotlarning bir qismi izolyatsiyaning bir darajasida o'qilsa va keyin u ko'payib ketsa, u holda qulflar soni ko'payadi, ya'ni tranzaktsiyalarni kutish uchun ko'proq vaqt sarf qilinadi. Shuning uchun, ko'pchilik ma'lumotlar bazalari sukut bo'yicha maksimal izolyatsiya darajasidan foydalanmaydi.

Odatdagidek, qo'shimcha ma'lumot olish uchun hujjatlarga murojaat qiling: MySQL, PostgreSQL, Oracle.

5.2.4. Jurnal menejeri

Ma'lumki, unumdorlikni oshirish uchun ma'lumotlar bazasi ma'lumotlarning bir qismini bufer xotirasida saqlaydi. Ammo agar tranzaktsiya paytida server ishdan chiqsa, xotiradagi ma'lumotlar yo'qoladi. Va bu bitimlarning ishonchliligi printsipini buzadi.

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

Bitim tomonidan qayd etilgan har qanday o'zgarishlar orqaga qaytarilishi yoki to'ldirilishi kerak.

Bu ikki usulda amalga oshiriladi:

  • Soya nusxalari / sahifalar.  Har bir operatsiya ma'lumotlar bazasining (yoki uning bir qismining) o'z nusxasini yaratadi va ushbu nusxa bilan ishlaydi. Agar xato bo'lsa, nusxasi o'chiriladi. Agar hamma narsa yaxshi bo'lsa, unda ma'lumotlar bazasi zudlik bilan nusxa ko'chirishdan fayl tizimi darajasida bitta hiyla bilan ma'lumotlarga o'tadi va keyin "eski" ma'lumotlarni o'chiradi.
  • Tranzaktsiyalar jurnali  Bu maxsus saqlash ombori. Har bir diskka yozishdan oldin ma'lumotlar bazasi tranzaktsiyalar jurnaliga ma'lumot yozadi. Shunday qilib, ishlamay qolgan taqdirda, ma'lumotlar bazasi tugallanmagan tranzaktsiyani qanday o'chirish yoki to'ldirishni bilib oladi.
WAL

Ko'p sonli tranzaktsiyalar mavjud bo'lgan katta ma'lumotlar bazalarida, soya nusxalari / sahifalari disk quyi tizimida juda katta bo'shliqni egallaydi. Shuning uchun zamonaviy ma'lumotlar bazalarida tranzaktsiyalar jurnalidan foydalaniladi. U nosozlikdan saqlanadigan omborda joylashgan bo'lishi kerak.

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

  1. Ma'lumotlar bazasidagi har bir o'zgartirish jurnaldagi yozuv bilan birga bo'lishi kerak va ma'lumotlar diskka yozilishidan oldin amalga oshirilishi kerak.
  2. Jurnal yozuvlari tegishli voqealar ketma-ketligiga muvofiq tartibga solinishi kerak.
  3. Bitim amalga oshirilganda, operatsiya muvaffaqiyatli tugashidan oldin bu haqda yozuv yozilishi kerak.

Ushbu qoidalar jurnal menejeri tomonidan kuzatiladi. Mantiqan, u kesh menejeri va ma'lumotlarga kirish menejeri o'rtasida joylashgan. Jurnal menejeri tranzaktsiyalar orqali bajariladigan har bir operatsiyani diskka yozilgunga qadar ro'yxatga oladi. To'g'ri ko'rinadi?

YO'Q! Ushbu maqolada siz va men boshdan kechirgan barcha narsalardan so'ng, ma'lumotlar bazasi bilan bog'liq barcha narsalar "ma'lumotlar bazasi effekti" la'nati bo'lishini eslash vaqti keldi. Jiddiy, muammo yaxshi ishlashini saqlab turib, siz jurnalga yozish usulini topishingiz kerak. Axir, agar tranzaktsiyalar jurnali sekin bo'lsa, u boshqa barcha jarayonlarni sekinlashtiradi.

Aries

1992 yilda IBM tadqiqotchilari ARAL deb nomlangan WAL-ning kengaytirilgan versiyasini yaratdilar. ARIES ma'lum bir shaklda yoki boshqa shaklda, zamonaviy ma'lumot bazalari tomonidan qo'llaniladi. Agar siz ushbu protokolni chuqurroq o'rganmoqchi bo'lsangiz, tegishli ishni o'rganishingiz mumkin.

Shunday qilib, ARIES - bu Auchun lgoritmlar Rekoturizm va Menyolg'izlik Exploiting Semantika. Ushbu texnologiyaning ikkita vazifasi bor:

  1. Yaxshi jurnal ishlashini ta'minlang.
  2. Tez va ishonchli tiklanishni ta'minlang.
  Ma'lumotlar bazasi tranzaktsiyani orqaga qaytarishiga bir nechta sabablar bor:
  1. Foydalanuvchi buni bekor qildi.
  2. Server yoki tarmoq xatosi.
  3. Bitim ma'lumotlar bazasining yaxlitligini buzdi. Masalan, siz ustunga UNIQUE qoidasini qo'lladingiz va operatsiya dublikat qo'shdi.
  4. O'zaro qulflarning mavjudligi.
  Ammo ba'zida ma'lumotlar bazasi tranzaktsiyani tiklashi mumkin, masalan, tarmoq xatosi bo'lsa.

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

Jurnallar
  Bitimni bajarish paytida har bir operatsiya (qo'shish / o'chirish / o'zgartirish) jurnal yozuvining paydo bo'lishiga olib keladi. Kirish quyidagilarni o'z ichiga oladi:

  • LSN (jurnal tartib raqami). Bu noyob raqam bo'lib, uning qiymati xronologik tartibda aniqlanadi. Ya'ni, agar A operatsiya B operatsiyasidan oldin sodir bo'lgan bo'lsa, A uchun LSN V uchun LSN dan kamroq bo'ladi. Aslida LSNni yaratish usuli yanada murakkab, chunki u logni saqlash usuli bilan bog'liq.
  • TransID  Bitimni amalga oshirgan operatsiya identifikatori.
  • PageID. O'zgartirilgan ma'lumotlar joylashgan disk maydoni.
  • PrevLSN. Xuddi shu bitim tomonidan yaratilgan oldingi jurnal yozuviga havola.
  • Bekor qilish. Operatsiyani orqaga qaytarish usuli.

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

  • REDO. Operatsiyani takrorlash usuli.
  Bundan tashqari, diskdagi har bir sahifada (ma'lumotlarni emas, balki jurnalni saqlash uchun) oxirgi operatsiyaning LSN mavjud, bu erda joylashgan ma'lumotlar o'zgartiriladi.

Bilishimcha, UNDO faqat PostgreSQL-da ishlatilmaydi. Buning o'rniga eski ma'lumotlarning nusxalarini tozalash uchun axlat yig'ish vositasi ishlatiladi. Bu ushbu ma'lumotlar bazasida ma'lumotlarni tahrirlashni amalga oshirish bilan bog'liq.

Kirishni tarkibini tasavvur qilishingizni osonlashtirish uchun, bu erda vizual soddalashtirilgan misol keltirilgan, unda YoZILGAN ShARTNOMA YO'Q \u003d 18; so'rov bajarilgan. U 18-sonli bitimda bajarilsin:

Har bir jurnalda noyob LSN mavjud. Bog'langan jurnallar bir xil operatsiyani anglatadi va ular xronologik tartibda bog'langan (ro'yxatning oxirgi jurnali oxirgi operatsiyani anglatadi).

Jurnal buferi
  Tizimga kirishni tizimning siqilishiga olib kelmasligi uchun jurnal buferi ishlatiladi.

Talab qiluvchi o'zgartirilgan ma'lumotni so'raganda:

  1. Kesh boshqaruvchisi ularni buferda saqlaydi.
  2. Jurnal menejeri tegishli jurnalni o'z buferida saqlaydi.
  3. So'rovchi operatsiya tugaganligini va shunga mos ravishda o'zgartirilgan ma'lumotlarni so'rash mumkinligini aniqlaydi.
  4. Jurnal menejeri tranzaktsiyalar jurnalida kerakli ma'lumotlarni saqlaydi. Ushbu yozuvni kiritish vaqti algoritm tomonidan o'rnatiladi.
  5. Kesh boshqaruvchisi diskdagi o'zgarishlarni yozadi. Yozish momenti ham algoritm tomonidan o'rnatiladi.
  Bitim amalga oshirilganda, bu 1 dan 5 gacha bo'lgan barcha qadamlar bajarilganligini anglatadi, chunki tranzaksiyalar jurnaliga kirish tezda amalga oshiriladi, chunki u "operatsiyalar jurnaliga biron bir joyga jurnal qo'shib qo'yish". Shu bilan birga, ma'lumotlarni diskka yozish yanada murakkab protsedura bo'lib, ma'lumotlarni keyinchalik tezda o'qish kerakligini hisobga olsak.

STEAL va FORCE siyosati

Unumdorlikni oshirish uchun majburiyatni bajargandan keyin 5-bosqichni bajarish kerak, chunki muvaffaqiyatsizlikka uchragan taqdirda ham REDO yordamida operatsiyani tiklash mumkin. Bunga NO-FORCE siyosati deyiladi.

Ammo ma'lumotlar bazasi tiklash paytida yukni kamaytirish uchun FORCE siyosatini tanlashi mumkin. Keyin 5-sonli xato majburiyat oldidan amalga oshiriladi.

Ma'lumotlar bazasi ma'lumotni bosqichma-bosqich (STEAL siyosati) diskka yozishni yoki agar bufer menejeri majburiyatni kutishi kerak bo'lsa, hammasini birdaniga yozishni tanlaydi (NO-STEAL). Tanlash sizga kerak bo'lgan narsaga bog'liq: uzoq tiklash yoki tez tiklash bilan tezkor yozib olish?

Ko'rsatilgan qoidalar tiklanish jarayoniga qanday ta'sir qiladi:

  • STEAL / NO-FORCEga UNDO va REDO kerak. Ishlash - bu loglar va tiklash jarayonlarining (ARES kabi) eng yuqori, ammo murakkab tuzilishi. Ushbu qoida kombinatsiyasidan ko'pgina ma'lumotlar bazalari foydalanadi.
  • STEAL / FORCE uchun faqat UNDO kerak.
  • NO-STEAL / NO-FORCE uchun - faqat REDO.
  • NO-STEAL / FORCE uchun hech narsa kerak emas. Bu holda ishlash eng past bo'ladi va katta hajmdagi xotira talab qilinadi.
Qayta tiklash

Xo'sh, bizning ajoyib jurnallarimizdan qanday foydalanishimiz mumkin? Aytaylik, yangi xodim ma'lumotlar bazasini yo'q qildi (№1 qoida: yangilar har doim aybdor!). Siz uni qayta ishga tushirasiz va tiklash jarayoni boshlanadi.
  ARIES uch bosqichda tiklanadi:

  1. Tahlil. Ma'lumotlar bazasining qulashi paytida ro'y bergan voqealar xronologiyasini tiklashingiz uchun barcha tranzaktsiyalar jurnali o'qiladi. Bu qaysi operatsiyani orqaga qaytarish kerakligini aniqlashga yordam beradi. Barcha tranzaktsiyalar buyurtma qilinmasdan qaytariladi. Tizim, shuningdek, avariya paytida diskka qaysi ma'lumotlarni yozish kerakligini hal qiladi.
  2. Qayta ijro etish. REDO buzilishdan oldin ma'lumotlar bazasini 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 (disk_page)\u003e \u003d LSN (log_log) bo'lsa, u holda ma'lumotlar diskka allaqachon yozilgan. Ammo qiymat jurnalga yozilgandan keyin va muvaffaqiyatsizlikka qadar bajarilgan operatsiya orqali qayta yozildi. Shunday qilib, hech narsa qilinmadi, aslida.

    Agar LSN bo'lsa (drive_page)

    Takrorlash hatto orqaga qaytariladigan bitimlar uchun ham amalga oshiriladi, chunki bu tiklanish jarayonini soddalashtiradi. Ammo zamonaviy ma'lumotlar bazalari, ehtimol, bunday emas.

  3. Bekor qilish  Ushbu bosqichda, ishlamay qolgan paytda bajarilmagan barcha operatsiyalar orqaga qaytariladi. Jarayon har bir tranzaktsiyaning so'nggi jurnallaridan boshlanadi va PrevLSN-dan foydalanib, teskari xronologik tartibda UNDO-ni qayta ishlaydi.
  Qayta tiklash jarayonida tranzaktsiyalar jurnalida tiklash paytida bajarilgan harakatlar to'g'risida xabardor bo'lish kerak. Bu diskda saqlangan ma'lumotlarni tranzaktsiyalar jurnalida yozilganlar bilan sinxronlashtirish uchun kerak. Siz orqaga qaytarilgan tranzaktsiyalar yozuvlarini o'chirib tashlashingiz mumkin, ammo buni qilish juda qiyin. Buning o'rniga, ARIES tranzaktsiyalar jurnalidagi yozuvlarni bir-biriga moslashtiradi va orqaga qaytarish tranzaktsiyalarini mantiqiy ravishda bekor qiladi.

Agar operatsiya qulflash menejeri tomonidan yoki qo'lda "tarmoq" ishlamay qolganligi sababli "qo'lda" bekor qilinsa, tahlil bosqichi kerak emas. Darhaqiqat, REDO va UNDO uchun ma'lumotlar xotirada joylashgan ikkita jadvalda mavjud:

  • Tranzaktsiyalar jadvalida (barcha joriy operatsiyalarning holati shu erda saqlanadi).
  • Nopok sahifalar jadvali (bu erda diskka yozishingiz kerak bo'lgan ma'lumotlar haqida ma'lumot mavjud).
Yangi tranzaktsiya paydo bo'lishi bilan, ushbu jadvallar kesh menejeri va tranzaktsiyalar menejeri tomonidan yangilanadi. Va jadvallar xotirada saqlanganligi sababli, ma'lumotlar bazasi buzilganda ular yo'qoladi.

Tahlil bosqichi faqat ikkala jadvalni tranzaksiyalar jurnalidagi ma'lumotlardan foydalangan holda tiklash uchun kerak. Ushbu bosqichni tezlashtirish uchun ARIES o'tish nuqtalarini ishlatadi. Ikkala jadvalning tarkibi vaqti-vaqti bilan diskka yoziladi, shuningdek LSN-ni yozib olish paytida oxirgi. Shunday qilib, tiklanish paytida faqat LSN-dan keyingi jurnallar tahlil qilinadi.

6. Xulosa

  Ma'lumotlar bazalari haqida qo'shimcha ma'lumot sifatida siz ma'lumotlar bazasi arxitekturasi maqolasini tavsiya qilishingiz mumkin. Bu juda tushunarli tilda yozilgan mavzu uchun yaxshi kirish.

Agar siz yuqoridagi barcha materiallarni diqqat bilan o'qib chiqsangiz, unda siz ma'lumotlar bazalarining imkoniyatlari naqadar katta ekanligi haqida tasavvurga egasiz. Biroq, ushbu maqola boshqa muhim masalalarga murojaat qilmaydi:

  • Klasterli ma'lumotlar bazalarini va global operatsiyalarni qanday boshqarish kerak.
  • Ma'lumotlar bazasi ishlayotgan bo'lsa, oniy suratni qanday olish kerak.
  • Ma'lumotni qanday qilib samarali saqlash va siqish kerak.
  • Xotirani qanday boshqarish.
  Shunday qilib, notug NoSQL va qattiq aloqador ma'lumotlar bazasi o'rtasida qaror qilishdan oldin ikki marta o'ylab ko'ring. Xato qilmang, ba'zi NoSQL ma'lumotlar bazalari juda yaxshi. Ammo ular hali ham mukammal emaslar va faqat ba'zi dasturlar bilan bog'liq muammolarni hal qilishda yordam berishlari mumkin.

Shunday qilib, agar kimdir sizdan ma'lumotlar bazalari qanday ishlashini so'rasa, tupurish va chiqib ketish o'rniga, javob berishingiz mumkin:

Teglar: Teg qo'shing

2. Relyatsion model tamoyillari

Bog'lanish ma'lumotlar bazasi modeli, munosabatlar, jadval, natijalar to'plami, to'plam, kuch, atribut, o'lcham, sarlavha, tan, domen tamoyillari

Relyatsion model 1960 yillarning oxirida EF Koddom (IBM xodimi) tomonidan ishlab chiqilgan va 1970 yilda nashr etilgan. Unda ma'lumotlar taqdim etish usuli (ma'lumotlar tuzilishi), ma'lumotlarni himoya qilish usullari (ma'lumotlar yaxlitligi) va ular yordamida bajarilishi mumkin bo'lgan operatsiyalar aniqlanadi. ma'lumotlar (ma'lumotlarni boshqarish).

Relatsion model ma'lumotlar bilan ishlashda ishlatilishi mumkin bo'lgan yagona narsa emas. Shuningdek, ierarxik model, tarmoq modeli, yulduz shaklidagi model va boshqalar mavjud. Biroq, relyatsion model eng qulay bo'lib chiqdi va shuning uchun hozirgi kunda eng keng tarqalgan.

Relyatsion ma'lumotlar bazasining asosiy printsiplarini quyidagicha shakllantirish mumkin:

Kontseptual darajadagi barcha ma'lumotlar, satrlar va ustunlar shaklida aniqlangan va munosabatlar deb nomlangan, buyurtma qilingan tashkilot shaklida taqdim etiladi. "Aloqa" so'zining eng keng tarqalgan sinonimi jadval (yoki "rekordlar to'plami" yoki natijalar to'plami - natijalar to'plami.) Bu erda "ma'lumotlar bazalari" atamasi jadvallar o'rtasidagi munosabatlardan kelib chiqadi;

Barcha qiymatlar skalyaradir. Bu har qanday aloqaning har qanday satri va ustuni uchun bitta va bitta qiymat mavjudligini anglatadi;

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

Endi - rasmiy atamalar haqida:

· munosabat  (munosabatlar) - bu butun struktura, yozuvlar to'plami (odatiy ma'noda - jadval).

· mototsikl  ma'lumotlarni o'z ichiga olgan har bir satr. Keng tarqalgan, ammo kamroq rasmiy atama yozib olishdir.

· quvvat  - aloqada bo'lganlar soni (boshqacha qilib aytganda, yozuvlar soni);

· atribut  - bu munosabatdagi ustun;

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

Har bir munosabatni ikki qismga bo'lish mumkin - sarlavha  va tanani. Oddiy tilda munosabatlar sarlavhasi ustunlar ro'yxati, tana esa yozuvlarning o'zlari (to'rlar).

· 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 qism domeni  (ma'lumotlar ustuni taqdim etadigan ma'lumotlar turi). "Domen" va "ma'lumotlar turi" tushunchalari bir-biriga teng emas. Amalda, odatda domen qoldirilmaydi.

O'zaro munosabatlar tanasi tartibsiz bog'langan to'plamdan iborat (ularning soni har qanday bo'lishi mumkin - 0 dan cheksiz katta).

Melnikova 620000 Rossiya, Sverdlovsk viloyati, Ekaterinburg. +7 953 039 559 1 [elektron pochta himoyalangan]sayt


Nisbiy ma'lumotlar bazasi - Bu ikki o'lchovli jadval shaklida berilgan ma'lumot. Manzillar kitobini tasavvur qiling. U ko'plab qatorlarni o'z ichiga oladi, ularning har biri ma'lum bir kishiga mos keladi. Ularning har biri uchun bir nechta mustaqil ma'lumotlar, masalan, ism, telefon raqami, manzili ko'rsatilgan. Ushbu manzillar kitobini satrlar va ustunlar mavjud bo'lgan jadval shaklida tasavvur qiling. Har bir satr (yozuv deb ham ataladi) ma'lum bir shaxsga mos keladi, har bir ustun tegishli ma'lumot turlarining qiymatlarini o'z ichiga oladi: har bir satrda ko'rsatilgan ism, telefon raqami va manzil. Manzillar kitobi quyidagicha ko'rinishi mumkin:

Biz olgan ma'lumotlar ikki o'lchovli (jadval va ustun) ma'lumot jadvalini muhokama qilishimizning boshida aniqlangan nisbiy ma'lumotlar bazasi uchun asosdir. Ammo, relyatsion ma'lumotlar bazasi kamdan-kam hollarda ma'lumotlar bazasiga nisbatan juda kichik bo'lgan bitta jadvaldan iborat bo'ladi. Tegishli ma'lumotlar bilan bir nechta jadvallarni yaratishda siz yanada murakkab va kuchli ma'lumotlar operatsiyalarini bajarishingiz mumkin. Ma'lumotlar bazasining kuchi, ma'lumotlarning o'zlari emas, balki ular o'rtasida tuzilgan munosabatlarga bog'liq.

Keling, ish hayotida ishlatilishi mumkin bo'lgan ma'lumotlar bazasini muhokama qilish uchun manzillar kitobining misolidan foydalanaylik. Aytaylik, birinchi jadvalda ko'rsatilganlar kasalxonada yotgan bemorlardir. Ular haqida qo'shimcha ma'lumotlarni boshqa jadvalda saqlash mumkin. Ikkinchi jadvalning ustunlarini shunday nomlash mumkin: bemor (bemor), shifokor (shifokor), sug'urtalovchi (sug'urta), balans (balans).

Belgilangan belgilarga muvofiq ushbu jadvallardan ma'lumotlarni ajratib olishda siz ko'plab kuchli funktsiyalarni bajarishingiz mumkin, ayniqsa agar mezon turli jadvallarning tegishli ma'lumotlarini o'z ichiga olsa.

Aytaylik, doktor Xalben barcha bemorlarining telefon raqamlarini olishni xohlaydi. Ushbu ma'lumotni olish uchun u bemorni telefon raqamlari (manzillar kitobi) bilan bemorni aniqlaydigan jadval bilan bog'lab qo'yishi kerak. Ushbu oddiy misolda u aqliy ravishda ushbu operatsiyani amalga oshirishi va Grillet va Brokning bemorlarining telefon raqamlarini bilib olishi mumkin, ammo aslida bu jadvallar juda katta va murakkabroq bo'lishi mumkin.

Jamiyatning ish hayotida eng keng tarqalgan ma'lumotlarning katta va murakkab to'plamlari bilan ishlash uchun relatsion ma'lumotlar bazasini qayta ishlaydigan dasturlar yaratilgan. Agar shifoxona ma'lumotlar bazasida o'n yoki minglab nomlar mavjud bo'lsa ham (haqiqiy hayotda shunday bo'lishi mumkin), bitta SQL buyrug'i doktor Xalbenga deyarli kerakli ma'lumotlarni beradi.

Chiziqlarning tartibi o'zboshimchalik bilan amalga oshiriladi.

Ma'lumotlar bilan ishlashda maksimal moslashuvchanlikni ta'minlash uchun jadval satrlari, ta'rifiga ko'ra, hech qanday tarzda buyurtma qilinmagan. Ushbu jihat ma'lumotlar bazasini manzillar kitobidan ajratib turadi. Manzillar daftaridagi satrlar odatda alifbo tartibida saralanadi. Ma'lumotlar bazasi tizimlari tomonidan taqdim etiladigan kuchli vositalardan biri - foydalanuvchilar ma'lumotni xohlagancha tashkil qilishlari.

Ikkinchi jadvalni ko'rib chiqing. Undagi ma'lumotlarni ba'zida nomlar bo'yicha buyurtma qilish, ba'zida balansni (Balans) ko'tarish yoki tushirishda ko'rib chiqish qulay, ba'zida esa shifokor tomonidan guruhlangan. Mumkin bo'lgan qator buyurtmalarining foydalanuvchiga ma'lumotlar bilan moslashuvchan bo'lishiga to'sqinlik qiladi, shuning uchun qatorlar tartibsiz deb taxmin qilinadi. Shuning uchun siz: "Men stolning beshinchi qatoriga qiziqaman", - deb ayta olmaysiz. Ma'lumotlar qay tartibda yoki boshqa mezonlardan qat'i nazar, ushbu beshinchi qator ta'rif bo'yicha mavjud emas. Shunday qilib, stol satrlari tasodifiy tartibda joylashtirilishi kerak.

Satr identifikatori (birlamchi kalit)

Buning uchun va boshqa bir qator sabablarga ko'ra har bir satrni aniq belgilaydigan jadval ustuniga ega bo'lishingiz kerak. Odatda bu ustun raqamni o'z ichiga oladi, masalan, har bir bemorga tayinlangan. Albatta, siz simlarni aniqlash uchun siz bemorning ismidan foydalanishingiz mumkin, ammo Meri Smit ismli bir nechta bemorlar bo'lishi mumkin. Bunday holda, ularni ajratishning oson usuli yo'q. Aynan shuning uchun raqamlar ko'pincha ishlatiladi. Har bir satrni aniqlash va barcha satrlarning ajralib turishini ta'minlash uchun foydalaniladigan bunday noyob ustun (yoki ular guruhi) jadvalning asosiy kaliti deb ataladi.

Jadvalning asosiy kaliti - ma'lumotlar bazasi tuzilishining hayotiy tushunchasi. Bu ma'lumotlar tizimining yuragi: jadvalda ma'lum bir qatorni topish uchun uning asosiy kalitining qiymatini belgilang. Bundan tashqari, u ma'lumotlarning yaxlitligini ta'minlaydi. Agar birlamchi kalit to'g'ri ishlatilsa va unga to'g'ri xizmat ko'rsatilsa, jadvalning birorta qatori bo'sh emasligiga va ularning har biri boshqasidan farq qilishiga qat'iy ishonch hosil qilasiz.

Ustunlar raqamlangan va raqamlangan.

Jadval ustunlaridan farqli o'laroq, jadval ustunlari (shuningdek, maydonlar deb ataladi) buyurtma qilinadi va nomlanadi, shuning uchun bizning manzillar kitobiga mos keladigan jadvalda biz "Manzil" ustuniga "uchinchi ustun" deb murojaat qilishimiz mumkin. Tabiiyki, bu har bir narsani anglatadi. Bu jadvalning ustunida boshqa nomlardan farq qiladigan nom bo'lishi kerak, shunda chalkashliklar bo'lmaydi .. Ismlar maydon tarkibini aniqlaganida eng yaxshisi.Bu kitobda biz oddiy jadvallarda ustunlarni nomlash uchun qisqartmani ishlatamiz, masalan: cname - xaridor nomi uchun. (mijoz name), odate - qabul qilingan sana uchun (buyurtma sanasi) Shuningdek, jadvalda asosiy kalit sifatida ishlatiladigan bitta raqamli ustun mavjud deb taxmin qiling.

1.1, 1, 2, 1.3 jadvallari aloqaning ma'lumotlar bazasini tashkil qiladi, bu uning ma'nosini tushunish uchun etarli darajada emas, ammo SQL-dan foydalanish bilan bog'liq muhim tushunchalar va amaliy xulosalarni o'z misolida aks ettirish uchun etarli darajada murakkab.

Siz har bir jadvalning birinchi ustunida jadval ichidagi satrdan satrgacha takrorlanmaydigan raqamlar mavjudligini ko'rishingiz mumkin. Ehtimol siz taxmin qilganingizdek, bu jadvalning asosiy kalitlari. Ushbu raqamlarning ba'zilari boshqa jadvallarning ustunlarida ham mavjud (bu erda tushunarli narsa yo'q), bu ma'lum bir asosiy kalit qiymatidan foydalanilgan satrlar va ushbu qiymat to'g'ridan-to'g'ri asosiy kalitda qo'llaniladigan satrlar o'rtasidagi munosabatni ko'rsatadi.

Masalan, Mijozlar jadvalidagi snum maydoni qaysi sotuvchi (sotuvchilar) ma'lum bir mijozga xizmat ko'rsatayotganligini aniqlaydi. Snum maydonining raqami sotuvchilar jadvaliga havolani o'rnatadi, unda ushbu sotuvchilar haqida ma'lumot beriladi. Shubhasiz, ushbu xaridorga xizmat ko'rsatadigan sotuvchi mavjud, ya'ni. Mijozlar jadvalidagi snum maydonining qiymati Sotuvchilar jadvalida mavjud. Bunday holda, biz tizim mos yozuvlar yaxlitligi holatida ekanligini aytamiz.

Jadvallarning o'zlari sotuvchilar, ularning mijozlari va buyurtmalari bilan bog'liq ishlarni amalga oshirish uchun SQL-dan foydalanishingiz mumkin bo'lgan holatlarda, biznes hayotidagi haqiqiy vaziyatlarni tasvirlashga mo'ljallangan. Keling, ushbu uchta jadvalning holatini biron bir vaqtda to'g'rilaymiz va jadvaldagi har bir maydonning maqsadini aniqlaymiz.

1.1-jadvaldagi ustunlarning izohi:

1.2-jadval quyidagi ustunlarni o'z ichiga oladi.

Va nihoyat, 1.3-jadval ustunlari.

Sizga maqola yoqdimi? Do'stlar bilan baham ko'ring: