O‘ZBEKISTON RESPUBLIKASI AXBOROT TEXNOLOGIYALARI VA KOMMUNIKASIYALARINI RIVOJLANTIRISH VAZIRLIGI MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI URGANCH FILIALI X. J. Raximboyev, SH. O. Sapayev, I.Z. Iskandarov MA’LUMOTLAR BAZASI O’quv qo’llanma Tavsiya etildi TATU Urganch filiali ilmiy-uslubiy kengashi tomonidan 5350400 –AKT sohasida kasb ta’limi. 5330501- Kompyuter injiniringi ("Kompyuter injiniring", "AT-servis"),5330600 – Dasturiy injiniring, 5330300 – Axborot xavfsizligi, Telekommunikatsiya texnologiyalari. yo’nalishlarida ta’lim olayotgan talabalarga Urganch 2020 УДК ББК Tavsiya etildi Universitet tahririy-nashriy kengashi tomonidan o’quv qo’llanma sifatida. Taqrizchilar: M.S.Sharipov, texnika fanlari nomzodi, dotsent; URDU Axborot texnologiyalari kafedrasi. X. J. Raximboyev, SH. O. Sapayev, I.Z. Iskandarov. Ma’lumotlar bazasi: o’quv qo’llanma; Toshkent axborot texnologiyalari universiteti Urganch filiali. – Urganch: TATUUF, 2020. – 139 b. ISBN Qo'llanmada ma'lumotlar bazalarining har xil turlari va ulardan foydalanishning tegishli usullari haqida umumiy ma'lumotlar keltirilgan. Ma'lumotlar bazalarining relyatsion modeli, SQL tilining asosiy tuzilmalari, normallashtirish printsiplariga va " obyektmunosabat" modelidan foydalanishga asoslangan ma'lumotlar bazalari tuzilishini loyihalash usullari tavsiflangan. Ma'lumotlar bazalarida tranzaktsiyalarning asosiy tushunchalari keltirilgan. 5350400 – AKT sohasida kasb ta’limi. 5330501 - Kompyuter injiniringi ("Kompyuter injiniring", "AT-servis"), 5330600 – Dasturiy injiniring, 5330300 – Axborot xavfsizligi, Telekommunikatsiya texnologiyalari. yo’nalishlarida ta’lim olayotgan talabalarga tavsiya etilgan. MUNDARIJA Muqaddima.................................................................................................................................................. 6 1. Ma’lumotlar bazasining maqsadi, vazifalari va asosiy tushunchalari. ............................................. 7 1.1. Asosiy tushunchalar. .......................................................................................................................... 7 1.2. MBBT asosiy xususiytalari va xossalari. ........................................................................................... 8 1.3. MBBT funktsiyalari. .......................................................................................................................... 9 1.4. Model haqida tushuncha...................................................................................................................10 1.5. Relyatsion, ierarxik va semantik tarmoq. .........................................................................................11 1.6. Satr va maydon tushunchalari. .........................................................................................................11 2. Ma’lumot bazasining arxitekturasi. Uch bosqichli arxitektura. .......................................................14 2.1. Ma’lumotlar bazasini boshqarish tizimlari .......................................................................................14 2.2. MB tillarini quvvatlash.....................................................................................................................14 2.3. MBBT sinflari. .................................................................................................................................15 2.4. MBBT tarkibi va strukturasi ............................................................................................................15 2.5. Xotira va tranzaksiyalar menedjeri ..................................................................................................16 2.6. Ma’lumotlar banki tarkibi ................................................................................................................17 2.7. OLTP-texnologiya............................................................................................................................19 2.8. OLAP-texnologiya ...........................................................................................................................20 2.9. Ma’lumotlar bazasini uch bosqichli arxitekturasi ............................................................................21 3. Ma’lumotlar bazasi modellari. Mohiyat-aloqa modeli. .....................................................................24 3.1. MB tizimlarini loyixalashda modelashtirish vositalari.....................................................................24 3.2. Loyixalash bosqichlari va modellashtirish ob’ektlari ......................................................................26 3.3. «Mohiyat-aloqa» modeli elementlari ...............................................................................................27 3.4. Binar aloqalarning uch turi. ..............................................................................................................30 3.5. Mohiyatlar ........................................................................................................................................32 3.6. Aloqalar ............................................................................................................................................34 4. Ma’lumotlar bazasida relyatsion model va munosabatlar. ...............................................................35 4.1. Ma’lumotlar bazasida relyatsion model tushunchasi. ......................................................................35 4.2. Relatsion model tuzilishi. .................................................................................................................35 4.3. Domen tushunchasi ..........................................................................................................................36 4.4. Munosabat, atribut, kortej va boshqa atamalar.................................................................................37 4.5. Muqobil atamalar .............................................................................................................................39 4.6. Kalitlar..............................................................................................................................................40 5. Relyatsion algebra va relyatsion hisoblash elementlari. ....................................................................41 5.1. Relatsion algebra ..............................................................................................................................41 5.2. Relatsion algebra amallari ................................................................................................................42 5.3. Munosabatlar ustidagi amallar .........................................................................................................43 6. Ma’lumotlar bazasini normallashtirish. Normal formalar 1NF, 2NF, 3NF va Kodd. ....................57 6.1. Mantiqiy loyixalash ..........................................................................................................................57 6.2. Jadvallarni normallashtirish .............................................................................................................58 6.2. Birinchi normal forma. .....................................................................................................................58 6.3. Takrorlanuvchi guruxlarni bartaraf etish. .........................................................................................59 6.4. Funktsional bog‘lanish tushunchasi. ................................................................................................62 7. SQL tili. SQL operatorlarini yozish. ...................................................................................................68 7.1. SQL tilining vazifalari ....................................................................................................................68 7.2. Interaktiv va qurilgan SQL. ...........................................................................................................70 7.3. NOANIK VA O’TKAZIB YUBORILGAN MA’LUMOTLAR .....................................................72 7.4. SELECT operatori ............................................................................................................................74 8. Ma’lumotlar manipulyasiya qilish. Oddiy so‘rovlar yaratish.........................................................76 8.1 SELECT ma’lumotlarni tanlash operatori .........................................................................................76 8.2. INSERT ma’lumotlarni kiritish operatori ........................................................................................83 8.3. DELETE o‘chirish operatori ............................................................................................................84 8.4. UPDATE ma’lumotlarni yangilash operasiyasi ...............................................................................86 9. SQL tili yordamida maʼlumotlarni tavsiflash.....................................................................................88 9.1. Jadvallarni yaratish...........................................................................................................................88 9.2. Jadvallarni o‘chirish .........................................................................................................................88 9.3. Jadvalni o‘zgartirish .........................................................................................................................88 9.4. Jadvallar uchun cheklanishlar ..........................................................................................................89 10. SQLda jarayonlar va standart funksiyalar.......................................................................................92 10.1. Saqlanadigan MySQL protseduralari .............................................................................................92 10.2. Saqlanadigan protseduralarning afzalligi nimada?.........................................................................92 10.3. CREATE PROCEDURE protseduralarni yaratish operatori .........................................................93 10.4. characteristic xarakteristikalar bloki ..............................................................................................94 10.5. MySQL: Murakkab operatorlar ......................................................................................................96 10.6. BEGIN ... END murakkab operatori sintaksisi ..............................................................................96 10.7. Operatorlar belgisi ..........................................................................................................................97 10.8. DECLARE bayonoti ......................................................................................................................97 11. Tranzaktsiyalarni boshqarish. So'rovlarni yaratish va qayta ishlash. .........................................103 11.1. Tranzaktsiya tushunchasi .............................................................................................................103 11.2. ACID - talablar .............................................................................................................................103 11.3. Tranzaktsiyalarni bajarishda muammolar ....................................................................................105 11.4 Tranzaktsiyalarni boshqarish.........................................................................................................110 12. Maʼlumotlar bazasini administratorlash va xavfsizligini taʼminlash. .........................................114 12.1. Xavfsizlik masalalari va MySQLga kirish imtiyozlari tizimi ...............................................114 12.2. GRANT va REVOKE komandalari sintaksisi ......................................................................114 12.3. GRANT misollari ..................................................................................................................119 12.4. Jadvaldagi imtiyozlarni bekor qilish .....................................................................................120 12.5. Funktsiyalar / protseduralarga imtiyozlar berish ...................................................................120 12.6. MySQLga yangi foydalanuvchilarni qo'shish .......................................................................121 12.7. GRANT komandasi ...............................................................................................................123 13. Maʼlumotlar bazasiga murojaatni tashkil etishda ODBC va C++dan foydalanish ..............127 13.1. Ulagichlar va API MySQL ....................................................................................................127 13.2. Tashqi API MySQL ..............................................................................................................128 13.3. MySQL PHP API ..................................................................................................................129 13.4. Uchta MySQL API larini taqqoslash.....................................................................................131 14. XML va ma'lumotlar bazasi (MySQL) .....................................................................................131 14.1. XML nima? ...........................................................................................................................132 14.2. XML funktsiyalari .................................................................................................................133 14.3. Xpath misollari ......................................................................................................................133 14.4. ExtractValue() - XML funktsiyasi ........................................................................................135 14.5. LOAD XML operatori ..........................................................................................................137 14.6. UPDATEXML operatori .......................................................................................................138 Adabiyotlar ro’yxati. .................................................................................................................................139 Muqaddima Zamonaviy ma'lumotlar bazalari bilan malakali ishlash qobiliyati kompyuter texnologiyalari sohasidagi har qanday mutaxassis uchun asosiy talablardan biridir. Ma'lumotlar bazasi texnologiyalarini o'zlashtirishda ularning nazariy asoslarini tushunish muhim rol o'ynaydi. Ushbu o'quv qo'llanma asosan talabalarni ma'lumotlar bazalarining asosiy tushunchalari bilan tanishtirishga qaratilgan. Unda turli xil ma'lumotlar bazalari va ulardan foydalanishning tegishli usullari haqida umumiy ma'lumotlar keltirilgan. Eng keng tarqalgan relyatsion ma'lumotlar bazalariga alohida e'tibor berilgan. Relyatsion ma'lumotlar bazalari bilan ishlash uchun amalda standart bo'lgan SQL tilining asosiy tuzilmalari tavsiflangan. Normallashtirish printsiplari bo'yicha ham, "obyekt-munosabat" modelidan foydalanishga asoslangan ma'lumotlar bazalari tuzilishini loyihalash usullari keltirilgan. Alohida bob ma'lumotlar bazalari bilan ishonchli ishlashni ta'minlashning asosiy vositasi bo'lgan tranzaktsiyalarni tavsiflashga bag'ishlangan. Va nihoyat, XML va ma'lumotlar bazasi texnologiyalariga va ma’lumotlarni taqsimlangan qayta ishlash tizimlariga umumiy yondashuv muhokama qilinadi. 1. Ma’lumotlar bazasining maqsadi, vazifalari va asosiy tushunchalari. 1.1. Asosiy tushunchalar. Keng ma’noda Ma’lumotlar bazasi (MB) deganda real dunyoning konkret ob’ektlari haqidagi ma’lumotlar to’plamini tushinish mumkin. Lekin ma’lumotlar xajmi oshib borishi bilan bu masalalarni xal etish murakkablashadi. Yuzaga kelgan muammo ob’ekt va ma’lumotlarni strukturalash, ya’ni tizimga solish yo’li bilan xal qilinadi. Ob’ekt – bu mavjud va farqlanishi mumkin bo’lgan narsadir. Ob’ektlarga tegishli bir qator ma’lumotlar borki, ularning to’plami MB bo’ladi. Masalan, xar bir akademik-litsey yoki kasb-hunar kolleji-bu ob’ektlar bo’lsa, ulardagi o’quvchilar haqidagi ma’lumotlar to’plami MBga misol bo’ladi. Xar qanday jiddiy MBning yaratilishi uning loyihasini tuzishdan boshlanadi. MO loyihalovchisining asosiy vazifasi ob’ektlar va ularni tavsiflovchi parametrlarni tanlash, ma’lumotlar orasidagi ma’lumotlarni o’rnatishdan iborat. MBni yaratish jarayonida, foydalanuvchi ma’lumotlarni turli belgilar bo’yicha tartiblashga va belgilarning turli birikmalari bo’yicha zarur ma’lumotlarni (tanlanmani) tez topish uchun imkoniyatlar yaratilishiga harakat qiladi. Bu ishlarni ma’lumotlar strukturalangan (tuzilmalangan) bo’lgandagina bajarish mumkin. Strukturalash – bu ob’ektlar va ma’lumotlarning o’zaro bog‘lanishi tasvirlash usullari haqidagi kelishuvni kiritishdir. 1-misol: strukturalanmagan ma’lumotlar. Shaxsiy ish №16493; Aliev Karim Ergashevich; tug‘ilgan sana 1 yanvar 1979 yil; Shaxsiy ish №16498; Bokiev Dilmurod Raxmatullaevich; tug‘ilgan sana 5 dekabr 1985 yil; Shaxsiy ish №16595; Zokirov Anvar Rashidovich; tug‘ilgan sana 15 may 1984 yil. 2-misol: strukturalangan ma’lumotlar. Shaxsiy ishi № Familiyasi Ismi Otasining ismi Tug‘ilgan sana 16493 Aliev Karim Ergashevich 01. 01. 79 16498 bokiev Dilmurod Raxmatullaevich 05. 12. 85 16595 Zokirov Anvar Rashidovich 15. 05. 84 Zamonaviy MB texnologiyasida MBni yaratish, unga xizmat ko’rsatish va foydalanuvchilarni MB bilan ishlashiga imkon yaratish maxsus dasturiy uskunalar yordamida amalga oshiriladi. Bunday dasturiy uskunalar yordamida amalga oshiriladi. Bunday dasturiy uskunalar majmuasi Ma’lumotlar bazasini boshqarish tizimlari (MBBT) deb ataladi. MBBT-MBni yaratish, uni dolzarb holatda ushlab turish, kerakli axborotni topishni tashkil etish va boshqa xizmat ko’rsatish uchun zarur bo’ladigan dasturiy va til vositalari majmuasidir. Ma'lumotlar bazasini boshqarish tizimi (MBBT) -bu dasturiy va apparat vositalarining murakkab majmui bo’lib, ular yordamida foydalanuvchi ma'lumotlar bazasini yaratish va shu bazadagi ma'lumotlar ustida ish yuritish mumkin. MBBT o’z maxsus dasturlash tillariga ham ega bo’lib, bu tillarga buyruqli dasturlash tillari deyiladi. MBBTga Oracle, Clipper, Paradox, FoxPro, Access va boshqalarni misol keltirish mumkin. 1.2. MBBT asosiy xususiytalari va xossalari. MBBT asosiy xususiyatlari - bu nafaqat ma'lumotlarni kiritish va saqlashda ishlatiladigan protseduralar tarkibi bo’lmasdan, ularning strukturasini ham tasvirlaydi. Ma'lumotlarni o’zida saqlab va MBBT ostida boshqariladigan faylga oldin ma'lumotlar banki, keyinchalik esa uni “Ma'lumotlar bazasi” dab yuritila boshlandi. Ma'lumotlarni boshqarish tizimi, quyidagi xossalarga ega: fayllar to’plami mantiqiy kelishuvni quvvatlaydi; ma'lumotlar ustida ish yuritish tili bilan ta'minlaydi; har xil to’xtalishlardan keyin ma'lumotlarni qayta tiklaydi; MBBT bir necha foydalanuvchilarning parallel ishlashini ta'minlaydi. 1.3. MBBT funktsiyalari. MBBT funktsiyalari tarkibiga yanada aniqroq qilib quyidagilar qabul qilingan: Tashqi xotirada bevosita ma'lumotlarni boshqarish. Bu funktsiya MBga bevosita kiruvchi ma'lumotlarni saqlash uchun kerakli strukturani ta'minlab tashqi xotiraga qo’shadi. MBBT ishlatishda mavjud fayl tizimi imkoniyatlari aktiv ravishda ishlatiladi. Rivojlantirilgan MBBTda foydalanuvchi istalgan holda MBBT fayl tizimini ishlatayapdimi bu haqda bilishi shart emas, va agar ishlataolsa, u holda fayllar tashkil qilingan bo’ladi. Xususiy holda MBga berkitilgan ob'ektlarni MBBT quvvatlaydi. Tezkor xotirani bufer bilan boshqarish MBBT odatda ancha katta hajmdagi MB bilan ish yuritadi. Bu hajm odatda tezkor xotiraning mumkin bo’lgan hajmidan еtarli darajada katta bo’ladi. Ma'lumki, agar ma'lumotlarning biror elementiga murojaat qilish kerak bo’lsa tashqi xotira bilan aloqa o’rnatiladi, lekin barcha tizim tashqi xotira qurilmasi tezligida ishlaydi. Bu tezlikni oshirishning amaliy yagona usulilaridan biri bu operativ xotiraga ma'lumotlarni buferizatsiya qilishdir. Tranzaktsiya bilan boshqarish Tranzaktsiya – bu qaralayotgan MBBT MB ustida ketma-ket operatsiyalarni bajararishidir, ya'ni ma'lumotlar bilan monipulyatsiya qilib ketma-ket operatsiyalar yordamida MBBTga ta'sir etishdir. Tranzaktsiya ma'lumotlar bazasini bir butun holatdan ikkinchi bir butun holatga o’tkazadi, yoki agar ma'lum sababga ko’ra tranzaktsiyaning biror holati bajarilmaydigan bo’lsa yoki tizimda biror xatolik yuz bersa, ma'lumotlar bazasi boshlang‘ich holatiga qaytadi. MBning mantiqiy butunligini quvvatlash uchun tranzaktsiya tushunchasi kerak bo’ladi. Jurnalizatsiya MBBT ga bo’lgan asosiy talablardan biri bu tashqi xotirada ma'lumotlarning ishonchli saqlanishidir. Ma'lumotlarning ishonchli saqlanishi deganda har qanday apparatli yoki dasturli to’tab qolishdan (sboydan) keyin MBBTda MBning oxirgi holatini qayta tiklashi tushuniladi. Odatda apparatli to’xtab qolish holati ikki xil bo’ladi: еngil to’xtab qolish, ya'ni bunda kompyuter ishlashi kutilmaganda to’xtashi (masalan, elektr toki manbaining o’chishi), ikkinchisi qattiq to’xtab qolish, bu tashqi xotirada ma'lumotlarning yo’qolib ketishi bilan xarakterlanadi. Dasturli to’xtab qolishlarga quyidagilarni keltirish mumkin: MBBTning to’satdan buzilishi bilan ishni tugatishi yoki foydalanuvchi dasturining avariya bilan tugallanishi bo’lib natijada ayrim tranzaktsiyalar tugallanmasdan qoladi. Har qanday holda ham MB qayta tiklash uchun qo’shimcha ma'lumotlarni joylashtirish kerak. Boshqacha qilib aytganda MB da ma'lumotlarning butunligini saqlash uchun saqlanadigan ma'lumotlarning to’liqligi talab qilinadi. Ma'lumotlarning ishlatilayotgan qismi qayta tiklanishi uchun alohida ishonchli saqlanishi lozim. Bunda to’liq ma'lumotlarni quvatlash uchun keng tarqalgan usullardan biri MB ning o’zgartirish jurnalini olib borish usuli ishlatiladi. 1.4. Model haqida tushuncha MB bilan ishlashga kirishishdan oldin ma’lumotlarni tasvirlash modelini tanlab olish kerak. U quyidagi talablarga javob berishi lozim: -axborotni kurgazmali tasvirlash; -Axborotni kiritishda soddalash; -axborotni izlash va tanlashda qulaylik; -boshqa omborga kiritilgan ma’lumotdan foydalanish imkoniyatining mavjudligi; -MBning ochiqligini ta’minlash (yangi ma’lumotlar va maydonlar qo’shish, ularni olib tashlash imkoniyatlari va hokazo). MB bitta yoki bir necha modellarga asoslangan bo’lishi mumkin. Xar qanday modelga o’zining xossalari (parametrlari) bilan tavsiflanuvchi ob’ekt sifatida qarash mumkin. Shunday ob’ekt ustida biror amal (ish) bajarsa bo’ladi. MB modellarining uchta asosiy turlari mavjud: 1.5. Relyatsion, ierarxik va semantik tarmoq. Relyatsion (lotin tilidagi relation-munosabat so’zidan olingan) modelda ma’lumotlarni saqlash uni tashkil etuvchi qismlari orasidagi munosabatlarga asoslangan. Eng sodda holda u ikki o’lchovli massiv yoki jadvaldan iborat bo’ladi. Murakkab axborot modellari ana shunday jadvallarning o’zaro bog‘langan to’plamidan iborat. MBning ierarxik modeli pastki pog‘onadagi yuqori pog‘onadagiga bo’ysinish tartibida joylashgan elementlar to’plamidan iborat bo’ladi va ag‘darilgan daraxt(graf)ni tashkil etadi. Ushbu model sath, tugun, bog‘lanish kabi parametrlar bilan tavsiflanadi. Uning ishlash tamoyili shundayki, quyi sathdagi bir necha tugunlar bog‘lanish yordamida yuqoriroq sathdagi bitta tugun bilan bog‘langan bo’ladi. Tugun - bu ierarxiyaning berilgan sathida joylashgan elementning axborot modelidir. MBning semantiq tarmoq modeli ierarxik modelga o’xshashdir. U xam tugun, sath, bog‘lanish kabi asosiy parametrlarga ega. Lekin semantiq tarmoq modelida turli sathdagi elementlar orqali «erkin», ya’ni «har biri xamma bilan» ma’noli bog‘lanish qabul qilingan. 1.6. Satr va maydon tushunchalari. Ko’pchilik MBlar jadval tuzilmasiga ega. Unda ma’lumotlar adresi satr va ustunlar kesishmasi bilan aniqlanadi. yozuvlar deb ataladi. MBda ustunlar-maydonlar, satrlar esa Maydonlar MBning tuzilmasini, yozuvlar еsa, unda joylashgan ma’lumotlarni tashkil etadi. Maydonlar – MB tuzilmasining asosiy еlementlaridir. Ular ma’lum xususiyatlarga ega bo’ladilar. Har qanday maydonning asosiy xususiyati uning o’zunligidir. Maydon o’zunligi undagi belgilar soni bilan ifodalanadi. Maydonning yana bir xususiyati, uning nomidir. Maydonda uning nomidan tashqari yana imzo xususiyati ham mavjud. Imzo-ustunning sarlavhasida aks ettiriladigan axborotdir. Uni maydon nomi bilan aralashtirib yubormaslik lozim. Agar imzo berilmagan bo’lsa sarlavhada maydon nomi yozib quyiladi. Turli tipdagi maydonlar turli maqsadlarda ishlatiladi va turli xossalarga ega bo’ladi. Maydonlarning xususiyati bilan tanishib chikamiz: 1. Oddiy matn maydoni. Belgilar soni 255 dan oshmasligi kerak. 2. MEMO-katta o’lchamli matn maydoni. Belgilar soni 65535dan oshmasligi shart. Oddiy matn va MEMO maydonida hisob ishlarini bajarib bo’lmaydi. 3. Sonli maydon. Sonli ma’lumotlarni kiritishga xizmat qiladi va hisob ishlarini bajarishda foydalaniladi. Bu maydon 1,2,4,8 va 16 baytli bo’lishi mumkin. 4. Sana va vaqt maydoni. Bu maydon sana va vaqtni bichimlangan holda saqlab quyish imkonini beradi (01. 06. 01 20:29:59). 8bayt o’lchamga ega. 5. «Pul birligi» nomi bilan ataluvchi maydon. Bu maydondan hisob kitob ishlarini yuritishda foydalaniladi. 6. Hisoblagich maydoni. Bu maydon 4 bayt o’zunlikka va avtomatik ravishda ma’lum songa oshib borish xususiyatiga ega. Ushbu maydondan yozuvlarni nomerlashda foydalanish qulaydir. 7. Mantiqiy amal natijasini saqlovchi maydon. Bu maydon «rost» (true) yoki «yolg‘on» (false) qiymatni saqlaydi. Maydon o’lchami 1bayt. 8. OLE-nomi bilan yurituvchi maydon. Bu maydon Excel jadvalini, Word xujjatini, rasm, ovoz va boshqa shu kabi ma’lumotlarni ikkilik sanoq sistemasida saqlaydi. Maydon o’lchami 1Gbaytgacha. 9. Giperssilka maydoni. Bu maydon belgi va sonlardan iborat bo’lib, biror fayl yoki saytga yo’l ko’rsatadi. 10. Qiymatlar ro’yxatidan iborat bo’lgan maydon. Bu maydon bir qancha qiymatlardan iborat bo’lgan ro’yxatdan tanlangan aniq bir qiymatni saqlaydi. Jadvallar orasidagi munosabatlar ishonchli ishlashi va bir jadvaldagi yozuv orqali ikkinchi jadvaldagi yozuvni topish uchun jadvalda alohida maydon-unikal maydon bo’lishini ta’minlash kerak. Unikal maydon-bu qiymatlari takrollanmaydigan maydondir. Misol sifatida talabalar haqidagi ma’lumotlarni saqlovchi ma’lumotlar bazasining bir qismini keltiramiz. Maydon nomi Talabaning ombordagi o’rni Talaba F. I. Sh. Talabaning tug‘ilgan joyi haqida Talabaning tug‘ilgan kuni …………………………. Talabaning kursi Talabaning rasmi Maydon xususiyati Maydon xajmi Hisoblagich maydoni 4 bayt Oddiy matnli maydon 255 belgi Oddiy matnli maydon 255 belgi Sana va vaqt maydoni 8 bayt ……………………… Qiymatlar ro’yxatidan iborat bo’lgan maydon OLE-nomi bilan yuritiluvchi maydon. Talaba haqida qo’shimcha MEMO-katta o’lchamli ma’lumotlar matn maydoni 1G bayt 65535 belgi 2. Ma’lumot bazasining arxitekturasi. Uch bosqichli arxitektura. 2.1. Ma’lumotlar bazasini boshqarish tizimlari Ma’lumotlar bazasini boshqarish tizmlari (MBBT) ma’lumotlar bazasiga bo’lgan barcha murojatlarni boshqaruvchi dasturiy ta’minotdan iborat. MBBT – ma’lumotlar bazasini boshqaruvchi va baza bilan ishlashni ta’minlovchi dasturiy kompleksdir. MBBT axborot tizimi tarkibidagi maxsus dastur kabi qo’llanilmasada axborot tizimi tarkibida ma’lumotlarni boshqarish bilan bog‘liq bo’lgan kombinatsiyalashgan qismi sifatida qo’llaniladi. Maslan, internetmagazin, katalog, qidirish tizimi, buxgalteriya dasturlari. Adabiyotlarda an’anaviy xolda eslatilmagan bo’lsa relyatsion ma’lumotlar bazasi - tablitsalar asosida ma’lumotlar bazasini nazarda tutiladi. Xozirgi vaqtda ma’lumotlar bazasi tushunchasi SQL - Structured Query Language – strukturalashgan so’rovlar tili bilan chambarchas bog‘liq. Eng ko’p qo’llaniladigan MBBT lar maxsuloti ishlab chiquvchilar: Oracle, Firebird, MS SQL Server, IBM DB2, Interbase, MySQL, FoxPro. 2.2. MB tillarini quvvatlash Ma'lumotlar bazasi bilan ishlashda ma'lumotlar bazasi tili deb ataluvchi maxsus til ishlatiladi. Zamonaviy MBBT MB bilan ishlash uchun barcha kerakli vositalarni yagona birlashgan til qo’llab quvvatlaydi. Hozirgi kunda relyatsion MBBT uchun keng tarqalgan standart til - bu SQL (Structured Query Language) tilidir. SQL tili relyatsion MB sxemasini aniqlaydi va ma'lumotlar ustida (manipulyatsiya) ish yuritadi. Unda MB ob'ekti nomlariga (relyatsion MB uchun – jadval nomi va uning ustunlari) o’zgartirishlar kiritish SQL tili kompilyatori yordamida amalga oshiriladi. Bundan tashqari uning ichki identifikatorlariga o’zgartirishlar kiritishni ham amalga oshiradi. MBBT ning ichki qismi (yadrosi) jadval nomlari va uning ustunlari bilan umuman ishlamaydi. SQL tili o’z ichiga MB butunlik chegarasini aniqlashning maxsus vositasini oladi. MBning butunligini tekshirishni ta'minlaydi. MBni modifikatsiya qilish uchun kompilyatsiya vaqtida SQL kompilyatori mos dasturiy kodni generatsiya qiladi. SQL tilining maxsus operatorlari MB «ko’rinish»lari deb ataladigan jadvallarni aniqlashga imkon beradi. Bu «ko’rinish»lar MB da nomlangan ustunlardan iborat so’rovlar shaklida saklanadi (relyatsion MB ga nisbatan ixtiyoriy so’rovning natijasi jadval bo’ladi). Foydalanuvchi uchun «ko’rinish», xuddi MB saqlanadigan ixtiyoriy bazaviy jadvaldek, jadvaldir, lekin «ko’rinish»lar yordamida konkret foydalanuvchi uchun MB ko’rinishini chegaralash yoki kengaytirish mumkin. «Ko’rinish»larni ko’llash SQL tili darajasida ham amalga oshiriladi. MB obektiga avtorizatsiya ruxsati SQL tilining maxsus opreatorlar to’plami yordamida amalga oshiriladi. MB ob'ektlariga ostuplar SQL operatorlarining maxsus tuplami asosida yaratiladi. Bu erdagi goya, xar xil foydalanuvchilar turli polnomochiyalarga ega bulishi kerak. MB sining jadvalini yaratgan foydalanuvchi, shu jadval bilan ishlash polnomochiyalarini tulik tuplamiga ega. Bu tuplamga boshka foydalanuvchilarga barcha yoki ba'zi polnomochiyalarni berish xam kiradi, xudi shunday polnomochiyalarni berish polnomochiyasi xisobga olgan xolda. Foydalanuvchi polnomochiyalari maxsus jadval-kataloglarda yozilgan buladi va ularning kontroli SQL tili darajasida xam amalga oshiriladi. 2.3. MBBT sinflari. Dastlabki MBBT larga quyidagilar kiradi: Invertirlangan ro’yxatlar asosidagi tizimlar Ierarxik tizimlar. Tarmoqli tizimlar Nisbatan yangi MBBT lar: Relyatsion Ob’ektga -mo’ljallangan Yuqoridagi ikkitasi aralashmasi. Ma’lumotlarni saqlashni tashkil qilinishi va ma’lumotlar bazasiga murojat usuliga qarab MB va MBBT ni quyidagi turlarga ajratiladi: 1. lokal (personal) – MB va MBBT bitta kompyuterda joylashadi va tarmoqda ishlash imkoniga ega emas; 2. tarmoq (integrallashgan) – MB va MBBT lar tarmoqda serverda joylashadi, murojat qiluvchi ilova esa foydalanuvchi kompyuterida joylashadi; 3. taqsimlangan ma’lumotlar bazasi – MB tarmoqdagi turli kompyuterlarda joylashadi, MBBT esa ular ustidan nazoratni olib boradi. Foydalanuvchilar kompyuteridagi ilovalar esa MBBT ga so’rovlar yuborib natijalarni oladi. 2.4. MBBT tarkibi va strukturasi Ma’lumotlar bazasini boshqarish tizimi (MBBT) – bu dasturiy va til vositalari bo’lib, ko’p sonli foydalanuvchilar tomonidan hamkorlikda ma’lumotlar bazasini yaratish, ishlatish va foydalanish ishlari uchun mo’ljallangan. 1. Ma’lumotlarni saqlash joyi va metama’lumotlar 2. xotira menedjeri 3. Tranzaksiyalar menedjeri Sxemaning pastki qismida – ma’lumotlarni saqlash joyi. Qabul qilinganidek sxemaning disk shaklidagi komponentlari ma’lumotlarni saqlash joyini bildiradi. Joriy xolda bu komopnent faqat ma’lumotlarni emas, balki ma’lumotlar strukturasi xaqidagi informatsiyani tashkil qiluvchi metama’lumotlarni ham o’z ichiga oladi. Masalan, agar u relyatsion MBBT bo’lsa metama’lumotlar tarkibiga munosabatlar (jadval) nomlari, munosabatlardagi atributlar nomlari kiradi. Ko’pincha MBBT ma’lumotlar indeksini qo’llab quvvatlaydi. Indeks– bu ma’lumotlar strukturasi bo’lib ma’lumot elementini tez topishga imkon beradi. Masalan, xisob raqami va balansini saqlovchi munosabat xisob – raqam indeksiga ega bo’lishi mumkin. Bu xisob raqami ma’lum bo’lganda balansni tez topish imkonin beradi. Indekslar – saqlanadigan ma’lumotlar qismi, tavsif esa qaysi atributlar indekslarga egaligini ko’rsatadi. 2.5. Xotira va tranzaksiyalar menedjeri Xotira menedjerini ko’rib chiqamiz. Uning vazifasi ma’lumotlar bazasidan talab etilgan ma’lumotni olish va tizimda yuqori daraja talabi asosida bazadagi ma’lumotni o’zgartirish. Navbatdagi komponent so’rovlar protsessori yoki so’rovlar menedjeri deb ataladi. Unig vazifasi – talab etilgan amalni bajarishni eng qulay usulini topish va xotira menejeriga mos buyruqni еtkazish. Bu еlement faqat so’rovlarni qayta ishlamaydi, shu bilan birga ma’lumotlar, metama’lumotlarni o’zgartirishni ham talab etadi. Tranzaksiyalar menedjeri komponentitizimni butunligi uchun javob beradi. U ko’plagan so’rovlarni bir vaqtda bajarishni ta’minlaydi va tizim ishdan chiqqanda ma’lumotlar ximoyasini ta’minlaydi. U so’rovlar menjeri bilan o’zaro aloqada bo’ladi, ya’ni u joriy so’rov qanday ma’lumotlarga ta’sir qilishini bilishi va zarur bo’lganda ba’zi so’rov yoki amallarni bajarilishini kechiktirish mumkin. U xotira menedjeri bilan ham o’zaro aloqada bo’ladi, chunki ma’lumotlarni ximoyalash sxemasi tarkibiga o’zgartishlashni qayd qilish fayli ham kiradi. Oddiy MB tizimida xotira menedjeri bazavoy operatsion tizimni fayl tizimi bo’lishi mumkin. Xotira menedjeri2 ta komponentdan iborat: • bufer menedjeri. U asosiy xotirani boshqaradi. • fayl menedjeri. U fayllarni diskda joylashuvini nazorat qiladi va fayldan bufer menejiri so’rovlariga mos xolda blok yoki bloklarni oladi. MBBT ma’lum amallarni bajarilishini kafolatlashi kerak. Amalni natijasi, xatto tizimga jiddiy shikast etganda ham yo’qolmasligi muxim. Tiipk MBBT foydalanuvchiga bir necha so’rovlarni bitta tarnzaksiya shaklida gruppalash imkoniyatini yaratadi. Tranzaksiya– bu yagona butun shaklda ketma ket bajariluvchi amallar guruxidir. Ko’pincha MB ko’plagan tarnzaksiyalarni parallel bajarilishini ta’minlaydi (masalan, bir nechta bankomatlarga bir vaqtda xizmat ko’rsatish). Bunday tranzaksiyalarni barchasin bajarilishini kafolatlash – MBBT ning tranzaksiyalar menedjeri deb taluvchi komponentining vazifasidir. Tranzaksiyalar bajarilishiga bo’lgan asosiy talablar (ular ACID – xossa deb ataladi): • atomarlik. Ya’ni tranzaksiyani xammasi bajarilishi yoki xech biri bajarilmasligi talab etiladi. Masalan, bankomatdan pulni olish va mijozning xisobiga mos debetni kiritish yagona atomar ttranzaksiya bo’lishi kerak. Bu amallarni aloxida bajarilishiga yo’l qo’yilmaydi. • ziddiyatsizlik. Aviatsion MB uchun ziddiyatsizlikka misol samolyotda xech bir o’rin 2 ta yo’lovchi uchun bron qilinmasligi kerak. • izolyatsiya. 2 ta yoki undan ko’p tranzaksiyalar parallel bajarilayotgan ularni natijasi bir biridan izolyatsiya qilinishi lozim. Ya’ni 2 ta tranzaksiyani ketma ket bjarilishidagi natija, ular ketma ket bajarilganda yuz bermaydigan natijaga olib kelmasligi kerak. Masalan, agentlar samolyotda bitta bo’sh o’rin qolganda bilet sotishda ulardan faqat bittasini so’rovi qanoatlantirilishi, ikkinchisiniki esa inkor etilishi kerak. Chunki parallel amal natijasida bitta o’ringa 2 ta bilet sotilishi mumkin emas. • vaqt bo’yicha davomiylik. Agar tranzaksiya tugagan bo’lsa, uning natijasi tizim buzilishi natijasida yo’qotilmasligi kerak. 2.6. Ma’lumotlar banki tarkibi 1. Informatsion komponenta. Informatsion komponentaning asosiy qismi (yadrosi) ma’lumotlar bazasi xisoblanadi. Qoidaga ko’ra, ma’lumotlar bazasiga faqat predmet sohasidagi ma’lumotlar emas, shu bilan birga ma’lumotlar bazasini tavsiflovchi ma’lumotlar ham kiradi.o’z strukturasini tavsifi sxema deb ataladi. 2. Ma’lumotlar bankining dasturiy vositalari. Ma’lumotlar bankining dasturiy vositasi axborot tizimining faoliyati davomida uning barcha qismlarining o’zaro aloqasini ta’minlaydi. Dasturiy vositaning asosi sredstv - MBBT. Uning yadrosi ma’lumotlarni krirtish, chiqarish, qayta ishlash va saqlashni ta’minlaydi, hamda tizimni sozlash va testlashni amalga oshiradi. MBBT tarkibiga kiruvchi translyatorlar MBBT da ishlatiladigan til vositalarini kompilyatsiya va interpretatsiya amallarini bajaradi. Utilitlar MB ni tiklash, MBn faoliyati xaqidagi statistikani olib borish kabi yordamchi funksiyalarni bajaradi. MBBT biror operatsion tizim muxitida ishlaydi va ma’lumotlar bankiga murojat etganda o’zaro aloqada bo’ladi.ya’ni OT ma’lumotlar banki tarkibiga kiradi deb xisoblash mumkin. Amaliy dasturlar echilayotgan masalaga mos xolda ma’lumotlar bazasiga bo’lgan so’rovlarni qayta ishlaydi. 3. Ma’lumotlar bankining til vositalari. Bu ma’lumotlar bankining muxim komponenti xisoblanadi. Chunki ular foydalanuvchi va ma’lumotlar banki o’rtasidagi interfeysni ta’minlaydi. Til vositalari yuqori darajali tid xisoblanadi, bular: Ma’lumotni tavsiflash tillari (MTT), DDL (Data Definition Language); Ma’lumotlarni manipulyatsiyalash (boshqarish) tillari (MMT), DCL (Data Control Language). MTT tarkibiga quyidagilar kiradi: Sxemalarni tavsiflash tili; Saqlanadigan ma’lumotlarni tavsiflash tili; Tashqi ma’lumotlarni tavsiflash tili. MTT protsedurali va noprlseduraliga bo’linadi. Protsedurali til bilan ishlaganda natijani olish uchun qaysi amallar qaysi ob’ektlar ustida bajarilishi ko’rsatish zarur. Noprotsedurali tilda qanday olish emas nimani olish kerakligi ko’rsatiladi. Zamonaviy MBBT lar ikkala turdagi MTT ga ega. Ma’lumotlar bankining texnik vositalari. Qo’llaniladigan texnik vositalar ma’lumotlar bazasi xajmi va uning strukturasiga bog‘liq aniqlanadi. Ma’lumotlar bankida odatda universal EHM, ma’lumotlar bazasiga ma’lumotlar kiritish va chiquvchi ma’lumotlarni tasvirlash uchun perefirik qurilmalar qo’llaniladi. Ma’lumotlar banki tarmoqda joylashganda mos texnik vositalar talab etiladi. Ma’lumotlar bankining tashkiliy-metodik (xujjatlar) vositalari. Bunga ma’lumotlar banki bilan ishlovchi turli kategoriyadagi foydalanuvchilar uchun mo’ljallangan instruksiya beruvchi metodik va reglament beruvchi materiallar kiradi. Ma’lumotlar banki administratori. Bir yoki ko’p sonli mutxassislar bo’lib, ma’lumotlar bankini yaratish, faoliyatini yuritish va rivojalantirishini ta’minlaydi. MBBT dan ikki gurux shaxslari foydalanadi: 1. Chekli yoki oddiy foydalanuvchilar; 2. MB administratori; MB administratorini xizmat doirasiga quyidagi ishlar kiraddi: a) Predmet sohani tahlili va foydalanuvchilar va axborotni o’rnini aniqlash; b) Ma’lumotlarni tuzilishini loyihalash va ularni takomillashtirish; c) Qo’yilgan topshiriqlar va ma’lumotlarni bir butunligini ta’minlash; d) MB ni yuklash va yuritish; e) Ma’lumotlarni himoya qilish; f) MB ni tiklashni ta’minlab berish; g) MB ga murojaatlarni yiqish va statistik qayta ishlab berish; h) MB ga ko’p foydalanuvchilar rejimida ishlaganda, ma’lumotlarni o’chib ketishidan ximoya qilish; i) Texnik vositalar nosoz bo’lib ishdan chiqqanda, ma’lumotlarni saqlash va qayta tiklash ishlarini bajarish; 2.7. OLTP-texnologiya OLTP (OnLine Transaction Processing) — tranzaksiyalarni onlayn qayta ishlash. Tarnzasyailar bilan ishlovchi tizimdagi MB larda tarnzaksiyalar xajmi katta emas, biroq tranzaksiyalar oqimi katta. Bunda tizim foydalanuvchiga maksimal tezkorlik bilan javob bershi talab etiladi. OLTP atamasi tizimlarga (ilovalarga) nisbatan ham qo’llaniladi. OLTPtizimlar real vaqt rejimida ma’lumotlarni (amallar, xujjatlar) kiritish, strukturali saqlash qayta ishlash uchun mo’ljallangan. Qo’llanilishi OLTP-ilovalar ko’pgina soxalardagi keng spetrdagi masalalarni qamrab oladi – bank va birja operatsiyalari, ishlab chiqarishda – konveyrda detal o’tishini qayd qilish, veb sapytning tashrif buyuruvchisini statistikada qayd qilish, buxgalteriya va ombor xisobi va x.k. OLTP ilovalari qoidaga ko’ra ma’lumotlarni qayti ishlash bilan bog‘liq bo’lgan masalalarni avtomatlashtiradi. Maslan, buyurtmalarni kiritish, bank tarnzaksiyalari. OLTP-tizimlar qisqa vaqt davomida ko’p sonli tranzaksiyalarni bajarish uchun loyixalanadi, rostlanadi va optimallashtiriladi. Qoidaga ko’ra bu unchalik moslashuvchanlik talab etilmaydi. Ko’pincha mma’lumotlarni kiritish, modifikatsiyalash, o’chirish va operativ xisobotni yaratish uchun fiksirlangan sonli ishonchli va xavfsiz metodlariga ega. Effektivlik ko’rsatgichi bir sekundda bajarilgan tranzaksiyalar miqdoridan iborat. Odatda OLTP-tizimlari analitik imkoniyati cheklangan (yoki umuman yo’q). Talablar Ma’lumotlarning kuchli normallashtirilgan modeli. Xatolik yuz berganda, tranzaksiya to’laligicha bekor qilinishi va tizim tranzaksiya boshlanishidagi xolatiga qaytishi lozim. Ma’lumotlarni real vaqtda qayta ishlash. Afzalliklari va nuqsonlari OLTP-tizimlar katta bo’lmagan diskret tranzaksiyalar uchun optimallashtirilgan. Biror kompleks ma’lumotlar so’rovi (masalan, ma’lum tovarni ma’lum filialda kvartallar bo’yicha sotish dinamikasi) analitik ilovalar (OLTP) uchun xarakterli. Bitta shunday so’rovni bajarish uchun ko’p vaqt va kompyuter resurslari zarur bo’ladi. Bu esa joriy tranzaksiyani bajarilishi sekinlatadi 2.8. OLAP-texnologiya Tavsif va tushunchalar OLAP (On-Line Analytical Processing )— еchim qabul qilish jarayonini qo’llab quvvatlash maqsadida ko’p o’lchamli ma’lumotlarni yig‘ish, saqlash va tahlil qilishnig metod va vositalaridan foydalanuvchi ma’lumotlarni operativ taxliliy qayta ishlovchi texnologiya. OLAP (angl. OnLine Analytical Processing, real vaqtda analitik tahlil) — bu xisobot va xujjatlarni yaratish va dinamik tasvirlash amallaridan iborat ma’lumotlarni qayta ishlash texnologiyasidir. Taxlilchilarning MB ga bo’lgan murakkab so’rovlarini tez qayta ishlash uchun qo’llaniladi. Yechim qabul qilish jarayonini intensiv qo’llab quvvatlash zaruriyati yangi turdagi instrumentlarni paydo bo’lishiga olib keldi. Ma’lumotlarini operativ taxlil qilishning tizimi (OLAP) deb ataluvchi ushbu instrumenal vosita еchim qabul qilishni qo’llab quvvatlash, biznesni modellashtirish va amallarni taxlil qilish uchun yangi taxlil muxitin bilan a’minlaydi. Barcha OLAP tizimlar 4 ta asosiy xarakteristkaga ega: Barcha OLAP tizimda ma’lumotlarni ko’p o’lchamli taxlil texnologiyasi qo’llaniladi. Barcha OLAP izimlar ma’lumotlar bazasini keng qamrovli qo’llab quvvatlaydi. OLAP tizimlar foydalanuvchilar uchun oddiy va qulay bo’lgan grafik interfeysga ega. OLAP tizimlarda klient/server texnologiya qo’llaniladi. OLAP so’rovlari So’rovlarni qayta ishlash uchun OLAP texnologiyani qo’llashni maqsadi — bu tezkorlik. Relyatsion MB larda ob’ektlar xaqidagi ma’lumotlar yaxshi normallashtirilgan aloxida jadvallarda saqlanadi. Bu struktura operatsion MB lar uchun qulay, biroq bunday MB da murakkab ko’p jadvalli so’rovlar nisbata sekin bajariladi. So’rovlar (o’zgartirishmas) uchun eng qulay model bu ko’p o’lchamli MB xisoblanadi. OLAP tezda relyatsion MB ni tasvirini oladi va uni uni fazoviy model shaklida strukturalashtiradi. Ishchi ma’lumotlardan yaratilgan OLAP-struktura OLAP-kub deb ataladi. Kub jadvallarni yulduz sxemasini qo’shishi orqali yaratiladi. “Yulduz” markazida kalit ma’lumotlar joylashgan markazida faktlar jadvali joydashadi. Bu asosida so’rovlar amalga oshiriladi. O’lchovlar joylashgan ko’plagan jadvallar fakt jadvaliga birlashadi. 2.9. Ma’lumotlar bazasini uch bosqichli arxitekturasi Ma’lumotlar bazasini boshqarish tizimini qanday bo’lishini (qurilishi) o’rganishdagi ilmiy izlanishlar, ularni amalga oshirishni xilma xil usullarini taklif qildi. Bulardan eng hayotiysi, amerika standartlashtirish kommiteti ANSI (American National Standarts Institute) tomonidan taqdim etilgan MBni uch bosqichli tashkil qilish bo’lib chiqdi. Predmet sohasi Alohida foydalanuvchilar MB Administratori MA’LUMOTLARNING INFOLOGIK MODELI Predmet sohasining umulashgan, biror EHM yoki MBBT ga bog‘liq bo‘lmagan tavsifi (ma’lumotlar to‘plami, tipi, aloqalari va b.) MA’LUMOTLARNING DATALOGIK MODELI Opisanie na yazыke konkretnoy SUBD MA’LUMOTLARNING FIZIK MODELI Saqlanadigan ma’lumotlarning tavsifi MB 1. Tashqi modellar – eng yuqori bosqich, bunda har bir model o’zini ma’lumotlar tasvir qabul qiladi. Har bir ilova, o’ziga kerakli zarur bo’lgan ma’lumotlarni ko’radi va qayta ishlaydi. Masalan, ishchilarni malakasi bo’yicha taqsimlash tizimi, xizmatchi malakasi haqidagi ma’lumotlarni ishlatadi, uni oklad, manzili, telefoni haqidagi axborotlar qiziqtirmaydi va aksincha, oxirgi ma’lumotlar xodimlar bo’limi qism sistemasida ishlatiladi. 2. Konseptual bosqich – markaziy boshqarish zvenosi bo’lib, bunda MB eng umumiy holda tasvirlanib, u shu MB bilan ishlaydigan barcha ilovalar ishlatiladigan ma’lumotlarni qamrab oladi. Umuman konseptual bosqich MB yaratilgan predmet sohani umumlashgan modelini akslantiradi. Bu model ob’ektlarning muhim xossalarini akslantiradi. 3. Fizik bosqich – fayllarda joylashgan ma’lumotlarni tashqi axborot saqlovchilarida joylashishini belgilaydi. Bu arxitektura ma’lumotlar bilan ishlaganda mantiqiy va fizik mustaqillikni ta’minlab beradi. Mantiqiy mustaqillilik bitta ilovani o’zgartirish, shu baza bilan ishlaydigan boshqa ilovani o’zgartirmasdan amalga oshirishni bildiradi. Fizik mustaqiliylik, saqlanuvchi ma’lumotlarni bir qattiq diskdan boshqasiga ko’chirganda uni ishlash qobiliyatini saqlab qolgan holda o’tkazishni bildiradi. 3. Ma’lumotlar bazasi modellari. Mohiyat-aloqa modeli. 3.1. MB tizimlarini loyixalashda modelashtirish vositalari. MB tizimlarini loyixalashda modelashtirishning turli vositalari qo’llaniladi, ya’ni bitta loyixalanayotgan tizim doirasida turli maqsad uchun mo’ljallangan modellar zarur bo’ladi. 1975 yil nashir qilingan ANSI/XZ/SPARC xisobotida MB tizimining ko’p pog‘onali konsepsiyasi tan olingan va MB ni tasvirlash uchun maxsus konseptual daraja zarurligi aytib o’tilgan. Bundan tashqari 2 ta daraja aytib o’tilgan: bu tashqi va ichki daraja. Har bir arixitekturaviy darajada ma’lumotlarning u yoki bu modeliqo’llanilishi nazarda tutilgan. Bundan tashqari, tashqi (amaliy, foydalanuvchiga tegishli) darajada bunday modellar juda ko’p bo’lishi mumkin. Ular asosida tavsiflanadigan modellar, hamda sxemalar mosxolda tashqi, konseptual va ichki deb ataladi. Ma’lumki, loyixalashning asosiy maqsadi konkret ma’lumotlar bazasini qurishdan iborat bo’lib, ushbu ma’lumotlar bazasi loyixalovchining predmet sohasi haqidagi va ushbu MB orqali еchiladigan foydalanuvchilar masalalari haqidagi tasavvurlarini o’zida mujassamlashtiradi. Ma’lumotlar bazasiga konkret modelning natijasi sifatida qarash orqali, biz pritsiplarni aniqlash (qanday baza bo’lishi kerak) bosqichini ushbu prinsiplarni konkret MBBT, Operatsion tizim va dasturlash muxitida amalga oshirish bosqichidan ajaratish orqali bosqichlar tartibini o’rnatamiz. Amaliyotda ma’lumotlar bazasini amalga oshirish va ularni qurish prinsiplari orasida doimo tafovut kuzatiladi. Tafovut turli xil sabablar oqibatida yuzaga keladi, biroq ko’pincha bu ba’zi prinsipial cheklovlardan yaqqol va noyaqqol voz kechish, masalan ma’lumotlar modeliga yoki qayta ishlash algoritmlariga qo’yilgan cheklovlardan voz kechish natijasida yuzaga keladi. Abstrakt darajada loyixalashni fizik amalga oshirish darajasidan ajratishni muximligi shundaki, prinsiplarni e’lon qilish orqali biz qo’llanilishi soxasini chegaralab olamiz. Birinchidan, masalani o’lchami va murakkabligi shu darajagacha qisqartirilishi lozim, bunda mavjud sharoitda (mavjud resurslar, loyixachining malakasi, foydalanuvchilarning ko’nikmalari va boshqa) MB ni amalga oshirish imkoni mumkin bo’lishi lozim. Ikkinchidan MB turli foydalanuvchilar tomonidan ko’p qirrali foydalanish uchun yaratilgan va uni loyixalash bosqichida inobatga olingmagan shartlarni keyinchalik amalga oshirish muvaffaqiyatsizlikka olib kelmasligi lozim. Ma’lumotlar bazasini loyixalash — bu o’zaro bog‘liq tavsiflar tizimini yaratishning tartiblangan va formallashgan bosiqichdir. Ya’ni bu tizim predmet soxaning modeli bo’lib, ma’lumotlar bazasida saqlanayotgan ma’lumotlarni predmet soxasidagi ob’ektlar bilan bog‘liqligini ta’minlaydi. Ushbu tavsiflarning amaliy ahamiyati shundan iborat, MB da ma’lumotlarni saqlash shakli (ma’lumotlarni xotirada fizik joylashuvi va ularni izlash mexanizmi) ) xaqida tasavvurga ega bo’lmagan foydalanuvchi bazaga so’rov berish orqali predmet sohasini ob’ektining real xolati xaqidagi ma’lumotni olish imkoniga ega bo’lishi kerak. Loyixalash predmet sohasini taxlil qilish va loyixalanayotgan tizimga qo’yilgan funksional va boshqa talablarni aniqlashdan boshlanadi. Loyixalash odatda odam (odamlar guruxi) — tizim taxlilchisi (amalda ko’pincha MB administratori). U maxsus tayinlagan xodim, yoki еtarli malakaga ega bo’lgan MBning bo’lg‘usi foydalanuvchisi bo’lishi mumkin. Dastlab tizim taxlilichisi foydalanuvchilar bilan suxbatlashish orqali olingan aloxida tasavvurlarni va ma’lumotlar xaqidagi o’zining tasavvurlarini to’plab yaratiladigan ma’lumotlar bazasini umulashtirilgan norasmiy tavsifini yaratadi. Xamma uchun tushunarli bo’lgan odatiy tildagi so’zlar, matematik ifodalar, jadvallar, graflar va boshqa vositalar orqali bajarilgan bu tavsif infologik model deb ataladi. Ushbu tushunib olishda odamga mo’ljallagan model ma’lumotlarni saqlashning fizik parametrlariga (EXM xotirasi) bog‘liq emas. Shuning uchun infologik model real predmet sohasida o’zgartirish bo’lmaguncha o’zgartirilmaydi. Qolgan modellar mashinaga mo’ljallangan bo’ladi. Ular yordamida MBBT amaliy dasturlar va foydalanuvchilarga saqlanayotgan ma’lumotlarga murojaatni ta’minlab beradi. Ma’lumotlarga murojaat konkret MBBT yordamida amalga oshirilganligi sababli, bu modellar joriy MBBTning tilida tavsiflanishi lozim. Ma’lumotlarning infologik model orqali tuzilgan bu tavsif ma’lumotlarning datalogik modeli deb ataladi. Qurilmalarda ma’lumotlarni joylashtirish ma’lumotlarning fizik modelini qo’llaydi. va qidirish uchun MBBT Yuqorida ta’riflangan 3 darajali arxitektura (infologik, datalogik i fizik daraja) saqlanadigan ma’lumotlarni ularni qayta ishlaydigan amaliy dasturlardan mustaqilligini ta’minlaydi. Saqlanadigan ma’lumotlar boshqa qurilmaga ko’chirilishi yoki ularni tuzilishi qayta tashkil etilishi, shuningdek yangi amaliy dasturga moslash uchun yangi maydonlar qo’shilishi mumkin. Biroq bu o’zgartishlar faqat fizik modelda, ba’zida datalogik modeldagi o’zgarti\shlar kiritish bilan kifoyalanadi. Asosiysi ushbu o’zgartirishlar tizimning mavjud foydalanuvchilariga sezilmaydi (ya’ni ular uchun “shaffof”, “tiniq” xolda amalga oshadi), shuningdek yangi foydalanuvchilar uchun xam sezilmaydi. Bundan tashqari, ma’lumotlar mustaqilligi eski ilovalarni buzmasdan yoki vz kechmagan xolda yangi masalalarni еchish uchun yangi ilovalarni yaratish imkonini beradi. 3.2. Loyixalash bosqichlari va modellashtirish ob’ektlari Konseptual darajada metodologiyani xarakterlash unchalik murakkab emas, uni amaliyotda qo’llash qiyin. Qiyin jixati predmet sohasini moxiyatini tushunib olish (masalan, korxonaning faoliyat mexanizmini tushunishning murakkabilig) va uni yangi faoliyat sharoitlariga moslashtirishdan iborat. Shunga o’xshash muammolar MBBT uchun ham tegishlidir. MBBT korxonanin boshqarish tizimini tashkil qiluvchi bir qismiga aylanishi lozim – bu MB muvaffaqiyatli tadbiqini ta’minlaydi. Biroq MB ni tadbiqi korxonadagi va uning xodimlari faoliyatidagi ma’lum o’zgartishlar bilan bog‘liq. Shuning uchun tadbiq qilishda xodimlarning sustkashligi bilan muammolarga duch kelinadi. Tanlangan MBBT vositasi foydalanuvchi talablariga mos bo’lishi juda muxim. Qolaversa turli foydalanuvchilarga ma’lumotlarning turlicha modeli, ma’lumotlar tili va sxemasi zarur bo’ladi. Shuning uchun MBBT zarur vositalarni qo’llab quvvatlashi zarur, foydalanuvchi esa bu vositalardan eng maqbulini tanlaydi. Bunday tadqiqotlarni muvaffaqiyatiga shubxa bilan qarash mumkin. Haqiqatda dasturlash tili qanchalik yomon bo’lgani bilan uni oxir oqibat o’rganish mumkin. Xuddi shunday MBBT ni ham ma’lum vaqt mobaynida o’rganish mumkin. Biroq muammo zarur vositalarni o’rganishda emas, balki uni qo’llanish natijasidagi samaradorlik bilan bog‘liq. Loyixalash vositalari uzluksiz ravishda takomillashmoqda, biroq ular yordamida еchilishi kerak bo’lgan foydalanuvchi msalalari ham murakkablashdi. Modellashtirish ob’ektlari nuqtai nazari bilan qaraganda predmet soxasi modeli bilan MB modelini farqlash lozim. Bu modellar o’zaro bog‘liq, chunki ular bitta originalni, ya’ni loyixalanayotgan MB da saqlanadigan va qayta ishlanadigan ma’lumotlar real dunyodagi predmetlarlarni tasivrlaydi. O’zaro aloqalar xarakteri (va, shuningdek, farqlar) ma’lumotlar bazasini loyixalash bosqichida namoyon bo’ladi. Predmet soxasining modeli ko’pincha semantik modellashtirishning noformal darajasi bilan bog‘lanadi, ma’lumotlar bazasining modeli esa tizimning formallashgan darajasi (xususan MBBT bilan) bilan bog‘lanadi. Amalda semantik modellashtirishning maqsadi ma’lumotlar bazasini yaxshi formallashgan loyilash bosqichlari uchun semantik asosini shakllantirishdan iborat. Bunda ma’lumotlar bazasiga xamda ma’lumotlarni tavsiflashga bo’lgan quyidagi talablarni inobatga olish zarur: 1) tavsif loyixalovchiga emas foydalanuvchiga tushunarli bo’lishi lozim; 2) avval ma’lumotlarni tasvirlashni avvalgi qabul qilingan usullari mavjud ma’lumotlar sxemasi va amaliy dasturlarni o’zgartirmasdan yangi ma’lumot elementlarini qo’shish imkonini berishi kerak; 3) MBBT MB ga bo’lgan ixtiyoriy so’rovlarni samarali amalga oshirishi lozim. «Mohiyat-aloqa» modeli (ER – Entity-Relationship model) ma’lumotlarlar bazasini loyihalashning konseptual darajasidagi chizmalarini tavsiflash uchun ishlatiladi. Bu usul 1976-yilda Piter Pin Shan Chen (Peter Pin Shan Chen)tomonidan kiritilgan. Keyinchalik Chen va boshqalar tomonidan kengaytirildi va takomillashtirildi. Bundan tashqari «mohiyat-aloqa» modeli ko’pgina CASE vositalar tarkibiga kiritildi va ular ham o’z navbatida uning rivojlanishiga hissa qo’shdilar. Bugungi kunda «mohiyat-aloqa» modelining yagona qabul qilingan standarti mavjud bo’lmasa ham, umumiy konstruksiyalarning majmuasi mavjud bo’lib, ko’pgina «mohiyat-aloqa» modellarining asosida yotadi. Biz an’anaviy belgilash (tasvirlash) usullari bilan bir qatorda, loyihalash vositasi UML (Unified Model Language – yagonalashgan modellash tili) tilining belgilaridan ham foydalanamiz. Chunki loyihalash vositalarining tarkibiga «mohiyat-aloqa» modeli ham kiritilgan. 3.3. «Mohiyat-aloqa» modeli elementlari «Mohiyat-aloqa» modelining asosiy elementlari – mohiyatlar, atributlar, identifikatorlar va aloqalardan iborat. Mohiyat – bu birorta predmet sohaga tegishli obyektdan iborat. Mohiyatlarga misol – XIZMATChI Baxtiyor Salimov, MIJOZ 77345, BU-YuRTMA 0049 va MAXSULOT 59037. Bir xil turdagi mohiyatlarning guruhlari mohiyatlarning sinflarini tashkil etadi. XIZMATChI turidagi mohiyatlarning sinfi hamma XIZMATChI turidagi mohiyatlardan iborat. Mohiyatlarning sinflarini bosh harflar bilan belgilaymiz. Mohiyatlar sinfi va mohiyat nusxasi tushunchalari orasidagi farqni aniqlashtirib o’taylik. Mohiyatlar sinfi deganda, mohiyatlarning majmuasi tushuniladi va u o’zining turi bilan tavsiflanadi. Mohiyat nusxasi esa, aniq bitta mohiyatni bildiradi, masalan, BUYuRTMA 0049 va shu mohiyatning qiymati bilan ifodalanadi. Demak, mohiyatlar sinfi mohiyat nusxalarining to’plamidan iborat deyishimiz mumkin. Masalan, Talabalar o’quv loyihasidagi RO’YHAT mohiyatining tarkibi – Zn (talaba reyting daftarchasining raqami), Familiya (familiyasi), Ism (ismi), O_Ism (otasining ismi), K_Sana (o’qishga kirgan sanasi), Fak_N (fakultet raqami), Yon_N (yo’nalish raqami), Kurs (kurs), Guruh_N (guruh raqami), Pasp_S (pasport seriyasi), Pasp_N (pasport raqami). Ana shu RO’YHAT mohiyatining ikkita nusxasi quyidagi 3.1-rasmda keltirilgan: 3.1-rasm. Mohiyatlar atributlarga ega bo’lib, ularni xususiyat(propetries)lar deb ham atashadi. Xususiyatlar mohiyatlarni tavsiflaydi. Misollar sifatida Hodimning_ismi, tug‘ilgan_sanasi va ish_staji atributlarini keltirish mumkin. «Mohiyat-aloqa» modelidagi berilgan sinfning hamma nusxalari bir xil atributga ega, deb faraz qilinadi. «Mohiyat-aloqa» modelining boshlang‘ich ta’rifi kompozit(composite) va ko’p qiymatli(multi-valued) atributlarni o’z ichiga oladi. Kompozit atributga misol sifatida Manzil atributini olish mumkin, u Indeks, Shahar, Mavze, Ko’cha va Uy atributlar guruhidan iborat. Ko’p qiymatli atributga misol Ustoz_familiyasi, bo’lishi mumkin, chunki har bitta talabaning bir qancha ustozi bo’ladi. Atribut bir paytda ham kompozit, ham ko’p qiymatli bo’lishi mumkin. Masalan, Hudud_kodi, telefon_raqami atributlar guruhidan tuzilgan Telefon kompozit atributi, ko’p qiymatli bo’lishi mumkin, bu esa bitta odamning bir nechta telefon raqamlarini saqlash imkoniyatini yaratadi. Ko’pgina «mohiyat-aloqa» modellarini amalga oshiruvchi vositalar bir qiymatli kompozit atributlarni inkor qiladi, ko’p qiymatli atributlarni esa mohiyatlarda akslanishini talab qiladi. Mohiyatlarning nusxalari identifikator(identifiers) – atributlarga ega bo’lib, nusxalar nomlanadi, ya’ni identifikatsiya qilinadi. Masalan, XIZMATChI sinfi mohiyati nusxalari Soliq_to’lovchini_ aniqlovchi_raqam yoki Xizmatchining_familiyasi_ismi_sharifi atributlari bilan aniqlanadi. Ishga_kirgan_sanasi yoki Maoshi atributlari XIZMATChI mohiyat sinfi nusxalarining identifikatorlari bo’la olmaydi, chunki ular xodimni bir qiymatli aniqlay olmaydi. Shunga o’xshash RO’YHAT sinfining mohiyati nusxalari Zn yoki Familiya, Ism, O_Ism atributlari orqali identifikatsiya qilinadi. BUYuRTMA sinfining mohiyatlari esa Buyurtma_raqami atributi orqali identifikatsiya qilinadi. Mohiyat nusxasini identifikator bitta yoki bir nechta atributdan tashkil topishi mumkin. Identifikator noyob(unique) yoki noyob bo’lmasligi(nonunique) mumkin. Agarda identifikator noyob bo’lsa, uning qiymati mohiyat nusxasining faqat bittasini aniqlaydi. Agarda identifikator noyob bo’lmasa, uning qiymati mohiyat nusxalarining qandaydir to’plamini aniqlaydi. Masalan, Zn identifikator noyob, Familiya, Ism, O_Ism identifikatorlari noyob emas, chunki xuddi shunday familiya, ism va otasining ismidagi ikkita va undan ortiq odam bo’lishi mumkin. Bir nechta atributlardan iborat identifikatorlar kompozit identifikatorlar deyiladi. Misol, Hudud_kodi, telefon_raqami identifikatori. Mohiyatlarning o’zaro munosabatlari aloqalar(relationships) orqali ifodalanadi. «Mohiyat-aloqa» modellari, aloqalar sinfini va aloqalarning nusxalarini o’z ichiga oladi. Aloqalar sinfi(relationships classes) – mohiyatlar sinflari orasidagi o’zaro munosabatlardan, aloqalar nusxalari(relationships instanses) esa, mohiyatlar nusxalari orasidagi o’zaro munosabatlardan iborat. Aloqalarning ham xususiyatlari bo’lishi mumkin. Aloqalar sinfi bir nechta mohiyatlar sinfi bilan munosabatda bo’lishi mumkin. Aloqada ishtirok etuvchi mohiyatlar soni, aloqa darajasini(relationships degree) belgilaydi. 3.2-rasmda aloqa darajasi ikki va uch bo’lgan holatlar keltirilgan. BUYuRTMAChI_BUYuRTMA aloqasining darajasi 2, chunki unda ikkita mohiyat sinflari BUYuRTMAChI va BUYuRTMA qatnashgan. OTA_ONA aloqasining darajasi 3, chunki unda uchta mohiyatlar sinflari OTA, ONA va FARZAND ishtirok etgan. Aloqa darajasi ikkiga teng bo’lgan holatlar juda keng tarqalgan bo’lib, ularni binar (ikkilik) aloqalar(binary relationships) deb ataladi. Aloqaning darajasi 3 bo’lsa, uch tomonlama aloqa(ternary) deb ataladi. 3.2-rasm. To’rtinchi darajali aloqa to’rt tomonlama aloqa(quaternary) deb ataladi. 3.3rasmda to’rt tomonlama kelishuv aloqasi keltirilgan. Unda to’rtta qatnashuvchi mohiyatlar, ya’ni OLUVChI, IShONChLI_ShAXS, MOLIYa_BO’LIMI va BITIM qatnashgan. Bu aloqa bo’yicha, oluvchi ishonchli shaxs tomonidan maslahat olib va moliya bo’limi qo’llabquvvatlagan holda, bitim tuzadi. 3.3-rasm. 3.4. Binar aloqalarning uch turi. Binar aloqalar uch turga bo’linadi. 3.4-rasmda bitta mohiyat nusxasi boshqa turdagi bitta mohiyat nusxasi bilan 1:1 turdagi aloqa orqali bog‘langan. TALABAKOMPYuTER aloqasi TALABA sinfidagi bitta mohiyatni KOMPYuTER sinfidagi bitta mohiyat bilan bog‘lagan. Bu bog‘lanishga asosan, har bir talabaga faqat bitta kompyuter biriktirib qo’yilgan va bitta kompyuter faqat bitta talabaga tegishli, degan ma’no yotadi. 3.4-rasm. 1:1 aloqa 3.5-rasmda ikkinchi turdagi binar aloqaga misol keltirilgan. Bu aloqa «birga-ko’p» deb ataladi. Masalan, hunarmandlikdagi USTA-ShOGIRD aloqasini olsak, USTA mohiyat sinfidagi yagona nusxa ShOGIRD mohiyat sinfidagi bir nechta nusxalar bilan bog‘langan. Ushbu bog‘lanishga nisbatan, ustaning N ta shogirdi bor, bu shogirdlarning hammasini ustozi ana shu bitta USTA, degan ma’no yotadi. Bundan tashqari 1 : N shakldagi yozuvning ham o’z ma’nosi bor. 1 raqami USTA joylashgan tomonda, N esa ShOGIRD joylashgan tomonda turibdi. Agarda teskarisi yozilganda edi, shogird bitta va uning esa bir vaqtda bir nechta ustozi bor, degan ma’no hosil bo’lar edi. Bu esa haqiqatan yiroq. 3.5-rasm. 1:N aloqa Binar aloqaning uchinchi xili N : M bo’lib, «ko’plikdan-ko’plikka» ma’nosini anglatadi. 3.6-rasmdagi TALABA-TO’GARAK aloqasi bo’lib, TALABA mohiyatlar sinfiga tegishli nusxalarni TO’GARAK mohiyatlar sinfiga tegishli nusxalar bilan bog‘lagan. Ushbu aloqa, bitta talaba bir nechta to’garakka a’zo bo’lishi va bitta to’garakda bir nechta talabalar bo’lishi mumkinligini anglatadi. 3.6-rasm. N:M aloqa Romb ichidagi aloqalarni sonini ifodalovchi raqamlar, har bir tomondagi mohiyatlarning maksimal nusxalarini bildiradi. Bu chegaralar maksimal kardinal sonlar, bunday ikkita chegaradan iborat ikki tomonli aloqa birligi aloqaning maksimal kardinalligi(maximum cardinality) deb ataladi. Masalan, 5-rasmdagi aloqaning maksimal kardinalligi 1 : N. Lekin albatta, bu turdagi aloqalardagi kardinallik boshqacha ham bo’lishi mumkin. Masalan, VOLEYBOL_KOMANDA va O’YINChI mohiyatlari orasidagi aloqa 1:6, bu voleybol komandasida maydonda bir paytda oltitadan ko’p o’yinchi bo’lishi mumkin emasligini bildiradi. Minimal kardinallikni ko’rsatishning bir nechta usullari mavjud. Ulardan biri 3.7-rasmda keltirilgan. Aloqada qatnashishi majbur bo’lgan mohiyat tomondagi aloqaga perpendikular chiziqcha tortiladi, aloqada qatnashishi mumkin, lekin shart bo’lmagan mohiyat tomondagi aloqaga tuxumsimon yassi shakl (oval) joylashtiriladi. 3.7-rasm, TALABALAR_UYI mohiyati kamida bitta TALABA mohiyati bilan bog‘langanini, lekin TALABA mohiyati TALABALAR_UYI mohiyati bilan bog‘lanishi shart emasligini bildiradi. 3.7-rasm. TALABALAR_UYI-TALABA aloqasiga qo’yilgan to’liq cheklashlarning ma’nosi quyidagicha, TALABALAR_UYI mohiyatining minimal kardinalligi birga va maksimal kardinalligi soni «ko’p» TALABA mohiyatidan iborat. TALABA nolga teng minimal kardinallikka va maksimal kardinalligi TALABALAR_UYI mohiyatining bitta nusxasidan iborat. Bitta sinfga tegishli mohiyatlar orasida ham aloqalar bo’lishi mumkin. Misol uchun TALABA mohiyatlar sinfi uchun XONADAGI_QO’ShNI aloqasini aniqlash mumkin. Bunday aloqaga misol 3.8-rasmda keltirilgan. XONADAGI_QO’ShNI aloqasining nusxalari Jalil, Halim, Salim yoki boshqa ixtiyoriy talaba bo’lishi mumkin. Bitta sinfga tegishli mohiyatlar aloqalar(recursive relationships) deb ataladi. orasidagi aloqalar rekursiv 3.8-rasm. Yuqorida keltirilgan uch xildagi binar aloqalarni ba’zan «MAVJUD» aloqa turi yoki egalik aloqalari(HAS-A relationsips) deb atashadi. Buning sababi, bitta mohiyatning boshqa mohiyat bilan aloqasi mavjud(has) ligini, ya’ni aloqa borligini bildiradi. Masalan, talabaning kompyuteri bor, ustaning shogirdi bor, to’garakka yozilgan talabalar bor. 3.5. Mohiyatlar «Mohiyat-aloqa» modelini qurishni nomzod mohiyatlarni aniqlashdan boshlash kerak. Hujjatlarda yoki suhbatlarda mohiyatlar odatda ot sifatida taqdim etiladi, ya’ni joy, insonlar, voqealar, asbob-uskunalar va h.k. Yuqoridagi ma’lumotlarni berilgan modeliga nisbatan, eng muhim so’z yoki ifoda nuqtayi nazaridan tahlil qilish natijasida, biz Talabalar o’quv loyihasida ishtirok etuvchi quyidagi mohiyatlar ro’yxatini tuzamiz: RO’YHAT BAHOLAR FAKULTETLAR Yo’NALISh FANLAR. Ma’lumotlarni modellashtirish jarayonida fan qancha miqdorni tashkil etsa, san’at ham shu miqdorni tashkil etadi. Shuning uchun biz qabul qilgan qarorimiz, ana shunday еchimlardan birini tashkil etadi xolos. Muqobil variantlar orasidan to’g‘risini tanlash uchun qo’yilgan talablarga javob beruvchisini hamda ma’lumotlar tizimning tuzilishiga qanday ta’sir ko’rsatishini aniqlash zarur. Ba’zida mohiyatlarni atributlarini ko’rib chiqish juda foydali bo’ladi. Masalan, agarda mohiyatlarda uni aniqlovchi atributdan tashqari hech qanday atribut ishtirok etmasa, bunday mohiyatlardan voz kechish kerak. Shu nuqtayi nazardan hosil qilgan har bir mohiyatning atributlarini ko’rib chiqamiz. RO’YHAT mohiyati ushbu atributlardan iborat bo’lsin: Zn (talabaning reyting daftarchasining raqami), Familiya (familiyasi), Ism (ismi), O_Ism (otasining ismi), K_Sana (o’qishga kirgan sanasi), Fak_N (fakultetning raqami), Yon_N (yo’nalishning raqami), Kurs (kurs), Guruh_N (guruh nomeri), Pasp_S (pasport seriyasi), Pasp_N (pasportining nomeri). Bu atributlarning hammasi talaba xususidagi ayrim ma’lumotlarni o’z ichiga oladi. Biz bu erda shuni alohida ta’kidlashimiz kerakki, atributlarning soni mohiyatning ma’nosidan kelib chiqqan holda qanchalik ko’p bo’lsa, shunchalik ko’p so’rovlarni tizimda tashkillashtirish imkoniyatiga ega bo’lamiz. Bu esa tizimni amaliyotdagi tub maqsadiga erishishini ta’minlaydi. BAHOLAR mohiyati Zn (talabaning reyting daftarchasining seriyasi va raqami), Semestr (semestr raqami), Fan_N (fanlar raqami), Ball (ma’lum fanga qo’yilgan ball), Sana_Kir (fan bo’yicha qo’yilgan ballni tizimga kiritilgan sanasi), Ustoz (fan bo’yicha baholagan ustozning familiyasi, ismi va sharifi) atributlaridan tuzilgan bo’lsin. FAKULTETLAR mohiyati ikkita atributlardan – Fak_N (fakultet raqami) va Fakultet (fakultet nomi) iborat bo’lsin. Har bir fakultet FAKULTETLAR mohiyatini hamda fakultetlar nomini yagona tarzda aniqlovchi fakultet raqami atributining qiymatlaridan iborat. Quyidagi ikkita mohiyat ham shunday vazifani bajarish uchun xizmat qiladi. Yo’NALISh mohiyati ham ikkita atributlardan iborat bo’lsin – Yon_N (yo’nalish raqami) va Yo’nalishlar (yo’nalishlar nomi). Oxirgi FANLAR mohiyati ham ikkita atributlardan – Fan_N (fan raqami) va Fan_Nomi (fan nomi) tuzilgan bo’lsin. Munosabatning darajasi undagi atributlar soniga bog‘liq. Talabalar o’quv loyihamizdagi Ro’yxat munosabatida 11ta atribut bor, demak, uning darajasi 11ga teng. Baholar munosabatida oltita atribut bor, demak, uning darajasi oltiga teng. Qolgan Fakultetlar, Fanlar va Yo’nalishlar munosabatlarining darajalari ikkiga teng. Munosabatning darajasi uning har bir kortejida nechtadan elementni saqlashini bildiradi. Talabalar o’quv loyihasidagi relatsion chizmalar quyidagicha: Ro’yhat (ZN, FAMILIYa, ISM, O_ISM, K_SANA, FAK_N, YoN_N, KURS, GURUH_N, PASP_S, PASP_N) Baholar (ZN, SEMESTR, FAN_N, BALL, SANA_KIR, USTOZ) Fakultetlar (FAK_N, FAKULTET) Yo’nalish (YoN_N, Yo’NALIShLAR) Fanlar (FAN_N, FAN_NOMI) 3.6. Aloqalar RO’YHAT mohiyati markaziy mohiyat sifatida ishtirok etmoqda. Shuning uchun uning boshqa mohiyatlar bilan aloqasini ko’rib chizamiz. Avval RO’YHAT va BAHOLAR mohiyatlari orasidagi aloqalarni ko’rib chiqaylik. RO’YHAT mohiyatida barchatalabalar jamlanadi. FAMILIYa atributi talabalarning familiyasidan iborat bo’ladi. Ushbu atributda turli familiyadagi talabalar yozilgan paytda nomzod kalit bo’lishi mumkin. Lekin bitta o’xshash familiya paydo bo’lsa, bu atributni nomzod kalit sifatida ishlatib bo’lmaydi. Har bir talabaning reyting daftarchasi mavjud bo’lib, bu daftarchadagi seriya va raqamlar noyob bo’lgani uchun Zn atributining nusxasi har bir talabani bir qiymatli identifikatsiyalaydi. Xuddi shunday vazifani Zn atributi BAHOLAR mohiyati uchun ham bajaradi. Lekin BAHOLAR mohiyatida Zn atributi tashqiidentifikator, ya’ni talabalarning har birini RO’YHAT mohiyatidan bir qiymatli aniqlaydi. RO’YHAT va BAHOLAR mohiyatlariorasidagi aloqa 1:M bo’ladi. Bitta talaba j ta fan bo’yicha baho oladi, 1≤j ≤M bo’ladi. RO’YHAT mohiyati RO’YHAT mohiyatiga identifikatsiyalangan bog‘liq turdagi zaif mohiyat. RO’YHAT mohiyati va FAKULTETLAR hamda Yo’NALIShLAR mohiyatlari orasidagi aloqalar esa M:1tarzda bo’ladi. Fak_N atributi FAKULTETLAR mohiyatini, Yon_N atributi esa Yo’NALIShLAR mohiyatini noyob tarzda identifikatsiyalaydi. Fak_N atributining har bir nusxasi Fakultet atributining bir nusxasini, Yon_N atributining har bir nusxasi Yon_N atributidagi bir nusxani bir qiymatli aniqlaydi. Lekin RO’YHAT mohiyatidagi fakultetlar va yo’nalishlar ko’pchilikni tashkil etadi. 3.9-rasm. Talabalar o’quv loyihasining ER-diagrammasi. BAHOLAR va FANLAR mohiyatlari orasidagi aloqalar ham keltirilgan asoslar kabi M : 1 tarzda bo’ladi. Fan_N atributi, BAHOLAR va FANLAR mohiyatlari orasidagi aloqalarni modellashtiradi, ya’ni fanning raqami qaysi fanga mosligini aniqlaydi. 4. Ma’lumotlar bazasida relyatsion model va munosabatlar. 4.1. Ma’lumotlar bazasida relyatsion model tushunchasi. Relatsion modelda ma’lumotlarlar termalarga ajratilib, ular jadvalning tuzilishini yaratadi. Jadvalning bunday tuzilishi alohida ma’lumotlar elementlari, ya’ni maydonlardan iborat bo’ladi. Alohida terma yoki maydonlar guruhi yozuv deyiladi. Ma’lumotlar modeli yoki predmet sohaning konseptual tavsifi – bular MB loyihalashdagi eng abstrakt daraja. Relatsion ma’lumotlar bazasining nuqtayi nazariy jihatidan, relatsion modelning asosiy tamoyillarini konseptual darajada qo’yidagicha ta’riflash mumkin: barcha ma’lumotlar, satr va ustunlar shaklidagi munosabatdeb ataladigan, tartiblangan tuzilishda bo’lishi; hamma qiymatlar skalyar bo’lishi. Bu, ixtiyoriy munosabatning ixtiyoriy ustun va satrlaridagi qiymatlar yagona bo’lishini bildiradi; barcha amallar butun munosabat ustida bajariladi, amallarning bajarilishi natijasida yana butun munosabat hosil bo’ladi. Bu tamoyil tutashuv deb ataladi. Relatsion modelning tamoyillarini shakllantirishda, doktor E.F. Kodd o’zi matematik bo’lgani uchun ham «munosabat» (relation) degan atamani tanladi, chunki uning fikricha, bu atama bir xildagi ma’noni anglatadi. Munosabatning fizik shakli ikki o’lchovli jadval bo’lib,u ustun va satrlardan iborat. Relatsion model deyilishining sababi, uning jadvallar orasidagi aloqalarni aniqlashida, degan noto’g‘ri talqin juda keng tarqalgan. Haqiqatda esa, ushbu modelning nomi munosabat (MB jadvallari)dan, uning asosida yotuvchilardan kelib chiqadi. Mantiqiy jihatdan MB – bu, ikki o’lchovli jadvallar va ular ustida ustunlarni tanlash va birlashtirish amallariga ega bo’lgan to’plamdir. Shu asosda E.F. Kodd quyidagicha deb yozgan «Amaliy programmachi ham, tasodifiy foydalanuvchi ham, ma’lumotlar bazasi – bu vaqti-vaqti bilan o’zgarib turuvchi, hamma mumkin bo’lgan darajalardagi normallashgan munosabatlarning to’plamidir». Relatsion modellarda munosabatlar obyektlar xususidagi ma’lumotlarni MBda saqlash uchun ishlatiladi. Munosabatlar, aytilgandek jadval ko’rinishida bo’lib, undagi satrlar alohida yozuvlarga,ustunlar esa atributlarga mos keladi. Bundan tashqari atributlar ixtiyoriy ketma-ketlikda kelishi mumkin, bundan munosabatning ma’nosi o’zgarmaydi. 4.2. Relatsion model tuzilishi. Relatsion modelning yana bir muqobil tushunchasi K. Deyt tomonidan berilgan. K. Deyt bo’yicha relatsion model uch qismdan iborat: tuzilish; butunlik; ishlov qismi. Tuzilish qismida qaysi obyektlarning relatsion modelda ishlatilishi tavsiflanadi. Butunlik qismida relatsion modeldagi barcha ma’lumotlarning tegishli cheklashlari tavsiflanadi, jumladan mohiyat butunligi va tashqi kalitlar (havola) butunligini. Ishlov qismida ikkita ekvivalent bo’lgan ishlov, ya’ni relatsion algebra va relatsion hisoblash usullari keltiriladi. Tuzilish qismi Umumiy holda MBB tizimlaridagi ma’lumotlarning uchta asosiy turlari mavjud: oddiy; murakkab; havola. Relatsion modelda ishlatiladigan turlar Relatsion modelda oddiy, murakkab va havola turlari ishlatiladi. Relatsion amallarda ma’lumotlarning ichki tuzilishi hisobga olinmaydi. Shu nuqtayi nazardan, har qanday murakkab turdagi ma’lumotlarni oddiy turlarga olib kelish mumkin. Buning uchun uni shartli ravishda yaxlit hisoblab, ichki tuzilishi hisobga olinmasligi kerak. Bunday model postrelatsion hisoblanadi. 4.3. Domen tushunchasi Relatsion modelda ma’lumotlar turi tushunchasi bilan uni aniqlovchi domen tushunchasi bir-biriga uzviy bog‘liq. Domen bu semantik atamadir. Domen deb, biror bir ma’lumotlar turini qandaydir ma’noga ega bo’lgan to’plamning qismi, desak ham bo’ladi. Domen quyidagi xossalarga ega: noyob ismga ega bo’lib, atribut nomi bilan bir xilda bo’ladi; biror bir oddiy tur yoki boshqa domen orqali aniqlanadi; domen biron bir mantiqiy shart bilan berilishi mumkin. Bu shart shu domenga tegishli ma’lumotlar to’plamining terma qismini aniqlaydi; domen aniq bir ma’noga ega bo’lishi kerak. Masalan, oliy o’quv yurti talabasining yoshini ko’rsatuvchi domenni quyidagicha tavsiflash mumkin: Tyoshq {n∈N: n≥16 and n≤60} Domenni to’plamdan farqi shundaki, u aniq bir predmet sohaning semantik atamalarini akslantiradi. Bitta to’plamning elementlari har xil ma’noga ega bo’lgan domenlarga tegishli bo’lishi mumkin. Masalan, talabaning yoshi va og‘irligi umumiy holda, bir to’plamning elementlari bo’lishi mumkin, lekin bu elementlarning ma’nosi turlicha, shuning uchun ular turli domenlarga tegishli bo’ladi. Buesa o’z navbatida, turli turdagi va hattoki bir turdagi domen elementlarini taqqoslash taqiqlanadi. Domenlar ma’lumotlar bazasini to’g‘ri modellashtirishga ta’sir qiladi. Lekin, hamma domenlarga ham chegaraviy shartlarni qo’yib bo’lmaydi. Masalan, familiya domeniga. Domen tushunchasi relatsion modellarda katta ahamiyatga ega, chunki foydalanuvchi atributlar qabul qiladigan qiymatlarning ma’nosi va manbasini unga nisbatan aniqlaydi. Natijada tizim relatsion amalni bajarganda, unda ko’proq ma’lumot bo’ladi, bu esa tizimga semantik nokorrekt amallarni bajarishga yo’l qo’ymaydi. Masalan, agarda ikkita atributlar uchun domen tomonidan belgili satrlar aniqlangan bo’lsa ham, birida mahallaning nomi ikkinchisida ko’chaning nomi saqlansada, ularni solishtirish mantiqsizlik bo’ladi. Lekin bu masalaga boshqa tomondan qaralsa, masalan talabaning oladigan stipendiyasi miqdori va stipendiya olgan oylar soni atributlariga e’tibor beraylik. Birinchi atribut «pul» («denejno’y») turida, ikkinchisi esa butun turida. Lekin ularni ko’paytirish mumkin. Mana shu ikkita misoldan, domen tushunchasini to’liq amalga oshirishni ta’minlash, oson emas, shuning uchun ham ko’pgina relatsion MBBTda ular to’liq emas, qisman amalga oshgan. 4.4. Munosabat, atribut, kortej va boshqa atamalar Ma’lumotlarning relatsion modelidagi asosiy tushunchalardan biri, bu munosabatdir. Uni ta’riflashdan oldin bir nechta ta’riflarni beramiz. Ta’rif 1. Munosabat atributi bu juftlikdan iborat, ya’ni atribut nomi: domen nomi(<A : D>). Ta’rif 2. (D1, D2, . . . Dn) har xil turda bo’lishi shart bo’lmagan domenlar to’plamida aniqlangan R munosabat ikki qismdan, ya’ni sarlavha va tanadan iborat bo’ladi. Munosabat sarlavhasi fiksirlangan atributlar sonidan iborat bo’lib, quyidagicha juftliklar ketma-ketligi shaklida yoziladi: (<A1: D1>, <A2: D2>, . . . , <An: Dn>) Munosabat tanasi kortejlar to’plamidan iborat. Munosabatning har bir korteji <atribut ismi : atribut qiymati> juftlik to’plamidan iborat, ya’ni (<A1: a1>, <A2: a2>, . . . , <An : an>) bu yеrda, ai Di domendan olingan Ai atributning qiymati. Munosabatning to’liq shaklda yozilishi <R> (<A1: D1>, <A2: D2>, . . . , <An: Dn>) yo qisqacha R (A1, A2, . . . , An) yoki oddiygina R Ta’rif 3. Munosabatlar to’plami relatsion ma’lumotlar bazasi, deb ataladi. Ta’rif 4. Relatsion ma’lumotlar bazasining chizmasi, bazani tashkil etuvchi munosabatlar nomidan tuzilgan to’plamdan iborat. Ta’rif 5. Relatsion ma’lumotlar bazasi chizmasining nusxasi, bazani tashkil etuvchi munosabatlarning tanasi (qiymati)dan tuzilgan to’plamdan iborat. Munosabat va oddiy jadvallar (relatsion ma’noda emas) orasidagi asosiy farqlar: Munosabatda bir xildagi kortejlar bo’lishi mumkin emas, chunki munosabat tanasi to’plamdan iborat bo’lgani uchun, unda bir xildagi elementlar bo’lishi mumkin emas. Aksincha, jadvalda bir xildagi satrlar bo’lishi mumkin. Munosabat kortejlari tartiblangan emas. Jadvalda esa, har bir satr o’z joyida bo’lishi kerak. Sarlavhadagi atributlar tartiblangan emas. Jadvaldagi tartibi esa fiksirlangan. Atributlarni barcha qiymati skalyar. Jadval yacheykasida har narsa bo’lishi mumkin. Jadval munosabatga aylanishi uchun: oddiy tuzilishga ega bo’lishi, ya’ni har bir satrda ustunlar soni bir xil bo’lishi kerak; ikkita bir xildagi satr bo’lmasligi kerak; ustunda bir xil turdagi qiymatlar bo’lishi kerak; ma’lumotlar turi oddiy bo’lishi shart. Munosabat tanasi kortejlarning to’plamidan iborat bo’lgani uchun, munosabatda n ta atribut bo’lsa, kortejlar n o’lchovli, ya’ni munosabat n – darajali bo’ladi. 2- darajali munosabat binar, 3- darajali ternar, n- darajalisi esa n ar, deb yuritiladi. Boshqacha qilib aytsak, atributlar soni munosabatning darajasini bildiradi. Munosabatdagi kortejlar to’plami (jadvaldagi satrlar soniga o’xshash) uning quvvati yoki kardinalligi deb ataladi. Matematikada odatda ko’proq binar munosabatlar ishlatilsa, ma’lumotlar bazasining nazariyasida esa asosan n-darajali munosabatlar ishlatiladi. Matematikada munosabatlar cheksiz to’plamlar ustida beriladi va cheksiz quvvatga ega. Ma’lumotlar bazasida esa aksincha, munosabatlarning quvvati cheklangan, chunki saqlanadigan jadvallardagi satrlarning soni hamma vaqt cheklangan bo’ladi. Shu nuqtayi nazardan MB relatsion modeli, turli ardagi cheklangan munosabatlarning oldindan aniqlangan elementar ma’lumotlar to’plami orasidagi cheklangan termalardan iborat, deyish mumkin. MB relatsion modeli matematik mantiq ma’nosidagi chekli to’plamdan iborat. Modeldagi munosabatlar ustida turli algebrayik amallarni bajarish mumkin. Shu nuqtayi nazardan, matematik mantiq va algebraga asoslangan holda, aniq matematik rasmiyatchilikni talab qiladi. MB relatsion modellariga ishlov beruvchi zamonaviy tillar, ana shu talablar asosida yaratilgan (SQL, QBE, PL/SQL va h.k.). Munosabat tuzilishining domen identifikatori va atributlar olishi mumkin bo’lgan qiymatlarining ixtiyoriy cheklashlar bilan tavsifini, ba’zan uning sarlavhasi(yoki mazmuni - intension) deyiladi. Odatda, yangi atributlar qo’shilmaguncha munosabatning ma’nosi o’zgarmaydi, u fiksirlangan bo’ladi. Kortejlar ma’lum vaqtdan keyin o’zgarishi mumkin. 4.5. Muqobil atamalar Relatsion modelda ishlatiladigan atamalar ba’zan chalkashliklarga olib keladi, chunki yuqorida biz keltirgan atamalardan tashqari yana boshqa bir atamalar mavjud. Unda munosabat – fayl, kortej – yozuv, atributlar – maydon deyiladi. Bu atamalar, MBBT fizik jihatdan har bir munosabatni alohida fayllarda saqlashidan kelib chiqqan. Bu atamalardan programmachi ko’proq foydalanadi. Quyidagi jadvalda ana shu muqobil atamalarni keltiramiz. Relyatsion modelning har bir tushunchasini “Xodim” – mohiyati (ob’ekti) misolida ko’rib chiqamiz: munosabat sxemasi Xodimlar Atribut Tabel nomer Familiya Ism Otasining ismi Bo’lim lavozimi 100 Abdullaev Abdulla Abdullaevich 002 Boshliq 101 Ismoilov G‘ani Komilovich 001 Injener Karimov Boltaboy To’raevich 002 injener 102 Atribut, maydon Kortej, yozuv, satr domen, ustun qiymati satrli sonli ma’lumotlar tipi “Xodimlar” ob’ekti xaqidagi jadval. Munosabat quyidagi tavsiflarga ega: munosabat relatsion chizmadagi hamma nomlardan boshqacha nomga ega; munosabatning har bir katagi faqat bitta elementar qiymatga ega; har bir atribut noyob ismga ega; atributning qiymatlari bitta domendan olinadi; har bir kortej noyob hisoblanadi, ya’ni ikkita bir xildagi kortej bo’lishi mumkin emas; atributlarning kelish ketma-ketligi ahamiyatsiz; nazariy jihatdan munosabatda kortejlarning kelish ketma-ketligi ahamiyatsiz. Lekin amaliyotda kortejlarning kelish tartibi ularga kirish samaradorligiga ta’sir qilishi mumkin. Quyidagi jadvalda relatsion atamalar keltirilgan. 4.6. Kalitlar Aytib o’tilganidek, munosabatda takrorlanuvchi kortejlar bo’lmasligi kerak. Shuning uchun har bir kortejni noyob tarzda bitta yoki bir nechta atributlar yordamida identifikatsiyalash imkoniyati bo’lishi kerak. Bu atributlar kalit deyiladi. Amaliy ish jarayonida kortejni– yozuv, atributni maydon deyishadi. Birlamchi kalit– atributlar yoki ular to’plamining shunday elementidan iboratki, u yagona tarzda bitta yozuv yoki guruhni belgilaydi. Birlamchi bo’lmagan boshqa atributlarning birlashishidan tuzilgan kalit, tarkibli (birlashgan) kalit bo’ladi. Kalit MB loyihalash va uni amalga oshirish jarayonlarida turlicha ma’no kasb etadi. Loyihalash jarayonida kalit munosabatdagi satrni bir ma’noda tavsirlovchi bo’lib, bitta yoki bir nechta tushuniladi. Har bir munosabat kamida bitta kalitga ega bo’ladi, chunki har bir kortej noyob hisoblanadi. Maksimal tarzda kalit munosabatdagi hamma domenlarning birlashmasidan tuzilishi mumkin. Loyihani amalga oshirish jarayonida kalit atamasi boshqacha tushuniladi. Ko’pgina relatsion MBBT kalit sifatida ustun olinadi va shu asosda boshqarish tizimi indekslar yaratadi. Indeks berilgan ustundagi qiymatlarni tezda topishga imkon yaratadi. Bu kalitlarning noyob bo’lishi shart emas, chunki ular faqatgina tezlikni oshirishga xizmat qiladi. Ana shu kalitlarni bir-biridan farqlash uchun mantiqiy va fizik kalitlar deb atashadi. Mantiqiy kalit bu ustunni noyob elementlarini, fizik kalit esa tezlikni oshiruvchi indeksdan iborat. Berilgan munosabatning kortejini yagona tarzda aniqlovchi atribut yoki atributlar majmuasi superkalit deyiladi. Superkalit munosabatdagi har bir kortejni bir qiymatli aniqlaydi. Lekin superkalit noyob identifikatsiyalash shart bo’lmagan qo’shimcha atributlarni ham saqlashi mumkin. Bizni noyob identifikatsiyalash shart atributlar qiziqtiradi. Berilgan munosabatning superkaliti bo’lgan va qism to’plami bo’lmagan superkalit, nomzod kalit deyiladi. Berilgan R munosabatning N nomzod kaliti ikkita xossaga ega: Noyoblik. R munosabatning har bir kortejida N nomzod kalitning qiymati shu kortejni yagona ravishda identifikatsiyalaydi. Keltirib bo’lmaslik. N nomzod kalitning mumkin bo’lgan qism to’plamidan hech biri noyoblik xususiyatiga ega emas. Munosabat bir nechta nomzod kalitlarga ega bo’lishi mumkin. Agar kalit bir nechta atributdan iborat bo’lsa, u tarkibli kalit deb ataladi. Takrorlanuvchi qismga ega munosabatni, ikki qismga ajratib, biriga shu takrorlanuvchi qismni alohida munosabatga ajratsak, biz shu munosabatni normallashtirgan bo’lamiz. Hosil bo’lgan yangi munosabat o’z nomiga ega bo’ladi. 5. Relyatsion algebra va relyatsion hisoblash elementlari. 5.1. Relatsion algebra Relatsion MB moslashuvchanligi munosabatlar ustida o’tkaziladigan o’zgartirishlarning engil amalga oshishi bilan bog‘liq. Buning natijasida, keyinchalik konseptual model foydalanuvchining modeli bilan bir xil bo’lmasligi mumkin. Foydalanuvchining munosabatlari chizmadagi munosabatlardan kelib chiqishi kerak. Matematik amallardan foydalangan holda, munosabatlar ustida turli o’zgartirishlarni amalga oshirish mumkin. Munosabatlar «haqiqiy dunyo»ning qaysidir bir qismidagi haqiqiy obyektlarini akslantiradi. Dunyoning ixtiyoriy qismi esa vaqt o’tishi bilan o’zgaradi. Shuning uchun munosabatlar ham vaqt o’tishi bilan o’zgaradi, ya’ni yangi kortejlar qo’shilish, o’zgarish yoki yo’q qilinishi mumkin. Falsafiy kategoriyalar zamon va makon bilan uzviy bog‘liqligiga misol bo’la oladi. Demak, vaqt oralig‘ida munosabatlar bir holatdan ikkinchi, uchinchi va h.k. holatlarga o’tadi. Lekin munosabat qaysi holatga o’tmasin, uning chizmasi o’zgarmaydi. Shuningdek, domenlarni tartiblash axborot ma’nosida munosabatning ma’nosini o’zgartirmaydi. Har bir munosabat o’zi aniqlangan ma’lumotlar bazasi doirasida noyob ismga ega bo’lishi shart. Munosabatning relatsion amal natijasida hosil bo’ladigan nomini, tenglik ishorasining chap tomonida yozamiz. Agarda, relatsion amal natijasida hosil bo’lgan munosabat yana bir boshqa relatsion amalda ishtirok etsa, unga nom qo’yish shart emas. Bunday munosabatlarni nomsiz munosabat deb atashadi. Nomsiz munosabatlar fizik jihatdan ma’lumotlar bazasining tarkibida ishtirok etmaydi, faqatgina relatsion operatorning qiymatini hisoblash davridagina hisoblanadi xolos. 5.2. Relatsion algebra amallari E.F. Kodd va keyinchalik boshqalar an’anaviy tarzda sakkizta relatsion amallarni ikkita guruhga ajralgan holda aniqlashadi. Nazariy-to’plam amallari: kesishish; birlashish; ayirish; dekart ko’paytma. Maxsus relatsion amallar: tanlash; nusxalash; birlashtirish; bo’lish. Bu amallarning hammasi ham bog‘liqsiz emas, chunki bu amallarning ayrimlarini boshqa relatsion amallar orqali keltirib chiqarish mumkin. 5.3. Munosabatlar ustidagi amallar Munosabatlar ustida bajariladigan maxsus amallardan oldin, ba’zi bir oddiy to’plam amallarini munosabatlarga tatbiq etishni o’rganishdan boshlaymiz. To’plamlar ustida bajariladigan ayrim to’plam amallarini munosabatlarga ham qo’llash mumkin. Buning uchun munosabatlar еga bo’lishi talab qilinadi. Bu esa o’z navbatida bir xil nomdagi atributlarning bo’lishinitalab qiladi. Shuning uchun, misol tariqasida R va S munosabatlarni (A,V,S) chizmaga asosan, quyidagicha holatda qabul qilamiz (5.1-rasm) va to’plam amallarini bajarishda ana shu munosabatlardan foydalanamiz: 5.1-rasm. Kesishish amali Bir xildagi sarlavhaga ega bo’lgan R va S munosabatlar uchun kesishish (intersection)amalining natijasidagi T = R ∩ S munosabat ham ana shu sarlavhaga ega bo’ladi. T munosabat tanasi R va S munosabatlarning bir xildagi kortejlaridan hosil bo’ladi. Bu еrda va keyingi munosabatlar orasidagi = belgisidan shartli ravishda yangi munosabatni ifodalash ma’nosidafoydalanamiz. Kesishish amali natijasida, T munosabat quyidagicha hosil bo’ladi: Birlashish amali Birlashshish (union) amali R U S natijasida, T munosabat R va S munosabatga tegishli kortejlardan hosil bo’ladi, lekin ikkala munosabatda qatnashgan bir xildagi kortejlar yangi munosabatda bir marta qatnashadi. Birlashish amali natijasida T = R U S, T munosabat quyidagicha hosil bo’ladi: Ayirish amali Munosabatlarni ayirish (difference) amali R - S natijasida, T munosabat R ga tegishli, lekin S munosabatga tegishli bo’lmagan kortejlardan hosil bo’ladi. Ayirish amali natijasida T = R - S, T munosabat quyidagicha hosil bo’ladi: Dekart ko’paytmasi amali Ikkita munosabatni ko’paytirish amalini dekart ko’paytmasi (cartesian product) amali deb yuritishadi. Yangi munosabat (m * n) o’lchovli, birinchi munosabatdagi hamma kortejlarni (m ta) ikkinchi munosabatdagi (n ta) hamma kortejlar bilan tutashuvidan, iborat bo’ladi. Ko’paytma x – belgisi bilan belgilanadi. 5.2-rasmdagi RP munosabati ikkita kortejdan, SP munosabati esa uchta kortejdan iborat. Yangi munosabati T = RP x SP 6ta kortejdan iborat bo’ladi (5.3rasm). 5.2-rasm. 5.3-rasm. Tanlash amali Tanlash (selection) amali munosabat ustidagi unar amaldan iborat, chunki u bitta munosabat ustida shartga asosan (predikat) bajarilgan tanlash amali natijasida olingan kortejlarni chiqaradi. Bu amal ma’lumotlarni izlashda juda muhim ahamiyatga ega. Shuning uchun ushbu amal ustida batafsil to’xtab o’tamiz. Tanlash amali, alohida yoki bir yo’la kortejlar ustida izlanishlar olib boradi. Bu amalning bajarilishi natijasida, qo’yilgan shart qanoatlantirilsa, R munosabatning qismi shaklida yangi munosabat tuziladi, aks holda natijaga ega bo’linmaydi. R munosabat yuqoridagi keltirilgan (A,V,S) chizmaga hamda munosabat o’sha elementlarga ega, atributlarning nomi A, V va S bo’lsin. Shart bo’yicha oddiy tanlov. R munosabatdan, S atributning qiymati c2 ga teng bo’lgan kortejlar tanlansin, deyilgan shartni, shartli ravishda rasmiylashtirib, «R dan R.C = c2 TANLANSIN» shakldagi so’rovga aylantiramiz. Natijada quyidagi munosabat hosil bo’ladi: Keltirilgan shartli so’rovda (predikat shartida) biz tenglik (=) amalidan foydalandik. Yana predikatda quyidagi taqqoslash belgilaridan foydalanishimiz mumkin: > katta >= katta yoki teng < kichik <= kichik yoki teng <> teng emas. Ulardan atributlar ustida bo’ladigan so’rovlarni shakllantirishda foydalanish mumkin. Shart bo’yicha oddiy tanlov. MUXANDIS munosabatidan (5.4-rasm) maoshi 1500 dan ko’p bo’lgan xizmatchilar tanlansin. Shartli so’rovimiz, «MUXANDISdan MUXANDIS.MAOSh>1500 TANLANSIN» shaklida bo’ladi. 5.4-rasm. So’rov natijasida olinadigan yangi munosabat quyidagicha bo’ladi: Mantiqiy Bul amallari, ma’lumotlar bazalarining jadvallari bilan ishlashda juda muhim ahamiyatga ega. Ayniqsa, asosiy uchta AND, OR va NOT orqali turli sodda (bitta atribut ustida) va tarkibli predikatlardan iborat murakkab (bir nechta atributlar ustida) so’rovlarni shakllantirish mumkin. Mantiqiy Bul amallarining ishlash algoritmi quyidagicha: AND (VA) amali A AND V shakldagi, A va V ifodalarni argument sifatida olib, ularni Bul qiymat («haqiqat» va «yolg‘on»)larga tekshiradi. Natijada, ikkala argument haqiqiy bo’lsagina, A AND V shart bajarilgan hisoblanadi; OR (YoKI) amali A OR V shakldagi, A va V ifodalarni argument sifatida olib, ularni kamida bittasi haqiqiyligini tekshiradi, shunda shart bajarilgan hisoblanadi; NOT (AKSINChA) amali NOT A shakldagi, A ifodani argument sifatida olib, natijada olingan bul qiymatini teskarisiga o’zgartiradi. MUXANDIS munosabatidan (5.4-rasm) va mantiqiy Bul amallaridan quyida foydalanamiz. Shart bo’yicha oddiy tanlov. Qarshi yoki Gulistondagi bo’limlarda ishlovchi muhandislar aniqlansin. Shartli so’rov «MUXANDISdan (MUXANDIS.MANZIL = ‘QARShI’) OR (MUXANDIS.MANZIL = ‘GULISTON’) TANLANSIN». Shart bo’yicha oddiy tanlov. Maoshi 1500dan kam xodimlar aniqlansin. Shartli so’rov «MUXANDISdan NOT (MUXANDIS.MAOSh>1500) TANLANSIN». Shart bo’yicha murakkab tanlov. 721 bo’limdagi 1500 va undan ortiq maosh oladigan xizmatchilarni tanlashga shartli so’rov yozamiz. «MUXANDISdan (MUXANDIS.BO’LIM_RAQAMI=721) AND (MUXANDIS. MAOSh>=1500) TANLANSIN». Shart bo’yicha murakkab tanlov. Muhandislardan 1500dan ko’p, lekin 5000dan kam oylik oladiganlar tanlansin. Shartli so’rov «MUXANDISdan (MUXANDIS.MAOSh>1500) AND (MUXANDIS. MAOSh <=5000) TANLANSIN». Shart bo’yicha murakkab tanlov. Navoiyda ishlovchi maoshi 2000dan ortiq bo’lgan, xodimlar aniqlansin. Shartli so’rov «MUXANDISdan (MUXANDIS.MAOSh >2000) AND (MUXANDIS.MANZIL = ‘NAVOIY’) TANLANSIN». Bo’lish amali Bo’lish amali algoritmini tushunish biroz qiyinroq. Bo’lish amali munosabatning «tik-yotiq» to’plamini tuzishga, ya’ni bo’linuvchi munosabatning «tik» qism to’plamini, bo’luvchi munosabatning «yotiq» holati bilan kesilishi natijasidagi, «tik» qoldiqdan iborat. Bo’lish amalida qoldiq tushunchasi ishlatilgani uchun uni ÷ bilan belgilashadi. Bo’lish amalini tushunish murakkab bo’lgani uchun uning grafik tasvirini keltiramiz (5.5-rasm). 5.5-rasm. Endi munosabatlar orqali bo’lish amalini tushuntiramiz. Faraz qilaylik, umumiy Y1,Y2, . . . ,Ym atributlarga ega bo’lgan R(X1, X2, . . .,Xn, Y1,Y2, . . . ,Ym) va S(Y1,Y2, . . . ,Ym) munosabatlar berilgan va hamma (y1,y2, . . .,yn) Є S kortejlar uchun R munosabatda (x1,x2, . . .,xn, y1,y2, . . .,yn) kortej mavjud bo’lsin. R munosabatni S munosabatga bo’lish deganda, sarlavhasi (X1,X2, . . .,Xn) va tanasi (x1,x2, . . .,xn) iborat bo’lgan yangi munosabat tushuniladi. Munosabatlarni bo’lishni butun sonlarni qoldiqli bo’lish bilan, «tik» qoldiqni esa qoldiq bilan taqqoslashimiz mumkin. Bo’lish amali xususida yaxshi tasavvurga ega bo’lish uchun misollarni turli munosabatlar ustida keltiramiz. 5.1- misol. TA’MINOTChI munosabati va STATUS munosabatlari berilgan bo’lsin (5.6-rasm). 5.6-rasm. TA’MINOTChI ÷ STATUS natijasida, quyidagi munosabat hosil bo’ladi: 2- misol. QISM va RANG munosabatlari (5.7-rasm) quyidagi ko’rinishda bo’lsin: 5.7-rasm. U holda, QISM ÷ RANG natijasida, quyidagi munosabat hosil bo’ladi: 3- misol. MANZIL munosabati (5.8-rasm) quyidagicha bo’lsin: 5.8-rasm. U holda, munosabatlarni bo’lish QISM ÷ MANZIL natijasida, quyidagi munosabat hosil bo’ladi: Bo’lish amali natijasida amalga oshiriladigan so’rovlar, odatda «hamma» so’zini o’z ichiga oladi. Masalan, Toshkentda ko’k rangdagi, Farg‘onada qizil rangdagi qismlarni ishlab chiqaruvchi hamma qism raqamlari, nomlari va og‘irligi aniqlansin. Tutashish amali Tutashish (join) amali dekart ko’paytmasining hosila amali hisoblanadi, chunki u dekart ko’paytmasidagi tanlash amaliga ekvivalent bo’lib, ikkita operand- munosabatlarning dekart ko’paytmasidan, ya’ni tutashish amalining predikatidagi tanlash shartini qanoatlantiruvchi kortejlardan iborat. Ushbu holdagi algoritm asosida birlashtirishni, ya’ni munosabatlardagi tutashishga asos atributlarning elementlari bir xildagi qiymatga ega bo’lgan kortejlarining kombinatsiyali tutashishini, (join) deb atashadi. Bu amalning natijasi, ya’ni yangi munosabatga bir yo’la atributlarni nusxalash amalini ham qo’llash mumkin. Tutashish amalini belgisi bilan ifodalaymiz. Tutashish amalining turlari ko’p bo’lgani va ularni bir-birdan farqlash uchun, har biri turli nomlar bilan ataladi: tutashish (tabiiy tutashish); yarim tutashish; ekvitutashish; - tutashish; tashqi tutashish. 5.9-rasm. 5.9-rasmdagi R1(A,B,C), R2(B,D,E) va R3(E) munosabatlarni turli usullarda tabiiy tutashish natijasida 5.10-rasmdagi T munosabat turli atributlar ishtirokida keltirilgan, ya’ni bir yo’la nusxalash amali ham bajarilgan. Munosabatlarning tutashish natijalari: 5.10-rasm. a), b) va c) misollarda R1(A,B,C) va R2(B,D,E) munosabatlar birinchi munosabatdagi, lekin ikkalasi uchun bir xil nomga ega bo’lgan, umumiy V atribut asosida tutashtirildi va talab qilingan atributlargina hosil qilindi. d) misolda R2 (B,D,E) va R3 (E) munosabatlar R2 munosabatidagi E atribut asosida tutashtirildi va talab qilingan atributlar hosil qilindi. e) misolda ketma-ket bajarilishi lozim bo’lgan amallar bir yo’la keltirilgan. Avval R1 va R2 munosabatlar V atribut asosida tutashtiriladi, hosil bo’lgan, ya’ni a) misolning natijasidagi E atribut bo’yicha R3 munosabat tutashtiriladi va talab qilingan atributlar bo’yicha natija hosil qilindi. f) misolda R2 va R3 munosabatlar E atribut bo’yicha birlashtirilgan, talab qilingan atribut bo’yicha ikkita bir xildagi kortejlar qatnashgani uchun faqat bittasi qoladi. 5.11-rasmda aniq jadvallar misolida tutashish amali va uning natijasiga misol keltirilgan. 5.11-rasm. Uchta munosabatdan bitta munosabat hosil qilish. Yarim tutashish amali Yarim tutashish amali algoritmining asosida, ikkala munosabatdagi umumiy atributning teng bo’lgan elementlarini birlashtirish yotadi. Yangi munosabatdagi atributlar soni tutashayotgan birinchi munosabatdagi atributlar nomi asosida yaratiladi. 5.9-rasmdagi R1(A,B,C), R2(B,D,E) va R3(E) foydalanib, yarim tutashish amaliga uchta misol keltiramiz: Ekvivalentlik bo’yicha tutashish amali Ekvivalentlik bo’yicha tutashish (qisqacha,ekvitutashish)amalida, ikkita munosabatni turli nomdagi atributlarining elementlari taqqoslanadi. Munosabatlarning bir xildagi qiymatga ega bo’lgan kortejlari kombinatsiyali tutashadi va yangi munosabatni hosil qiladi. Oddiy tutashish amalidan farqi, taqqoslashga asos atributlarning ikkalasi ham qatnashadi. 5.9-rasmdagi R1 va 12-rasmdagi R4 munosabatlarini mos ravishda C va E atributlari bo’yicha tutashtiramiz. Boshqacha aytganda, F predikat (C va E) bo’yicha teng qiymatli atributlarni kombinatsiyali tutashtiradi. 5.12-rasm. Misollardagi = belgisi chap va o’ng ifodalarning aynan bir xilligini ifodalaydi. T(A,B,C,D,E)= R1 R4 ≡ R1[C=E] R4 ekvitutashish natijasida hosil bo’lgan munosabat quyidagicha bo’ladi: 5.13-rasm. 5.13-rasmdagi kursiv bilan ajratilgan kortejlarga e’tibor bering. - tutashish amali - tutashish amali, munosabatlarni tutashish amalining kengaytirilgan varianti bo’lib, ikkita munosabatning dekart ko’paytmasidagi F predikatni qondiruvchi kortejlardan iborat bo’ladi. F predikatda turli taqqoslash belgilari hamda OR va AND ishlatilishi mumkin. 14-rasmdagi MA’LUMOT va OILA munosabatlarini XIZMATChI_RAQAMI va XIZMATChI_KODI atributlari bo’yicha = belgisi va asosida Ө – tutashish natijasidagi to’rtta misolni ko’ramiz. shakldagi F predikat atributlariga turli taqqoslash belgilari va Bul amallarini qo’llash mumkin. 5.14-rasm. a) MA’LUMOT OILA ≡ MA’LUMOT[XIZMATChI_RAQAMI = XIZMATChI_KODI] OILA amali orqali hosil bo’lgan munosabat quyidagicha bo’ladi: b) MA’LUMOT OILA ≡ MA’LUMOT [XIZMATChI_RAQAMI >53800 ORXIZMATChI_KODI> 53800] OILAformulasi orqali hosil bo’lgan yangi munosabat esa quyidagicha bo’ladi: c) MA’LUMOT OILA ≡ MA’LUMOT[XIZMATChI_RAQAMI = XIZMATChI_KODI OR STAJ ≥32] OILA formulasi orqali hosil bo’lgan yangi munosabat quyidagicha bo’ladi: d) MA’LUMOT OILA ≡ MA’LUMOT [XIZMATChI_RAQAMI > 53800 AND STAJ ≥32] OILAformulasi orqali hosil bo’lgan yangi munosabat quyidagicha bo’ladi: e) R1 R4 ≡ R1[C > E] R4 formulasi orqali hosil bo’lgan yangi munosabat quyidagicha bo’ladi: Tashqi tutashish Ikkita munosabatni tashqi tutashish (outer join) natijasida, turlicha algoritm asosidagi yangi munosabat hosil bo’ladi. Tashqi tutashishni, munosabatlarning turlicha tutashishiga nisbatan tashqi chap tutashish, tashqi o’ng tutashish va tashqi to’liq tutashish deb atashimiz ham mumkin. Shunga asosan, tashqi tutashishni 3 xilda amalga oshirish mumkin. Mos kelmagan qiymatlar bo’yicha olingan kortejlar null bilan to’ldiriladi. 1- xil. a) R1 F R2 ≡ R1 [B=B] R2 formula asosida birinchi munosabatdagi kortejlarning hammasi hamda taqqoslanayotgan umumiy atributlarda ikkinchi munosabatning mos qiymatlari bo’lmagan kortejlari ham yangi munosabatga tutashilgan holda kiritiladi. Tashqi chap tutashish natijasida quyidagi yangi munosabatni hosil qilamiz: b) R1 F R2 ≡ R1 [B > B] R2 formula asosida tashqi chap tutashish natijasida quyidagi yangi munosabatni hosil qilamiz: 2- xil. R1 F R2 ≡ R1 [B = B] R2 ikkinchi munosabatdagi kortejlarning hammasi hamda taqqoslanayotgan umumiy atributlarda birinchi munosabatdagi mos qiymatlari bo’lmagan kortejlar ham yangi munosabatga tutashilgan holda kiritiladi. Tashqi o’ng tutashish natijasida quyidagi yangi munosabatni hosil qilamiz: 3- xil. R1 F R2 ikkala munosabatdagi kortejlarning hammasi hamda taqqoslanayotgan umumiy atributlar bo’yicha ikkala munosabatdagi o’zaro mos qiymatlari bo’lmagan kortejlar ham yangi munosabatga tutashilgan holda kiritiladi. Tashqi to’liq tutashish natijasida quyidagi yangi munosabatni hosil qilamiz: Quyidagi 1 jadvalda yuqorida keltirilgan relatsion amallarning muqobil belgilash sintaksisi keltirilgan. 1-jadval 6. Ma’lumotlar bazasini normallashtirish. Normal formalar 1NF, 2NF, 3NF va Kodd. 6.1. Mantiqiy loyixalash Bu bosqichning asosiy vazifasi MBBT ga mo’ljallangan mantiqiy sx’emani yaratishdan iborat. Bu bosqichda relyatsion modelning munosabatlari (MBBT jadvallari), atributlari (jadval ustunlari) va atributlar tiplari (ustunlardagi ma’lumotlar tiplari) aniqlanadi. Mantiqiy loyixalashning bir nechta asosiy metodlari mavjud. Bular:: - ER-diagrammani mantiqiy sxemaga aylantirish; - jadvallarni normallashtirish. 6.2. Jadvallarni normallashtirish Normallashtirish – bu ma’lumotlar bazasidagi ma’lumotlarni ortiqchaligini kamaytirishdir. Normallashtirish– bu jadvalni ma’lumotlarni qo’shish, o’zgartirish va o’chirish uchun qulay bo’lgan ikkita yoki undan ko’p jadvallarga bo’lishdir. Normallashtirishni asosiy maqsadi – shunday ma’lumotlar bazasini yaratishga qaratilgan, unda faktlar bir marta qayt qilinadi, ya’ni ma’lumotlar ortiqcha yoki takrorlanishi mumkin emas. Munosabatlar sxemasining jadvalga ma’lumot kiritish, o’zgartirish va o’chirish uchun qulay xossaga ega bo’lgan relyatsion variantini qurish. Jadvallarni normallashtirish mantiqiy loyixalashning eng formal (tartibga solingan) metodi bo’lib, uni qo’llanganda ER-diagrammani qurish talab еtilmaydi. Normallashtirish jarayoni bir normal formadan boshqasiga o’tish amallaridan iborat bo’lib, unda har bir navbatdagi jadval oldingisiga nisbatan yaxshi xossalarga ega bo’ladi. Har bir normal forma uchun bir qator talablar qo’yilgan va jadval normallashtirilgan deyiladi agar u qo’yilgan talablarga javob bersa. Relyatsion ma’lumotlar bazasi nazariyasida quyidagi normal formalar ketma – ketligi ajratib ko’rsatiladi: - birinchi normal forma (1NF); - ikkinchi normal forma (2NF); - uchinchi normal forma (3NF); - Boys-Kodd normal formasi (BCNF); - to’rtinchi normal forma (4NF); - beshinchi normal forma yoki proektsiya – ulash normal formasi (5NF yoki PJ/NF). Normal formalarning asosiy xossalari: - har bir navbatdagi normal forma qaysidir ma’noda oldingisiga qaraganda yaxshi; - navbatdagi normal formaga o’tganda oldingi normal forma xossalari saqlab qolinadi. 6.2. Birinchi normal forma. Jadval birinchi normal formada deyiladi, qachonki undagi hech bir qatorning istalgan maydonda bittadan ortiq qiymat joylashgan bo’lmasa va birorta kalit maydoni bo’sh (NULL qiymatli) bo’lmasa ; Boshqacha aytganda birinchi normal forma bu har bir satr va ustun kesishmasida bitta bo’linmas atomar qiymat joylashgan munosabat yoki jadvaldir. Birinchi normal formani o’rganishdan oldin normal bo’lmagan forma tushunchasini o’rganib chiqamiz. Normal bo’lmagan forma (NNF) – bu bir yoki bir nechta takrolanuvchi ma’lumotlar guruxiga ega bo’lgan jadval. Takrolanuvchi gurux tushunchasi. Takrorlanuvchi gurux ER – diagrammalardagi munosabatning ko’p qiymatli atributiga mos keladi. Takrolanuvchi gurux (repeating group) - bu har bir maydonida bir nechta qiymat joylashgan atribut. Misol. Masalan xodimlar munosabatida (jadvalida) farzandlar nomini va tug‘ilgan kunlarini saqlash zarur bo’lsin. Har bir xodimda bir nechta farzand bo’lishi mumkin. Shuning uchun farzandlar tug‘ilgan kuni va ismlari takrorlanuvchi guruhni tashkil etadi. Xodimlar Xodim_I D 1001 1002 1003 Ism Fam Jane John Jane Doe Doe Smith Farzand ismlari Farzand tug_kun Masu, Sam 1/1/92,5/15/94 Mary, Sam 2/2/92,5/10/94 John, Pat, Lee, 10/5/94,10/12/90,6/6/96,8/21 Masu /94 1004 John Smith Michael 7/4/96 1005 Jane Jones Edward, Martha 10/21/95, 10/15/89 Rasm 6.1.Takrorlanuvchi guruxga ega bo’lgan normallashtirilmagan munosabat Bu jadvalda ko’rinib turganidek har bir satrning ikkita (Farzand_ismlari, Farzand_tug_kun) bittadan ko’p qiymat joylashgan. ustunida 6.3. Takrorlanuvchi guruxlarni bartaraf etish. Keltirilgan jadvalni birinchi normal formaga keltirishning yoki takrorlanuvchi guruxlarni bartaraf etishning ikkita usuli mavjud: noto’g‘ri va to’g‘ri. Noto’g‘ri usul. Birinchi usulda takrorlanuvchi guruxlar har bir takrorlanuvchi qiymat uchun jadvalga alohida ustun qo’shish orqali bartaraf etiladi. Ba’zi xolatlarda bu usul to’g‘ri bo’ladi. Ba’zi xolatlarda esa jadval birinich normal formaga kelgani bilan guruxdagi qiymatlarning soni bilan bog‘liq muammo kelib chiqadi. Misol. Yuqorida keltirilgan jadvalda Farzand_ismlari va Farzand_tug_kun ustunlarini uchta ustunga ajratamiz. Xodimlar Xodim _ID 1001 1002 1003 1004 1005 Ism Fam Jane John Jane John Jane Doe Doe Smith Smith Jones Farzand1_ ismi Masu Mary, John, Michael Edward Farzand2_i smi Sam Sam Pat Farzand3_i smi Lee Martha F1_tug_k F2_tug_k F3_tug_k 1/1/92 2/2/92, 10/5/94 7/4/96 10/21/95 5/15/94 5/10/94 10/12/90 6/6/96 10/15/89 Rasm 6.2. Takrorlanuvchi guruxlarni noto’g‘ri bartaraf etilishi 6.2 rasmda keltirilgan jadval birinchi normal forma talablarini qanoatlantiradi. Biroq unda bir qator muammolar vujudga kelgan. Jadvalda xar bir xodim uchun faqat uchta farzand bilan chegaralangan. Unda xodimning 4-farzandi xaqida ma’lumot saqlash imkoni yo’q. Xodimlarning farzandi uchtadan kam bo’lgan xodimlarda jadvalning ko’gina qismi bekor qoladi. Konkret farzandni izlash amali murakkablashadi. To’g‘ri usul. Ikkinchi usulda bolang‘ich jadvaldagi biror atribut yoki atributlar kalit sifatida belgilanadi, keyin takrolanuvchi guruxlar joriy jadvaldan olinib aloxida jadvalga o’tkaziladi. Bunda takrorlunvchi guruxdagi har bir qiymat kalit nusxasi bilan birga yangi jadvalga o’tkaziladi. Yangi jadvalga o’tkazish har bir takrorlanuvchi gurux uchun bajariladi. Agar yaratilgan jadvalda ham takrorlanuvchi guruxlar mavjud bo’lsa ular uchun ham to’g‘ri yoki noto’g‘ri usul qo’llaniladi. Misol. Keltirilgan misolda farzand ismlari va tug‘ilgan kunlari xaqidagi ma’lumotlar yangi jadvalga o’tkaziladi. Unda boshlang‘ich jadvalda Xodim_ID 1001 1002 1003 1004 1005 Xodimlar Ism Jane John Jane John Jane Fam Doe Doe Smith Smith Jones Farzand Xodim_ID 1001 1001 1002 1002 1003 1003 1003 1003 1004 Ism Masu Sam Mary Sam John Pat Lee Masu Michael Tug_yil 1/1/92 5/15/94 2/2/92 5/10/94 10/5/94 10/12/90 6/6/96 8/21/94 7/4/96 1005 1005 Edward Martha 10/21/95 10/15/89 6.3-rasm. Takrorlanuvchi guruxlarni to’g‘ri bartaraf etilishi Birinchi normal formaga bo’lgan talablar quyidagilardan iborat: 1) Berilgan boshlang‘ich munosabat tasvirlangan relyatsion jadvalning har bir atributining qiymati atomar bo’lishi kerak. Ya’ni bu qiymat relyatsion jadval (munosabat) bo’lishi mumkin emas; 2) boshlang‘ich munosabat ma’lumotlar orqali – ya’ni relyatsion jadval va unga tegishli bo’lgan ma’lumotlar bazasining butunlik shartlari orqali ifodalanadi. Xususan bu quyidagilarni bildiradi: 3) jadvalda bir satrlar (kortejlar, yozuvlar) mavjud emas; 4) har bir ustun jadvalda atribut nomi bilan nomlangan va atriutning joriy qiymatlaridan iborat bo’ladi; 5) har bir atribut ma’lum domen (ma’lumotlarning abstrakt tipi) bilan bog‘langan; 6)agar relyatsion jadvalda (munosabatda) ushbu jadval ilan ishlashe’tiborga olinishi kerak bo’lgan funktsional bog‘lanishlar mavjud bo’lsa, u xolda ushbu bog‘lanishlar ma’lumotlar bazasining butunlik shartida qayd qilinadi; 7) yozuvlar yaqqol va noyaqqol tartiblan gan (masalan, jimlikka ko’ra foydalanuvchiga ma’lum yoki noma’lum shaklda). Xususan tartiblanganligiga qat’iy talablar qo’yilmaydi (bu talab effektiflik bilan yoki ishlashdagi qulaylik bilan bog‘liq); 8) birlamchi kalitning xech biri bo’sh (NULL) bo’lmasligi kerak; 9) agar 1NF darajasida kalitlar belgilansa (kalit keyinroq – 2NF da aniqlanishi ham mumkin), u xolda ko’rsatgichlarning butunlik sharti qanoatlantirilishi kerak. MB ni qurishdagi muammolar Muammolarni quyidagi misolda tushuntiramiz ПОСТАВЩИКИ (NAZV_POST, ADRES_POST, TOVAR, TSENA) Bu sxemada quyidagi muammolar mavjud: 1. Ortiqchalik. Yetkasib beruvchi (postavщik) adresi har bir yеtkaziluvchi tovar uchun takrorlanayapti. 2. Ziddiyatlilik (yangilash anomaliyalari). Ortiqchalik natijasida bir satrdagi yеtkazib beruvchi (поставшик) adresini o’zgartirishimiz, boshqa satrda o’zgartirishsiz qoldirish extimolligi mavjud. Natijada ba’zi еtkazib beruvchida har xil adres yuzaga keladi. Aslida esa adres bitta bulishi kerak. 3. Qo’shishi anomaliyasi. Ma’lumotlar bazasiga еtkazib beruvchi adresini qo’shish imkoni bo’lmaydi agarda u joriy vaqtgacha bitta xam tovar еtkazib bermagan bo’lmasa. Albatta bu еrda еtkazib beruvchini nomi va adresini biror satrda yozib, TOVAR va TSENA maydoniga ixtiyoriy qiymat kiritib qo’yishimiz mumkin. Biroq u biror tovar еtkazganida ixtiyoriy qiymat yozilgan satrni o’chirishni unutmaymizmi? Bundan tashqari TOVAR va NAZV_POST joriy jadvalda kalit xisoblanadi va kalit qiymatlari ixtiyoriy bo’lgan satrni izlash qiyin yoki imkoni yo’q buladi. 4. O’chirish anomaliyasi. Joriy еtkazib beruvchi barcha tovarlarni o’chirganda teskari muammo vujudga keladi, ya’ni еtkazib beruvchini adresini yo’qotamiz. Savol: «qanday o’zgartirishlar qilsak yaxshi xossali jadvalga ega bo’lamiz?» 6.4. Funktsional bog‘lanish tushunchasi. Relyatsion MB da ma’lumotlarni strukturasidan tashqari ularni sxematik informatsiyasiga ham e’tibor beriladi. MB ni strukturasi haqidagi informatsiya munosabat sxemasi yordamida beriladi. Sxematik informatsiyalar esa atributlar orasidagi funktsional bog‘lanishlar orqali ifodalanadi. MB munosabatlarida atributlarni tarkibini quyidagi talablarga javob beradigan qilib guruxlash kerak: Atributlar orasidagi zaruriy bo’lmagan takrorlanishlar bo’lmasligi kerak. Atributlarni guruxlaganda ma’lumotlar takrorlanishi minimal darajada qilib ta’minlanishi kerak. Bu bevosita ma’lumotlarni tez qayta ishlash imkonini beradi. Bunga normallashtirish jarayoni yordamida erishiladi. Normallashtirishda mumkin bo’lgan barcha funktsional bog‘lanishlar aniqlanadi. Misol. A va V atributlar berilgan bo’lsin. Agar ixtiyoriy vaqtda A atributni bittadan ortiq bo’lmagan qiymati mos kelsa, unda V atributda funktsional bog‘langan deyiladi va quyidagicha belgilanadi: A→V Shaxsiy nomer → Familiya Mansabi → Maosh bog‘lanishlar Funktsional bog‘lanish (functional dependency) — bu atributlar o’rtasidagi bog‘lanishdir. Ya’ni, biror atribut qiymati orqali ikkinchi atribut qiymatini xisoblash yoki topish mumkin. Masalan, bizga mijoz xisobining raqami ma’lum bo’lsa, uning xisobi xolatin aniqlashimiz mumkin. Bu xolatda MijozXisobXolati atributining qiymati MijozXisobRaqami atributiga funktsional bog‘liq deb ataladi. Umumiy qilib aytganda, Y atribut X atributga funktsional bog‘liq deyiladi, agar X qiymati orqali Y ni qiymati aniqlansa. Boshqacha aytganda, agar X qiymati ma’lum bo’lsa u orqali Y ni qiymatini aniqlash mumkin. Birinchi normal forma Munosabat talablarini bajaruvchi ixtiyoriy jadval birinchi normal formada (first normal form, 1NF) deyiladi. Jadval munosabat bo’lishi uchun quyidagilar bajarilishi kerak: jadval kataklarida bo’linmas qiymatlar joylashishi va qiymati takrorlanuvchi gurux yoki massiv bo’lmasligi kerak. Bitta ustundagi (atributdagi) barcha yozuvlar bir xil tipli bo’lishi kerak. Har bir ustun unikal nomiga ega bo’lishi va jadvalda ustunlarni joylashish ketma-ketligi ahamiyatga ega emas. Nihoyat, jadvalda 2 ta bir xil satr bo’lmasligi va satrlarni joylashish ketma-ketligi ahamiyatga ega emas. Ikkinchi normal forma Munosabat ikkinchi normal formada deyiladi, agar uning barcha kalit bo’lmagan atributlari barcha kalit atributlarga bog‘liq bo’lsa. Ushbu talabga asoslangan xolda aytish mumkin, agar munosabat kaliti yagona atributdan iborat bo’lsa, u xold bu munosabat avtomatik xolda 2 –chi normal formada deyiladi. Chunki agar kalit yagona atributdan iborat bo’lsa, u xolda har bir kalit bo’lmagan atribut barcha kalitlarga bog‘liq bo’ladi va xususiy bog‘lanishlar mavjud bo’lmaydi. Shunday qilib, ikkinchi normal forma kompozit (tarkibli) kalit mavjud bo’lgan munosabatlar uchun o’rinli. Uchinchi normal forma. Ikkinchi normal formadagi munosabat ham anomaliyalarga (muammolarga) ega bo’ladi. 6.4-rasmdagi jadvalni ko’rib chiqamiz. Unda kalit atribut TalabaRaqami, va quyidagi funktsional bog‘liqliklar mavjud TalabaRaqami -> TalabalarTurarJoyi --> To’lov. Bu bog‘lanish kelib chiqishi quyidagicha, har bir talaba faqai bitta talabalar turar joyida yashaydi va har bir talabalar turar joyidagi talabalardan bir xildagi to’lov olinadi. Masalan, Shaxriston-№1 talabalar uyida yashaydigan talabalarning barchasi kvartal uchun 32000 so’m to’laydi. TalabaRaqami TalabalarTurarJoyi To’lov 100 Shaxriston-№1 32000 150 Sebzar-№2 41000 200 Shaxriston-№1 32000 250 №5 25000 300 Shaxriston-№1 32000 Rasm-6.4. Funktsional bog‘lanishlar: TalabalarTurarJoyi ->To’lov, TalabaRaqami ->TalabalarTurarJoyi ->To’lov Ko’rib o’tganimizdek, TalabaRaqami atributi TalabalarTurarJoyi atributini aniqlaydi, TalabalarTurarJoyi esa To’lov ni aniqlaydi. Shuning uchun TalabaRaqami bilvosita To’lov ni aniqlaydi. Funktsional bog‘liqlikni bunday tuzilmasi tranzitiv bog‘liqlik (transitive dependence) deb ataladi, chunki TalabaRaqami atributi TalabalarTurarJoyi atributi orqali (bilvosita) To’lov atributini aniqlaydi. Jadvalda TalabaRaqami yagona kalit xisoblanadi va jadval 2chi normal formada joylashgan (TalabalarTurarJoyi ham, To’lov ham TalabaRaqami orqali aniqlanadi.). Shunga qaramasdan bu jadval tranzitiv bog‘liqlik tufayli anomaliyalarga ega.. Misolda keltirilgan jadvalda ikkinchi satrni o’chirsak nima yuz beradi? Bunda biz №150 raqamli talaba Sebzar-№2 \tadabadar turar joyida yashashligi bilan birga ushbu turar joyda kvartal to’lov 41000 so’m ekanligi faktini ham yo’qatamiz. Bu o’chirishdagi anomaliya. Bu jadvalga №3 turar joyda yashash uchun kvartal to’lov 37000 so’m ekanligini qanday kiritamiz? Iloji yo’q, chunki bu turar joy xaqida jadvalga ma’lumot kiritilmagan. Bu ma’lumot kiritish anomaliyasi. TalabaRaqami 100 150 200 250 300 TalabalarTurarJoyi Shaxriston-№1 Sebzar-№2 Shaxriston-№1 №5 Shaxriston-№1 TalabalarTurarJoyi Shaxriston-№1 Sebzar-№2 Shaxriston-№1 №5 Shaxriston-№1 To’lov 32000 41000 32000 25000 32000 Keltirilgan ikkinchi normal formadagi munosabatdan anomaliyalarni bartaraf etish uchun tranzitiv bog‘liqliklarni yo’q qilish kerak. Munosabat 3-chi normal formada deyiladi, agar u 2-chi normal formada bo’lsa, hamda tranzitiv bog‘liqliklarga ega bo’lmasa. Boysa-Kodd normal formasi. Funktsional bog‘lanishlar: O’qituvchi-> Mutaxassislik Konsultant TalabaRaqami 100 150 200 250 300 300 Mutaxassislik Matematika Psixologiya Matematika Matematika Fizika Psixologiya O’qituvchi Koshi Yung Riman Koshi Ridan Perle Bu munosabatda talaba bir nechta mutaxassislikka o’qishi mumkin, TalabaRaqami atributi Mutaxassislik atributini aniqlamaydi. Qolaversa, talaba bir nechta o’qituvchiga ega bo’lishi mumkin, shuning uchun TalabaRaqami atributi O’qituvchi atributini ham aniqlay olmaydi. Shunday qilib munosabatda TalabaRaqami kalit bo’lolmaydi. (TalabaRaqami, Mutaxassislik) kombinatsiyasi O’qituvchi atributini aniqlaydi, (TalabaRaqami, O’qituvchi) kombinatsiyasi Mutaxassislik atributini aniqlaydi. Demak, ushbu kombinatsiyalarni ixtiyoriy biri kalit bo’lishi mumkin. Kalit bo’lishi mumkin bo’lgan 2 ta yoki ko’p atributlar yoki atributlar gruppasi kalitkandidatlar (candidate keys) deb ataladi. Ushbu kalit-kandidatlardan kalit sifatida tanlangani birlamchi kalit (primary key) deyiladi. Kalit-kandidatlardan tashqari ko’rib chiqilishi kerak bo’lgan yana bir funktsional bog‘liqlik mavjud: O’qituvchi atributi Mutaxassislik atributini aniqlaydi (ixitiyoriy bir o’qituvchi bitta fan bo’yicha o’qitadi; demak o’qituvchi ismi orqali mutaxassislikni aniqlash mumkin). Shunday qilib, O’qituvchi determinant xisoblanadi. Aniqlanishiga ko’ra, KONSULTANT munosabati birinchi normal formada. Shuningdek u ikkinchi normal formada ham, chunki kalit bo’lmagan atributlarga ega emas (har bir atribut kamida bitta kalitni qismi xisoblanadi). Nihoyat, bu munosabat uchinchi normal formada deb ham ayta olamiz, chunki tranzitiv bog‘liqliklarga ega emas. Shunga qaramasdan bu munosabat modifikatsiyalash anomaliyasiga ega. Deylik 300 raqamli talaba universitetdan chiqarildi. Agar ushbu 300 raqamli talaba xaqidagi satrni o’chirsak, u xolda Perle psixologiya fani bo’yicha o’qituvchi ekanligi faktini xam yo’qotamiz. Yana, Keyns iqtisodiyot bo’yicha o’qituvchi faktini qanday qo’shamiz? Iqtisodiyot bo’yicha o’qiydigan talaba paydo bo’lmaguncha buni iloji yo’q. Bu o’chirish anomaliyasi. Yuqorida keltirilgan xolatlar Boysa-Kodda(Boyce-Codd normal form, BK/NF ) normal formasi tushunchasiga olib keladi: munosabat NFBK da deyiladi, agar har bir determinant kalit-kandidat bo’lsa. KONSULTANT munosabati NFBK da emas, chunki O’qituvchi determinanti kalit-kandidat emas. TalabaRaqami O’qituvchi 100 150 200 250 300 300 O’qituvchi Koshi Yung Riman Koshi Ridan Perle Koshi Yung Riman Koshi Ridan Perle Mutaxassislik Matematika Psixologiya Matematika Matematika Fizika Psixologiya Boshqa misollardagi kabi KONSULTANT munosabatini anomaliyalarga ega bo’lmagan 2 ta munosabatga ajratish mumkin. Masalan, TALABA– KONSULTANT (TalabaRaqami, O’qituvchi) va KONSULTANTMUTAXASSISLIK (O’qituvchi, Mutaxassislik) anormaliyalarga ega emas.(rasm5). To’rtinchi normal forma Ko’p qiymatli bog‘lanishlar: TalabaRaqami->-> Mutaxassislik, TalabaRaqami->->Sektsiya TALABA TalabaRaqami 100 100 100 100 150 Mutaxassislik Musiqa Bux xisobi Musiqa Buxgal xiobi Matematika Sektsiya Suzish Suzish Tennis Tennis Soglomlashtiruvchi yugirish Rasm 6.5. Ko’p qiymatli munosabat Rasm 6.5 dagi talabalar, mutaxassislar va sektsiya o’rtasidagi bog‘lanishlarni tasvirlagan TALABA munosabatini ko’rib chiqamiz. Faraz qilamiz talabalar bir nechta mutaxassisliklarda o’qishi va bir nechta sektsiyalarda shug‘ullanishi mumkin bo’lsin. Bunday xolda yagona kalit (TalabaRaqami, Mutaxassislik, Sektsiya) kombinatsiyasidan iborat. Masalan, 100 raqamli talaba musiqa va buxgalteriya mutaxassisliklarida o’qishi, hamda bulardan tashqari suzish va tennis sektsiyalariga qatnaydi. 150 raqamli talab esa faqat matematika mutaxassisligida o’qiydi va yugurish setsiyasiga qatnaydi. TalabaRaqami va Mutaxassislik atributlari o’rtasidagi bog‘lanish qanday? Bu funktsional bog‘liqlik emas, chunki talaba bir necha mutaxassislikda o’qishi mukin. TalabaRaqami atributining bitta qiymatiga Mutaxassislik atributining bir necha qiymati mos keladi. Shu bilan birga TalabaRaqami atributining bitta qiymatiga Sektsiya atributining bir necha qiymati mos keladi. Atributlar o’rtasidagi buntday bog‘liqlik ko’p qiymatli bog‘liqlik )multivalue dependency) deyiladi. Ko’p qiymatli bog‘lanishlar modifikatsiyalash anomaliyasiga olib keladi. Dastlab rasm 6 dagi ma’lumotlar ortiqligiga e’tibor qiling. 100 raqamli talaba xaqida 4 a yozuv bor bo’lib, ularni har birida bitta mutaxxassisligi va bitta sektsiya ko’rsatilgan. Agar ushbu ma’lumotlar kamroq sonli satrlarda (deylik 2 ta satrda joylashsa – biri musiqa va suzish, ikkinchisi bux xisobi va tennis), joylashsa bu foydalanuvchiga noqulaylik tug‘diradi. Mutaxassislik va sektsiya bir biridan mustaqil. Shuning uchun bunday xolatlarni bartaraf etish uchun mutaxassislik va sektsiyalarni barcha juftliklarini saqlab qo’yiladi. TALABA (6.6-rasm) TalabaRaqami 100 100 100 100 100 150 Mutaxassislik Musiqa Musiqa Buxgal xiobi Musiqa Bux xisobi Matematika a Sektsiya Lija Suzish Suzish Tennis Tennis Yugurish TalabaRaqami 100 100 100 100 100 100 150 Mutaxassislik Musiqa Bux xisobi Musiqa Buxgal xiobi Musiqa Bux xisobi Matematika Sektsiya Lija Lija Suzish Suzish Tennis Tennis Yugurish b Faraz qilaylik 100 raqamli talaba Lija sektsiyasiga yozilmoqchi. Shuning uchun jadvalga 6.6a-rasmda ko’rsatilgani kabi [100, Musiqa, Lija] satrini qo’shamiz. Endi jadvalga qarab quyidagi: 100 raqamli talaba lija bilan musiqachi sifati shug‘ullanishi, buxgalter sifatida shug‘ullanolmaydi degan noto’g‘ri xulosaga kelinadi. Ma’lumotlar mos xarakterga ega bo’lishi uchun 100 – chi talabaga qancha mutaxxassislik bo’lsa shuncha satr va ularni har birida lija sektsiyasini ko’rsatish lozim bo’ladi. Shuning uchun yana 6.6b – rasmda keltirilganidek [100, Buxgalteriya xisobi, Lija] satrini qo’shamiz. Bu ma’lumotlarni yangilash anomaliyasi, ya’ni oddiy o’zgartish kiritish uchun juda ko’p modifikatsiyalarni amalga oshirish kerak. Umuman olganda ko’p qiymatli bog‘liqlik munosabatda 3 ta atribut bo’lganda mavjud bo’ladi.. bunda ulardan ikkitasi ko’p qiymatli bog‘langan va ularni qiymati 3-chi atributga bog‘liq bo’ladi. Boshqacha aytganda R(A, B, C) munosabatda ko’p qiymatli bog‘lanish mavjud bo’ladi, agar A ko’p qiymatli tarzda B va C ni aniqlasa, B va C ni o’zlari esa bir-biriga bog‘liq bo’lmasa. Yuqorida keltirilgan misolda ko’rganimizdek, TalabaRaqami atributi ko’pqiymatli tarzda Mutaxassislik va Sektsiya atributlarini aniqlaydi va Mutaxassislik va Sektsiya atributlari bir-biriga bog‘liq emas. Ushbu anomaliyani yo’qotish uchun ko’p qiymatli bog‘lanishlarni bartaraf etish kerak. Buning uchun 2 ta munosabat yaratamiz va ularni har birida bittadan ko’p qiymatli atribut uchun ma’lumotlar saqlanadi. Natijaviy munosabatlar anomaliyaga ega bo’lmaydi. Bu 6.7 rasmda ko’rsatilganidek TALABA MUTAXASSISLIK (TalabaRaqami, Mutaxassislik) va TALABA - SEKTSIYa (TalabaRaqami, Sektsiya) munosabatlaridir. TalabaRaqami Sektsiya 100 Lija TALABA TalabaRaqami 100 100 150 Mutaxassislik Musiqa Buxgal xiobi Matematika 100 100 150 Suzish Tennis Yugurish Rasm -6.8. Ko’p qiymatli bog‘lanishlarni bartaraf etish Munosabat to’rtinchi norma formada deyiladi agar u BKNF da bo’lsa va ko’p qiymatli bog‘lanishlarga ega bo’masa. Beshinchi normal forma Beshinchi normal forma bir qator aniqlanmagan xarakterga ega bo’lgan bog‘lanishar bilan bog‘liq. Bu еrda gap yuqoridagi kabi bir nechta mayda munosabatlarga bo’linadigan va keyin qayta tiklash mumkin bo’lmagan munosabatlar xaqida boradi. Ushbu xolat yuz beradigan shart aniqmas va intuitiv interpretatsiya qilinmaydi. Bunday bog‘lanishlarni oqibatlari bizga ma’um emas. 7. SQL tili. SQL operatorlarini yozish. 7.1. SQL tilining vazifalari 3. SQL ma’lumot toifalari 4. SQL tilining SELECT (tanlash) operatori va uning parametrlari Ma’lumotlar bilan ishlash uchun mo’ljallangan MBBTichki tili ikki qismdan tashkil topgan: Ma’lumotlar aniqlash tili (DATA DEFINITION LANGUAGE) va ma’lumotlar bilan manipulyatsiya qilish tili (DATA MANIPULATION LANGUAGE) DDL tili ma’lumotlar baza sxemasini aniqlash uchun ishlatiladi. DML tili bazada saqlanayotgan ma’lumotlarni o’qish va tiklash uchun ishlatiladi. Bu tillar ma’lumotlarni qism tillari yuqori darajali dasturlash tillari deyiladi, chunki ularni tarkibida barcha xisoblarni bajarish uchunzarur bo’lganda bo’ladigan til kostruksiyalari bo’lmaydi (shartli o’tish amallari, yoki sikl operatori). Ma’lumot bazasi ishlaydigan imkoniyatlarni berishi kerak: ixtiyoriy til foydalanuvchiga quyidagi - Ma’lumot bazasi va jadvallarni tuzilishi va tafsifini yarata olish - ma’lumotlar bilan manipulyatsiya qilishni asosiy amallarini jumladan jadvalga ma’lumotlarni kiritish,( qo’shish),ularni takomillashtirish, jadvaldan ma’lumotlarni olib tashlash -oddiy va murakkab so’rovlarni bajarish SQL TILINING VAZIFASI. Ma’lumotlar bazasi bilan ishlash tillari ko’rsatilgan masalalarni foydalanuvchi kim kuch sarf qilib еchishi imkoniyatini berishi kerak. Tilning komandalarini tuzilishi va sintaksisi еtarli darajada sodda va o’rganishga oson bo’lishi kerak. Bundan tashqari u universal bo’lishi kerak. Ya’ni qandaydir standart talablariga javob berishi kerak. Bu esa uni komanda strukturasini va sintaksisini (yozilishini) bir qancha MBBTishlatishini imkonini beradi. Bu talablarni barchasiga SQL javob beradi. SQL-(STRUSTURE QUERY LANGUAGE) (STRUKTURALAShGAN SO’ROVLAR TILI) SQL ma’lumotlarni almashtirish tili bo’lib xisoblanadi, ya’ni u jadvallar bilan ishlash mo’ljallangan bo’lib, kiruvchi ma’lumotlar talab etilgan chiquvchi ko’rinishga ega xolga aylantirib beradi. SQL tili ikkita asosiy komponentga ega: -DDL tili (DATA DEFINITION LANGUAGE ma’lumotlar aniqlash tili) bu ma’lumotlar ba’zi strukturasini aniqlash va ma’lumotlarga murojaatni boshqarish uchun mo’ljallangan. DML tili (DATA MANIPULATION LANGUAGE) ma’lumotlarni manipulyatsiyalash tili. Ma’lumotlarni ajratish va tiklash uchun mo’ljallangan. -bu til noprotsedura tili ,shuning uchun unga qanday axborot olishi kerakligi ko’rsatiladi, lekin axborotni qanday olish emas. Boshqacha aytganda SQL tili ma’lumotlarga murojaat usulini ko’rsatishni talab etmaydi. SQL tili operatorlarni erkin formatda yozishini ta’minlaydi. Buning ma’nosi, operatorlar elementlarini yozilishi ekrandan fiksirlangan joylarga bog‘liq еmas. Komanda strukturasi bir qancha kalit xizmatchi so’zlar bilan beriladi, masalan: CREATE TABLE (sozdat tablitsi- jadval yaratish) INSERT (vstavka-qo’yish) SELECT (vыbrat-ajratib olish) SQL operatori xizmatchi so’zlar va foydalanuvchi qo’llaydigan so’zlardan tashkil topadi. Xizmatchi so’zlar SQL tili doimiy qismi bo’lib, ular aniq qiymatga еga. Ularni standartda ko’rsatilganday yozish kerak va ularni bir satrdan ikkinchisiga ko’chirish uchun bo’linmaydi. Foydalanuvchi tomonidan aniqlangan so’zlar, foydalanuvchi tomonidan ma’lum sintaksis qoidalari asosida beriladi. Ular o’z navbatida ma’lumot baza ob’ektivlarini xar xil nomlari iborat bo’ladi (jadval, ustun, tasvirlar, indekslar va x.k.). Operatordan so’zlar o’rnatilgan sintaksis qoidalariga moslab joylashtiriladi. Til standartida bu ko’rsatilmagan bo’lsa xam, SQL tilining dialektlarida (ko’rinishida)matn tugallanganini bildiruvchi belgi, ko’pgina xollarda nuqtali vergul(;) ishlatiladi. SQL operator komponentalarini ko’pchiligi registrga bog‘liq еmas, ya’ni ixtiyoriy xar qanday katta va kichik xarflvr ishlatishi mumkin. Bularda bitta istisno bor. Bu istisno simvolli literallarga tegishli. Ulardalitera ma’lumotlar, ularga mos bo’lgan ma’lumotldar bazasidagi qiymatlar qanday saqlansa shunday yozilishi kerak. Masalan: agar ma’lumotlar bazasida familiyaning qiymati «SWITH»ko’rinishida bo’lsa, qidirish shartida «SWITH» simvol literal ko’rinishida berilsa, bunga tegishli yozuv xech kachon topilmaydi. SQL tili еrkin formatga еga bo’lgani uchun, SQL aloxida operatorlari va ularning ketma-ketligini, aloxida ajratib yozish va tekislab yozishni ishlatish mumkin. Quyidagi qoidalarga bo’ysunish talab еtiladi: -operatordagi xar bir konstruksiya yangi satrdan boshlanishi kerak; -xar bir konstruksiya boshlanishida tashlab ketladigan bo’sh pozitsiyalar, boshqa operator konstruksiyalari xam bo’lishi kerak; -agar konstruksiya bir necha qismdan iborat bo’lsa, ularning xar biri qism yangi satrlardan bo’sh o’rinlarni oldingi konstruksiyaga nisbatan siljitib yoziladi. Amaliyotda ma’lumot bazasi tuzilishini (asosan uni jadvallarini) aniqlash uchun DDL operatorlari ishlatadi, bu jadvallarni ma’lumotlar bilan to’ldirish uchun va ulardan axborotlarni so’rovlar yordamida ajratib olish uchun - DML operatorlari ishlatiladi. Ma’lumotlar bilan manipulyatsiyalash SQL tilini DML peratorlarini ko’llaymiz. 7.2. Interaktiv va qurilgan SQL. SQL tilini ikkita shaklida mavjud va ishlatiladi. -interaktiv SQL - qurilgan (kiritilgan) SQL Interaktiv SQLda foydalanuvchi SQL- so’rovlar va natija interaktiv rejimda olinadi. Qurilgan SQL, SQLkomandalaridan tashkil topib, u boshqa birorta tilga (C++, C, Delphi) yozilgan dastur ichiga joylashtiriladi. Bu shunday tillarni ishlatadigan dasturlarni samarador, quvvatli qiladi. Ulargarelyatsion ma’lumotlar bazasi bilan ishlash imkonini beradi. SQL ma’lumot toifalari. Simvollar satr ma’lumot SQLstandartida matnlarni faqat bitta tavsifi keltiriladi. Uning sintaksisi toifasi CHARACTER[(UZUNLIGI)] YOKI CHAR[(UZUNLIGI)] Jadvalni matnli qiymatli CHAR toifasidagi fikrlangshan uzunlikda bo’lishi mumkin. Bu parametr qiymati 1 - 255 bo’lishi mumkin, ya’ni u 255 simvolgacha bo’lishi mumkin. SQL tilini ba’zi birlardagina o’zgaruvchan uzunlikdagi satr toifalari bor. Bu toifalar quyidagicha tavsiflanadi: VARCHAR(),CHARVARYING YOKI CHARVARYING() Ixtiyoriy uzunlikdagi matnli tasvirni tasvirlaydi. CHARACTER va VARCHAR toifasidagi konstantalar apostrof ichiga yoziladi. Quyidagi yozuvlarni barchasi ekvivalent VARCHAR [(UZUNLIGI)], CHARVARYING [(UZUNLIGI)] CHARACTER VARYING[(UZUNLIGI)] Agar uzunlik oshkor ko’rsatilmasa, u birga teng deb qabul qilinadi, ya’ni barcha xollarda bita simvoldan iborat bo’ladi. Sonli ma’lumot toifalari SQL standartida quyidagi son toifasida ishlatiladi. INTEGER-butun sonlar uchun -2-31….231 SMOLLINT-butun sonlar 2-15…215 DECIMAL (aniqlik[masshtab]) - Fiksirlangan nuqtali unli son aniqlik sondagi qiymatli raqamlar masshtab unli nuqtadan undagi raqamlarning maksimal soni kursatadi NUMERIC(aniqlik[masshtab])- Fiksirlangan nuqtali unli son. aniqlik sondagi qiymatli raqamlar masshtab unli nuqtadan undagi raqamlarning maksimal soni kursatadi FLOAT[(aniklik)]suzuvchi nuktali son minimal aniklik bilan beriladi. Shunday qilib xulosa qilish mumkin: 1. Simolli satrlar toifasi. Character [uzunligi] [char] uzun) da kursatiladi. Bundan tashkari uzgaruvchan uzunlikdagi simvolli satrlar toifasini xam ishlatamiz. Bunda uzgaruvchi toifalar ixtiyoriy uzunlikda buladi. Bunda uzunliklar zarur bulmagan parametrlar xisoblashadi. Agar ular ishlatilmasa, unda 1 ta simvolga joy ajratiladi. Simvolli satrlarni belgilashni yana bir usuli bor. Varchar [(uzunlik)] yoki charvaryina [(uzunlik)] 2. Ma’lumotlarni sonli tiplari 1. Integer 2. Smallint 3. Decimal (aniklik, masshtab). (DEC) fiksirlangan (__) li sonlarni tasvirlash uchun ishlatiladi. Aniqlik- sondagi qiymatli raqamlar. Masshtab- nuktadan keyingi ung tomonda turgan rakamlarni maksimal soni 4. Numeric (aniklik, (masshtab). 5. FLOAT (aniklik). Suzunlikuvchi nuktali son va undagi minimal aniklikni bildiradi. 6. REAL FLOAT kabi tip sonlari bilan kushimcha kilingan. Sana va vakt toifasidagi ma’lumotlar standarti kushimcha kilinmagan. Bular yozilishini texnik xujjatlarda kurish kerak. 7.3. NOANIK VA O’TKAZIB YUBORILGAN MA’LUMOTLAR SQL da atribut kiymatlari noma’lum bulgan utkazibi yuborilgan yoki mavjud bulmaganlarini NULL bilan yoziladi. NULL kiymat oddiy tushunchada kiymat kiymat xisoblanmaydi. U fakat atributni xakikiy kiymati tushib koldirilgan yoki noma’lumligini anglatadi. NULL ni ishlatishda kuyidagilarga e’tibor berish kerak: Agregat funksiyalar ishlatilganda birorta atributni kiymatlar tuplami buyicha xisoblashlar bajarilganda aniklikni ta’minlash maksadida NULL kiymat xisobga olinmaydi. - shartli operatorlarda TRUE, FALSE dan tashkari UNKOWN paydo bulsa natija NULL kiymatda chikadi. - bu kiymatni tekshirish uchun IS NULL yoki IS NOT NULL lardan foydalanamiz. - almashtirish fuknsiyalari xam argument sifatida NULL bulsa natija NULL ga teng buladi. Misollar: O’quv misoli: Yechilayotgan misollar kuyidagi jadvalari asosida bajarilgan; MB jadvallari: STUDENT (TALABA) LECTURER (O’qituvchi) SUBJECT (O’qitiladigan fanlar) University(Universitet) EXAM_ MARKS SUBY_LECT (ukituvchilarni ukuv fanlari) 7.4. SELECT operatori SELECT (tanlash) SQL tilining eng muhim va ko’p ishlatiladigan operatori xisoblanadi. U ma’lumotlar bazasi jadvalidan axborotlarnitanlab olish uchun muljallangan. SELECT operatori sodda xolda kuyidagi kurinishda yoziladi. SELECT [DISTINCT] <atributlar ruyxati> FROM <jadvallar ruyxati> [WHERE <tanlash sharti>] [ORDER BY < atributlar ruyxati >] [GROUP BY < atributlar ruyxati >] [HAVING <shart> ] [UNION <ON SELECT operatorli ifoda> ] ; Bu еrda kvadrat kavslarda yozilgan elementlar xar doim xam yozilishi shart emas SELECT xizmatchi suzunliki ma’lumot bazasidan axborotni tanlab olish operatori yozilganini anglatadi. SELECT suzunlikidan keyin bir biridan vergul bilan ajratilib suralaetgan maydon nomlari (atributlar ruyxati) yoziladi. SELECT surov operatorini zarur xizmatchi suzunliki FROM (undan, dan) xisoblanadi. FROM suzunlikidan keyin axborot olinayotgan jadval nomlari bir biridan vergul bilan ajratilib yoziladi. Masalan: SELECT Name, Surname FROM STUDENT ; Ixtiyoriy SQL so’rov operatori nukta vergul (;) simvoli bilan tugaydi. Keltirilgan surov STUDENT jadvalidan Name va Surname maydonlarni barcha qiymatlarini ajratib olishni amalga oshiradi. Natijada kuyidagi jadval xosil bo’ladi. O’quv misoli: 8. Ma’lumotlar manipulyasiya qilish. Oddiy so‘rovlar yaratish. 8.1 SELECT ma’lumotlarni tanlash operatori Ma’lumotlarni tanlash SELECT operatori yordamida bajariladi. Bu SQL tilining eng ko‘p qo‘llaniladigan operatori xisoblanadi. SELECT operatorini sintaksisi quyidagicha: SELECT [ALL/DISTINCT] <atributlarro‘yxati>/* FROM <jadvallar ro‘yxati> [WHERE <tanlash sharti >] [ORDER BY < atributlar ro‘yxati >] [GROUP BY < atributlar ro‘yxati >] [HAVING <shart>] [UNION< SELECT operatorli ifoda>] Kvadrat qavslarda operatorni yozishda qatnashishi shart bo‘lmagan elementlar ko‘rsatilgan. ALL kalit so‘zi natijaga shartni qanoatlantiruvchi barcha satrlar, shuningdek takrorlanuvchi satrlar ham kirishini bildiradi. DISTINCT kalit so‘zi natijaga takrorlanuvchisatrlarkiritilmasliginibildiradi.Keyin boshlang‘ich jadvaldagi atributlar ro‘yxati ko‘rsatiladi. Bu atributlar natijaviy jadvalga kiritiladi. * simvoli natijaviy jadvalga boshlang‘ich jadvalning barcha atributlari kiritilishini bildiradi. Operatorda qatnashishi shart bo‘lgan so‘zlardan FROM so‘zi xisoblanadi. Bu so‘zdan keyin tanlov bajariladigan jadvallar nomi ko‘rsatiladi. Tanlash ifodasida WHERE kalit so‘zidan keyin jadval satrlarini tanlab olish sharti ko‘rsatiladi. Bunda natijaviy jadvalga WHERE qiymat qabul qiladigan satrlarkiritiladi. ifodasidagi shart rost ORDER BY kalit so‘zi natijaviy jadval satrlarini ko‘rsatilgan ustunlar ro‘yxati bo‘yicha tartiblash amalini bildiradi. GROUP BY kalit so‘zidan keyin gruppalanadigan atributlar ro‘yxati ko‘rsatiladi. HAVING ifodasida har bir gruppaga qo‘yiladigan shartlar ko‘rsatiladi. (GROUP BY va HAVING kalit so‘zlari keyinroq tushuntiriladi) FROM, WHERE va ORDER BY kalit so‘zlari SQL tilining qolgan ma’lumotlarni manipulyasiyalash operatorlarida ham shu tarzda ishlatiladi. So‘rovlar yaratishni aniq misol uchun ko‘rib o‘tamiz (8.1-rasm) 8.1-rasm exam_st Student id_s Surname id_ex 1 Subject Date Matem t 10.05.20 09 1 Xasanov 2 Karimov 3 Jabborov 2 Fizika 15.05.20 09 mark_st mark Id_exi _st d 2 2 3 3 1 2 1 1 4 3 2 5 2 1 3 1 2 2 2 3 4 1 3 5 3 3 3 Barcha studentlar ro‘yxatini tanlash va tasvirlash. SELECT * FROM student yoki SELECT id_st, surname FROM student Agar ushbu so‘rovga ORDER BY surname ifodasi qo‘shilsa, u xolda ro‘yxat familiya bo‘yicha tartiblanadi. Jimlikka ko‘ra tartiblash o‘sish bo‘yicha bajariladi. Agar kamayish bo‘yicha tartiblash kerak bo‘lsa, u xolda oxirgi ifodadagi atribut nomidan keyin DESC so‘zi qo‘shiladi. «1» kodli student olgan baxolar ro‘yxatini tanlab olish va tasvirlash SELECT id_st, mark FROM mark_st Where id_st = 1 Ekzamenlarda kamida bitta 2 yoki 3 baxo olgan studentlar kodini tanlab olish. WHERE so‘zidan keyin solishtirish amallarini (<, >, =, <> va x.k.) va mantiqiy operatorlar qatnashgan ifodalarni joylashtirish mumkin. SELECT id_st, mark FROM mark_st WHERE ( MARK >= 2 ) AND ( MARK <= 3 ) SQL tilida shart ifodalarini tuzish uchun solishtirish va mantiqiy operatorlardan tashqari yana bir qator maxsus operatorlar qo‘llaniladi. Bu operatorlar dasturlash tillarida mavjud emas. Bu operatolar: IN – biror qiymatlar to‘plamiga tegishliligini tekshirish; BETWEEN – biror qiymatlar diapozoniga tegishliligini tekshirish; LIKE – namuna bilan mosligini tekshirish; IS NULL – qiymat mavjudmasligini tekshirish. IN operatori biror qiymatlar to‘plamiga tegishlilikni tekshirish uchun ishlatiladi. Quyidagi so‘rov oxigi keltirilgan misoldagi so‘rov natijalarini beradi (ekzamenlarda kamida bitta 2 yoki 3 baho olgan studentlarni identifikatorini tanlab oladi) SELECT id_st, mark FROM mark_st WHERE mark IN (2,3) Xuddi natijani BETWEEN operatoridan foydalanib olish mumkin: SELECT id_st, mark FROM mark_st WHERE mark BETWEEN 2 AND 3 Familiyalari A xarfi bilan boshlanuvchi studentlar ro‘yxatini tanlab olish. Bunday xolatda LIKE operatoridan foydalanish qulay xisoblanadi. LIKE operatori faqat simvolli maydonlar uchun qo‘llaniladi va maydon qiymati operatorda ko‘rsatilgan namunaga mosligini tekshirish imkonini yaratadi. Namuna quyidagi maxsus simvollardan tashkil topadi: _ (tagiga chizish belgisi) – bitta ixtiyoriy simvolni bildiradi; % (foiz belgisi) – ixtiyoriy miqdordagi simvollar ketma – ketligini bildiradi. SELECT id_st, surname FROM student WHERE surname LIKE 'A%' Ko‘pincha ustunlardagi minimal, maksimal yoki o‘rtacha qiymatlarni xisoblashga to‘g‘ri keladi. Masalan, keltiligan jadvallarda o‘rtacha baxoni xisoblash mumkin. Bunday xisoblashni bajarish uchun SQL tilida maxsus agregat funksiyalari mavjud: MIN() – ustundagi minimal qiymat; MAX() – ustundagi maksimal qiymat; SUM() – ustundagi qiymatlar summasi; AVG() – ustundagi qiymatlarni o‘rtachasi; COUNT() – ustundagi NULL dan farqli qiymatlar miqdori. Quyidagi so‘rov studentlar olgan baxolarning o‘rtachasini xisoblaydi. SELECT AVG(mark) FROM mark_st Albatta, agregat funksiyalarini WHERE so‘zi bilan birgalikda qo‘llash mumkin. Quyidagi so‘rov 100 kodli studentning ekzamenlarda olgan baxolarining o‘rtachasini xisoblaydi: SELECT AVG(mark) FROM mark_st WHERE id_st = 100 Navbatdagi so‘rov 10 kodli studentning o‘rtacha baxosini xisoblaydi: SELECT AVG(mark) FROM mark_st WHERE id_ex = 10 SQL tili ko‘rib o‘tilgan mexanizmiga qo‘shimcha ravishda agregat funksiyalarni to‘la jadval uchun emas, balki gruppalangan qiymatlar uchun qo‘llash imkonini beruvchi vosita mavjud. Buning uchun SQL da maxsus GROUP BY konstruksiyasi mavjud bo‘lib unda ko‘rsatilgan ustun qiymatlari bo‘yicha gruppalash amalga oshiriladi. Masalan, har bir studentni ekzamenlarda olgan baxolarining o‘rtachasini aniqlash mumkin. Buning uchun quyidagi so‘rov beriladi: SELECT id_st, AVG(mark) FROM mark_st GROUP BY id_st Bu imkoniyat ham odatdagidek WHERE so‘zi bilan birgalikda qo‘llanilishi mumkin. Bu so‘rovni bajarishda MBBT avval jadvaldan WHERE ifodasidagi shartni qanoatlantiruvchi satrlarni tanlab oladi, keyin tanlangan satrlarni gruppalash va agregatlash amalini bajaradi. Quyidagi so‘rov har bir studentning 100 kodli ekzamendan olgan baxolarining o‘rtachasini aniqlaydi. SELECT id_st, AVG(mark) FROM mark_st WHERE id_ex = 100 GROUP BY id_st Ko‘rib turganimizdek gruppalash bittadan ko‘p maydon bo‘yicha bajarilishi mumkin. GROUP BY seksiyasiga ega bo‘lgan so‘rovlar uchun quyidagi muxim cheklanish mavjud: bunday so‘rovlar natijasi tarkibiga gruppalash bajarilgan ustunlar va agregatlash natijasiga ega bo‘lgan ustunlar kiradi. Biror xulosaga kelishdan oldin SQL tilining barcha imkoniyatlarini ko‘rib chiqish kerak. Masalan, ixtiyoriy tekstni so‘rov tarkibiga kiritish mumkin. Bunga misol keltiramiz: SELECT 'O‘rtacha ball =’, AVG(mark) FROM mark_st WHERE id_ex = 10 Ushbu so‘rov natijasida foydalanuvchi faqat oddiy sonlarni emas, balki tekstni ham ko‘radi. Bir necha jadvallardan ma’lumotlarni tanlash uchun SQL ni qo‘llash Shu paytgacha faqat bitta jadvaldan ma’lumotlarni tanlash miollari keltirildi. Relyasion amallarga mos bo‘lgan bir nechcha jadvallardan ma’lumotlar tanlab olishni ham bajarish mumkin. Bir nechta jadvallardan ma’lumotlarni tanlab olishga to‘liq misollar keltirish imkoni yo‘q. Bunga doir ba’zi misollarni ko‘rib o‘tamiz. Qoidaga ko‘ra, ma’lumotlar tanlab olinadigan jadvallar u yoki bu shaklda bir biri bilan bog‘langan. Masalan, birga ko‘p va x.k. 1 rasmdagi ER-diagrammaga qarang. Bu miolda bog‘langan jadvallar mavjud. student, mark_st va exam_st jadvallarini ko‘rib chiqamiz. mark_st jadvali id_ex maydoni bo‘yicha exam_st jadvali bilan bog‘langan. mark_st jadvali id_st maydoni bo‘yicha student jadvali bilan bog‘langan. Masalan, studentlarni ro‘yxatini ular ekzamenlardan olgan baxolari bilan birgalikda tanlash zarur bo‘lsin. Buning uchun quyidagi so‘rov beriladi: SELECT student.surname, mark_st.id_ex, mark_st.mark FROM student, mark_st WHERE student.id_st = mark_st.id_st Keltirilgan ko‘p jadvalli so‘rov bir jadvalli so‘rovdan quyidagilar bilan farq qiladi. 1. FROM seksiyasida ikkita jadval ko‘rsatilgan. 2. jadvallar soni bitta ko‘p, shuning uchun ko‘rsatilgan maydonlar nomining bir qiymatliligi yo‘qoladi. Masalan, ko‘p xollarda maydonni FROM da ko‘rsatilgan jadvallar ro‘yxatidagi qaysi jadvaldan olish noma’lum bo‘lib qoladi. Maydon nomlarining ko‘p qiymatliligini bataraf etish uchun maydon nomida prefiks - jadval nomi qo‘shimcha qilinadi. Jadval nomi maydon nomidan nuqta bilanajratiladi. 3. WHERE ifodasida jadvallarni birlashtirish sharti ko‘rsatiladi. Ko‘rinib turganidek jadval nomidan iborat prefiksdan foydalanish so‘rovni murakkablashtiradi. Bunday murakkablikni bartaraf etish uchun psevdonim ishlatiladi. Yuqoridagi so‘rovni quyidagicha yozish mumkin: SELECT E.surname, M.id_ex, M.mark FROM student E, mark_st M WHERE E.id_st = M. id_st 8.2. INSERT ma’lumotlarni kiritish operatori INSERT INTO jadval_nomi [(<ustunlar ro‘yxati >) ] VALUES (<qiymatlar ro‘yxati >) Bunday sintaksis jadvalga faqat bitta satr kiritish imkonini beradi. Agar satrdagi barcha ustunlarga qiymat kiritilayotgan bo‘lsa, so‘rovda barcha ustunlar nomini ko‘rsatish zarur emas. Masalan, BOOKS jadvaliga yangi kitob ma’lumotlari kiritiladi INSERT INTO BOOKS ( ISBN, TITL, AUTOR, COAUTOR, EARIZD, PAGES) VALUES ("5-88782-290-2","Аппаратные средства IBM PC.Енциклопедия", “Guk M. ", "",2000, 816) Bu kitob avtori faqat bitta va soavtor (hammuallif) mavjud emas, biroq ustunlar ro‘yxatida COAUTOR ustuni ham ko‘rsatilgan. Shuning uchun VALUES bo‘limida bu ustunga mos qiymatni ko‘rsatish zarur. Misolda bu maydon uchun bo‘sh satr ("") ko‘rsatilgan. Bu soavtor yo‘qligini bildiradi. Shuningdek bu еrda aniqlangmagan NULL qiymatini ko‘rsatish ham mukin edi. Satrdagi barcha ustunlarga qiymat kiritishda ustunlar ro‘yxatini ko‘rsatish zarur emas. Bunda faqat qiymatlar ro‘yxatini ko‘rsatish еtarli bo‘ladi. Bunday xolda operator ko‘rinish quyidagicha shaklda bo‘ladi: INSERT INTO BOOKS VALUES ("5-88782-290-2", "Аппаратные средства IBM PC. Ensiklopediya"."Guk M.","".2000.816) Shuningdek to‘liq miqdorda bo‘lmagan qiymatlarni ko‘rsatish mumkin. Ya’ni iymatlar qatorida soavtorni ko‘rsatmaslik mumkin, chunki jeoriy kitobda soavtor yo‘q. Biroq bunda qiymat kiritiladigan ustun nomlarini quyidagicha shaklda ko‘rsatish kerak bo‘ladi: INSERT INTO BOOKS VALUES ("5-88782-290-2", "Apparatnыe sredstva IBM PC. Ensiklopediya"."Guk M.","".2000.816) Bu xolda COAUTOR ustuniga NULL qiymati yoziladi. Agar jadvalni yaratishda ustun yoki atributga majburiy qiymat (NOT NULL) belgisi qo‘yilgan bo‘lsa, u xolda INSERT operatorida joriy ustunning har bir satriga kiritiladigan qiymatg ko‘rsatilishi kerak. Shuning uchun, agar jadvalning hamma ustuni majburiy qiymat li bo‘lsa, u xolda har bir yangi kiitladigan satrda barcha ustun uchun qiymat mavjud bo‘lishi kerak va bunda ustunlar ro‘yxatini ko‘rsatish shar emas. Aks xolda jadvalda kamida bitta maburiy qiymatli bo‘lmagan ustun bo‘lsa, u xolda albatta ustunlar ro‘yxatini ko‘rsatish shart bo‘ladi. Qiymatlar ro‘yxatida maxsus funksiyalar va ifodalar ko‘rsatilish ham mumkin. Bunda ushbu funksiyalarning qiymatlari ma’lumotlarni kiritish momentida xisoblangan bo‘lishi zarur. Ma’lumotlarni kiritish operatori birdaniga bir necha satrlarni kiritish imkoniga ham ega. Bunda qiymatlar satri boshqa bir jadvaldan tanlab olinadi. Masalan studentlar xaqidagi jadval mavjud bo‘lsin. Unda studentlarning familiyasi, adresi, uy telefoni va tug‘ilgan sanasi ko‘rsatilgan bo‘lsin. U xolda bitta operator yordamida ularni bibliotekaning kitobxonlariga aylantirish mumkin: INSERT INTO READER (FIO_studenta, Adres, Telefon, Data_rojd) SELECT (FIO_studenta, Adres, Telefon, Den_rojd) FROM STUDENT 8.3. DELETE o‘chirish operatori Ma’lumotlarni o‘chirish operatori jadvaldan shartni qanoatlantiruvchi bir yoki bir neta satrlarni o‘chirishi mumkin. DELETE FROM jadval _nomi[WHERE tanlash_sharti] Agar satrlarni tanlash sharti ko‘rsatilmasa, u xolda jadvaldagi barcha satrlar o‘chiriladi. Natijada ma’lumotlarga ega bo‘lmagan bo‘sh bo‘lgan jadval xosil bo‘ladi. Agar jadvaldan oldingi sessiya natijalarini o‘chirish kerak bo‘lsa, u xolda R1 jadvalidagi barcha satrlar o‘chiriladi: DELETE FROM R1 WHERE qismidagi shart ifodasi xuddi SELECT operatoridagi filtrlash shartiga o‘xshash bo‘ladi. Bu shart jadvaldan qaysi satrlar o‘chirilishi kerakligini aniqlaydi. Masalan, student Mironova A.V. o‘chirilmasli kerak bo‘lsa, quyidagi so‘rov beriladi: DELETE FROM R2 WHERE FIO = “Mironov A.V.” WHERE qismida biror so‘rov ko‘rsatilishi mumkin. Masalan, agar jadvaldan o‘zlashtirmagan studentlarni o‘chirish kerak bo‘lsin. Oliy ta’lim qonuniga ko‘ra oxirgi sessiyada ikkita va undan ortiq fandan ikki baxo olgan student o‘zlashtirmagan xisoblanadi. U xolda tanlab olish sharti ikkita va undan ko‘p ikki baxo olgan studentlarni va ikkita undan ko‘p ekzamenlarni topshirmagan studentlarni aniqlashi kerak. Bunday studentlarni aniqlash uchun R1 jadvalidan 2 baxoli va baxo ko‘rsatilmagan satrlar tanlab olinishi, keyin olingan natija FIO ustuni bo‘yicha gruppalanishi kerak. Keyin har bir gruppadagi satrlar soni aniqlanadi (bu har bir studentning olgan ikki baxolari bilan topshirmagan ekzamenlar sonini bildiradi) va ikkitadan ko‘p satrga ega ustunlar tanlab olinadi. Endi ushbu murakkab bo‘lgan konstruksiyani SQL tilida yozamiz va sodda ko‘rinishga ega bo‘lishini ko‘ramiz. DELETE FROM R2 WHERE R2.FIO IN (SELECT R1.FIO FROM R1 WHERE Osenka = 2 OR Osenka IS NULL GROOP BY R1.FIO HAVING COUNT(*) >= 2 DELETE operasiyasini bajarishda unda qatnashgan qism so‘rovda satrlar o‘chiriladigan jadval ko‘rsatilmasligi kerak. Ma’lumotlarni manipulyasiyalash operasiyalarining barchasi ma’lumotlar bazasining butunligi tushunchasi bilan bog‘langan. Manipulyasiyalash amallari sintaktik jixatdan to‘g‘ri bo‘lsada butunlik talablari tufayli bajarilmasligi mmkin. 8.4. UPDATE ma’lumotlarni yangilash operasiyasi O‘zgarish yuz berganda va mos xolda bu o‘zgarishni ma’lumotlar bazasida akslantirish uchun ishlatiladi. UPDATE jadval_nomi SET ustun_nomi = yangi_qiymat [WHERE tanlash_sharti] Bu yеrda ham WHERE qismi DELETE operatoridagi kabi ko‘rsatilishi shart emas. U DELETE operatoridagi kabi bir xil vazifani bajaradi va o‘zgartirish amali bajariladigan satlarni tanlash imkonini beradi. Agar tanlash sharti (WHERE qismi) ko‘rsatilmagan bo‘lsa, u xolda o‘zgartirish amali jadvlning barcha satrlari uchun bajariladi. Masalan, student Stepanova K. E. ma’lumotlar bazasi fanidan “2” baho oldi, keyin uni “3” bahoga qayta topshirgan bo‘lsin. Bu xolatga mos xolda R1 jadvalini o‘zgartirish amali quyidagi operator bilan amalga oshiriladi: UPDATE R1 SET R1.Otsenka = 3 WHERE R1.FIO = "Stepanova K.E." AND R1.Dissiplina ="Bazы dannыx" Qanday xolatlarda bir nechta satrlarni o‘zgartirish zarurati paydo bo‘ladi? Bu kam uchaydigan masala emas. Masalan, agar guruxlar jadvalidagi guruxlarni kursini bittaga oshirish zarr bo‘lsa quyidagi o‘zgartirish amali bajarishi mumkin. Guruxlar jadvali quyidagicha sxemaga ega bo‘lsin: R4 = < Gurux, Kurs> UPDATE R4 SET R4.Kypc = R4.Kypc + 1 Nazorat savollari 1. SQL tilining SELECT tanlash operatori. 2. SELECT tanlash operatorining sintaksisi 3. SELECT operatorining WHERE ifodasi shartini yaratishda solishtirish operatorlari bilan birgalikda ishlatiladigan maxsus operatorlar. 4. IN, BETWEEN, LIKE, IS NULL operatorlari. Ularni ta’riflang va misollar keltiring. 5. SELECT operatoriga oid misollar tuzing. 6. Agregat funksiyalari. 7. agregat funksiyalari qatnashtirib SELECT operatoriga oid misollar tuzing. 8. SELECT operatorida yordamida bir nechta jadvallardan ma’lumotlarni tanlash 9. SQL tilining INSERT ma’lumotlarni kiritish operatori. 10. SQL tilining DELETE ma’lumotlarni o‘chirish operatori 11. SQL tilining UPDATE ma’lumotlarni yangilash operatori 12. SQL tilining create database operatori. 9. SQL tili yordamida maʼlumotlarni tavsiflash 9.1. Jadvallarni yaratish Jadvallar CREATE TABLE komandasi bilan yaratiladi. Bu komanda qatorlarsiz bo‘sh jadval yaratadi. CREATE TABLE komandasi jadval nomini va jadvalning o‘zini ko‘rsatilgan tartibdagi ustunlar ketma – ketligi ko‘rinishida aniqlaydi. Unda har bir ustundagi maʼlumotlarning tiplari va ustunlar o‘lchovi ko‘rsatiladi. Har bir jadval juda bo‘lmaganda bitta ustunga ega bo‘lishi kerak. CREATE TABLE komandasi sintaksisi: CREATE TABLE <table-name > ( <column name> <data type>[(<size>)], <column name> <data type>[(<size>)], ... ); Argument qiymati kattaligi maʼlumot turiga bog‘liqdir.Agar siz maxsus ko‘rsatmasangiz, tizim avtomatik qiymatni o‘rnatadi. Misоl uchun sоtuvchilar jadvalini yaratishni ko‘rib chiqamiz: CREATE TABLE Salepeople (SNum integer, SName char (10), City char (10), Comm decimal ); 9.2. Jadvallarni o‘chirish Jadvalni o‘chirish imkоniga ega bo‘lish uchun, jadval egasi (Ya’ni yaratuvchisi) bo‘lishingiz kerak. Faqat bo‘sh jadvalni o‘chirish mumkin. Qatоrlarga ega bo‘lgan, to‘ldirilgan jadvalni o‘chirish mumkin emas, Ya’ni jadval o‘chirishdan оldin tоzalangan bo‘lishi kerak. Jadvalni o‘chirish kоmandasi quyidagi ko‘rinishga ega: DROP TABLE < table name >; Masalan: DROP TABLE Salepeople; 9.3. Jadvalni o‘zgartirish Jadvalni o‘zgartirish uchun ALTER TABLE kоmandasidan fоydalaniladi. Bu kоmanda jadvalga Yangi ustunlar qo‘shish, ustunlarni o‘chirish, ustunlar kattaligini o‘zgartirish,hamda cheklanishlarni qo‘shish va оlib tashlash imkоniyatlariga ega. Bu kоmanda ANSI standarti qismi emas, shuning uchun har хil tizimlarda har хil imkоniyatlarga ega. Jadvalga ustun qo‘shish uchun kоmandaning tipik sintaksisi: ALTER TABLE <table name> ADD <column name> <data type> <size>; Masalan: ALTER TABLE Salepeople ADD Phone CHAR(7); 9.4. Jadvallar uchun cheklanishlar Cheklanishlarni kiritish. Ko‘p хоllarda ustunga kiritilgan qiymatlar bir biridan farq qilishi kerak. Agar ustun uchun UNIQUE cheklanishi o‘rnatilsa, bu ustungsha mavjud qiymatni kiritishga urinish rad etilapdi. Bu cheklanish bo‘sh bo‘lmaydigan (NOT NULL) debe’lоn qilingan maydоnlarga qo‘llanishi mumkin. Masalan: CREATE TABLE Salepeople ( SNum integer NOT NULL UNIQUE, SName char (10), City char (10), Comm decimal); Unikalligi talab qilinadigan maydоnlar(birlamchi kalitlardan tashqari) kandidat kalitlar yoki unikal kalitlar deyiladi. Jadval cheklanishi UNIQUE maydоnlar guruхiga o‘rnatilishi mumkin. Bu bir necha maydоnlar qiymatlari kоmbinatsiyasi unikalligini ta’minlaydi. Bizning ma’lumоtlart bazamizda har bir buyurtmachi bitta sоtuvchiga biriktirilgan. Ya’ni Buyurtmachilar jadvalida buyurtmachi nоmeri (cnum) va sоtuvchi nоmeri (snum) kоmbinatsiyasi unikal bo‘lishi kerak. Bu cheklanishni UNIQUE (cnum, snum) yordamida, Customers jadvalini yaratishda kiritish mumkin. Bu ustunlar uchun NOT NULL cheklanishini kiritish zarurdir. Birlamchi kalitlar cheklanishlari. SQL birlamchi kalitlarni to‘g‘ridan to‘g‘ri birlamchi kalit (PRIMARY KEY) cheklanishi оrqali ta’riflaydi. PRIMARY KEY jadvalni yoki ustunlarni cheklashi mumkin. Bu cheklanish UNIQUE cheklanishi kabi ishlaydi, jadval uchun faqat bitta birlamchi kalit (iхtiyoriy sоndagi ustunlar uchun ) aniqlanishi mumkin bo‘lgan хоldan tashqari. Birlamchi kalitlar NULL qiymatga ega bo‘lishi mumkin emas. Misоl: CREATE TABLE Salepeople ( SNum integer NOT NULL PRIMARY KEY, SName char (10), City char (10), Comm decimal); Maydоn qiymatlarini tekshirish (CHECK cheklanishi). CHECK cheklanishi jadvalga kiritilayotgan ma’lumоt qabul qilinishidan оldin mоs kelishi lоzim bo‘lgan shart kiritishga imkоn beradi. CHECK cheklanishi CHECK kalit so‘zi ko‘rsatilgan maydоndan fоydalanuvchi predikat ifоdalaridan ibоratdir. Misоl: Salepeople jadvali Comm ustuniga kiritilayotgan qiymat 1 dan kichik bo‘lish sharti. CREATE TABLE Salepeople ( SNum integer NOT NULL PRIMARY KEY, SName char(10) NOT NULL UNIQUE, City char(10), Comm decimal CHECK ( Comm < 1 )); Ko‘zda tutilgan qiymatlarni o‘rnatish. Birоr bir maydоn uchun qiymat ko‘rsatmagan хоlda jadvalga satr qo‘shsangiz, SQL bunday maydоnga kiritish uchun ko‘zda tutilgan qiymatga ega bo‘lishi kerak, aks хоlda kоmanda rad etiladi. Eng umumiy ko‘zda tutilgan qiymat NULL qiymatdir. CREATE TABLE kоmandasida ko‘zda tutilgan qiymat DEFAULT оperatоri оrqali, ustun cheklanishi sifatida ko‘rsatiladi. Masalan: CREATE TABLE Salepeople ( SNum integer NOT NULL PRIMARY KEY, SName char(10) NOT NULL UNIQUE, City char(10) DEFAULT 'New York', Comm decimal CHECK ( Comm < 1 )); Ma’lumоtlar yaхlitligini ta’minlash Jadval bir maydоnidagi hamma qiymatlar bоshqa jadval maydоnida aks etsa, birinchi maydоn ikkinchisiga ilоva qiladi deyiladi. Bu ikki maydоn оrasidagi bоg‘liqlikni ko‘rsatadi. Masalan, buyurtmachilar jadvalida har bir buyurtmachi, sоtuvchilar jadvalida o‘ziga biriktirilgan sоtuvchiga ilоva qiluvchi SNum maydоniga ega. Bir maydоn ikkinchisiga ilоva qilsa tashqi kalit, u ilоva qilayotgan maydоn ajdоd kalit deyiladi. Buyurtmachilar jadvalidagi SNum maydоni tashqi kalit, sоtuvchilar jadvalidagi SNum - ajdоd kalitdir. Tashqi kalit bitta maydоndan ibоrat bo‘lishi shart emas. Birlamchi kalit kabi, tashqi kalit bitta mоdul sifatida qayta ishlanuvchi bir necha maydоnlarga ega bo‘lishi musmkin. Maydоn tashqi kalit bo‘lsa ilоva qitlayotgan jadval bilan ma’lum usulda bоg‘liqdir. Tashqi kalit har bir qiymati (satri), ajdоd kalitning bitta va faqat bitta qiymatiga( satriga) ilоva qilishi kerak. Bu хоlda tizim ilоvali yaхlit хоlatda deyiladi. Shu bilan birga ajdоd kalit qiymati tashqi kalit bir necha qiymatlariga ilоva qilishi mumkin. Cheklanish FOREIGN KEY. SQL ilоvali yaхlitlikni FOREIGN KEY yordamida ta’minlaydi. Tashqi kalit vazifasi ajdоd kalitda ko‘rsatilmagan qiymatlarni tashqi kalit maydоnlariga kiritmaslikdir. FOREIGN KEY cheklanishi sintaksisi: FOREIGN KEY <column list> REFERENCES <pktable> [<column list>] Birinchi ro‘yхat kоmanda tоmоnidan o‘zgartiriluvchi ustunlar ro‘yхatidir. Pktable - bu ajdоd kalitli jadval. Ikkinchi ustunlar ro‘yхati bu ajdоd kalitni tashkil qiluvchi ustunlardir. Misоl uchun Sоtuvchilar jadvaliga ilоva qiluvchi tashqi kalit sifatida e’lоn qilingan SNum maydоniga ega bo‘lgan Buyurtmachilar jadvalini yaratamiz: CREATE TABLE Customers ( CNum integer NOT NULL PRIMARY KEY, CName char(10), City char(10), SNum integer, FOREIGN KEY (SNum) REFERENCES Salepeople (SNum) ); Nazorat savollari 1. SQL tilida maʼlumotlarning tiplari 2. SQL DDL maʼlumotlarni aniqlash tili 3. SQL tilida jadvallar yaratish operatori 4. SQL tilida domen yaratish operatori. 5. SQL tilining Create Table operatori 6. SQL tilining Drop Table operatori 10. SQLda jarayonlar va standart funksiyalar 10.1. Saqlanadigan MySQL protseduralari Saqlanadigan MySQL protsedurasi - bu ma'lumotlar bazasida saqlanadigan qism dastur. Unda nom, parametrlar ro'yxati va SQL operatorlari mavjud. Ma'lumotlar bazasini boshqarishning barcha mashhur tizimlari saqlanadigan protseduralarni qo'llab-quvvatlaydi. Ular MySQL 5-da joriy etilgan va ulardan foydalanish uchun sizda ROUTINE CREATE imtiyozi bo'lishi kerak. Ikkilik ro'yxatdan o'tishga ruxsat berilgan bo'lsa, ushbu ko'rsatmalar ham SUPER imtiyozlarini talab qilishi mumkin. Ikki xil tartib mavjud: boshqa SQL ko'rsatmalarida ishlatiladigan saqlanadigan protseduralar va funktsiyalar (masalan, pi ()). Asosiy farq shundaki, funktsiyalar SQL ko'rsatmalaridagi har qanday boshqa iboralar kabi ishlatilishi mumkin va saqlangan protseduralar CALL buyrug'i yordamida chaqirilishi kerak. 10.2. Saqlanadigan protseduralarning afzalligi nimada? Saqlanadigan protseduralar tez ishlaydi. MySQL serverining afzalligi shundaki, u keshlashdan ham, oldindan belgilangan operatorlardan ham foydalanadi. Tezlikning asosiy ortishi tarmoq trafigini pasaytirishdan kelib chiqadi. Bir nechta qayta ishlashni talab qiladigan va bir vaqtning o'zida foydalanuvchining o'zaro ta'sirini talab etmaydigan takroriy vazifalar mavjud bo'lsa, bu serverda saqlanadigan protseduraga bitta murojaat bilan amalga oshirilishi mumkin; MySQLda saqlanadigan protseduralar umumiydir. SQLda saqlanadigan protseduralarni yozishda u MySQLdan foydalanadigan har qanday platformada ishlaydi. Bu SQLning Java, C yoki PHP kabi boshqa tillarga nisbatan ustunligi; Saqlanadigan protseduralar uchun kod har doim ma'lumotlar bazasida mavjud. Bu ma'lumotni uni qayta ishlaydigan jarayonlar bilan bog'lash uchun yaxshi amaliyotdir. 10.3. CREATE PROCEDURE protseduralarni yaratish operatori Odatda, protsedura hozirda ishlatiladigan ma'lumotlar bazasi bilan bog'liq. Protsedurani ma'lum bir ma'lumotlar bazasi bilan bog'lash uchun, saqlanadigan protsedurani yaratishda uni belgilang: ma’lumotlar_bazasi_nomi.saqlanadigan_protsedura_nomi. To'liq sintaksis: CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE protsedura_nomi ([protsedura_parametrlari[,...]]) [characteristic ...] qism_dastur protsedura_parametrlari: [ IN | OUT | INOUT ] parameter_nomi TYPE; Bu еrda type MySQL mavjud har qanday ma'lumot tipi. xususiyatlari: COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } qism_dastur: SQL dasturi operatori Protsedura parametrlari nima? Aslida, bu funktsiyalar parametrlari, dasturlash tillaridagi protseduralar bilan bir xil. Parametrlar quyidagi turlarga bo'linadi: IN parametrlari. Kiruvchi. Buni biz SQL so'rovi bilan birga yuboramiz. Ushbu parametrlar protseduraga kiradi, protsedura ularni bajarish paytida ularni qayta ishlaydi. OUT parametrlari. Chiqish. Bu qandaydir natija. Protsedura ishladi va OUT parametrlari orqali biz o'z natijamizni olishimiz mumkin. INOUT parametrlari. Bir vaqtning o'zida kirish va chiqish. Ular IN yoki OUT sifatida ishlatilishi yoki bir vaqtning o'zida, masalan, hisoblagich yaratishda ishlatilishi mumkin. Murojaat qilish. Protsedurani yaratish. CALL buyrug'i ma'lumotlar bazasida saqlanadigan protsedurani chaqirish uchun ishlatiladi. Sintaksis quyidagicha: • CALL protsedura_nomi([parametr[,...]]) CALL protsedura_nomi [()] MySQL Hech qanday parametrga ega bo'lmagan saqlanadigan protseduralarni qavslarsiz chaqirish mumkin. • Shuning uchun CALL job_data() bilan CALL job_data teng. • SHOW CREATE PROCEDURE Ushbu operator MySQL kengaytmasi. Belgilangan saqlash tartibini qayta tiklash uchun ishlatilishi mumkin bo'lgan aniq satrni qaytaradi. Sintaksis quyidagicha: • SHOW CREATE PROCEDURE protsedura_nomi 10.4. characteristic xarakteristikalar bloki CREATE PROCEDURE operatorining sintaksisida siz protseduraning xususiyatlarini tavsiflovchi bloklardan foydalanishingiz mumkin. Bloklar qavslardan keyin paydo bo'ladi, ammo protsedura tanasidan oldin. Ushbu bloklar ixtiyoriydir. CHARACTERISTIC: COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } COMMENT xususiyati MySQL kengaytmasi. Saqlanadigan protsedurani tasvirlash uchun foydalaniladi va ushbu ma'lumot SHOW CREATE PROCEDURE operatori yordamida ko'rsatiladi. LANGUAGE tavsifi protseduraning asosiy qismi SQL-da yozilganligini anglatadi. NOT DETERMINISTIC. Bu ma'lumot beruvchi xususiyat. Agar protsedura har doim bir xil kirish parametrlari uchun bir xil natijani beradigan bo'lsa, "deterministik" deb hisoblanadi, aks holda "aniqlanmaydigan" bo'ladi. CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA CONTAINS SQL MySQL saqlanadigan protsedurada ma'lumotlarni o'qiydigan yoki yozadigan hech qanday ko'rsatma mavjud emasligini anglatadi. Masalan, SET @x = 1 yoki DO RELEASE_LOCK ('abc') buyruqlari bajariladi, lekin ular ma'lumotlarni o'qimaydi va yozmaydi. Agar xarakteristikada boshqacha ko'rsatilmagan bo'lsa, bu odatiy hisoblanadi. NO SQL protsedura SQL operatorlarini o'z ichiga olmaydi. READS SQL DATA - protsedura ma'lumotlarni o'qiydigan parametrlarini o'z ichiga oladi (masalan, SELECT), ammo ma'lumotlarni yozadigan ko'rsatmalar mavjud emas. MODIFIES SQL DATA - bu ma'lumotlarni yozishi mumkin bo'lgan iboralarni o'z ichiga oladi (masalan, INSERT yoki DELETE). SQL SECURITY {DEFINER | INVOKER} SQL SECURITY qiymati SQL SECURITY DEFINER yoki SQL SECURITY INVOKER sifatida belgilanishi mumkin. Bu belgilangan usul DEFINER-bandida ko'rsatilgan qayd yozuvining imtiyozlari yoki MySQL-da saqlangan protsedurani chaqiradigan foydalanuvchining hisobi imtiyozlaridan foydalangan holda bajarilishini belgilaydi. Ushbu hisob qaydnomasi muntazam ravishda bog'langan ma'lumotlar bazasiga kirish huquqiga ega bo'lishi kerak. Odatiy qiymat - DEFINER. Agar protsedura DEFINER xavfsizlik kontekstida bajarilgan bo'lsa, protsedurani bajaradigan foydalanuvchi EXECUTE imtiyoziga ega bo'lishi kerak. Barcha sanab o'tilgan xususiyatlar bloklari standart qiymatlarga ega. Quyidagi ikkita operator bir xil natijani beradi: mysql> CREATE PROCEDURE job_data() -> SELECT * FROM JOBS; $$ Query OK, 0 rows affected (0.00 sec) Quyidagi bilan bir hil: mysql> CREATE PROCEDURE new_job_data() ->COMMENT '' ->LANGUAGE SQL ->NOT DETERMINISTIC ->CONTAINS SQL ->SQL SECURITY DEFINER ->SELECT * FROM JOBS; $$ Query OK, 0 rows affected (0.26 sec) 10.5. MySQL: Murakkab operatorlar Murakkab operator - bu boshqa bloklarni o'z ichiga olgan blok: o'zgaruvchan deklaratsiyalar, holat va kursorni qayta ishlash moslamalari, oqimlarni boshqarish konstruktsiyalari, sikllar va shartli testlar. MySQL 5.6 holatiga ko'ra quyidagi tarkibiy tuzilmalar mavjud: • BEGIN … END murakkab operatori; • Operatorlar belgilanishi; • DECLARE; • Saqlangan dasturlardagi o'zgaruvchilar; • Ma'lumot oqimini boshqarish operatorlari; • Kursorlar; • Shartlarni qayta ishlovchilar. CREATE PROCEDURE operatorining parametrlari bilan bog'liq dastlabki to'rtta operatorlarni ko'rib chiqamiz. 10.6. BEGIN ... END murakkab operatori sintaksisi Bu operator ichiga bir nechta operatorlarni joylashtirish kerak bo'lganda ishlatiladi (masalan, MySQL-da saqlanadigan protsedura, funktsiya, trigger yoki voqea). Sintaksis quyidagicha: • [belgi_boshi:] BEGIN • [operatorlar_ ro'yxati] • END [belgi_oxiri]) Operatorlar ro’yhati: nuqta-vergul bilan (yoki) tugatilgan bir yoki bir nechta iboralar. Operatorlar ro'yxatining o'zi ixtiyoriy, shuning uchun bo'sh BEGIN END ko'rsatmasi haqiqiydir. 10.7. Operatorlar belgisi Belgilar bu BEGIN ... END bloklari va REPEAT va WHILE tsikllari uchun bajarishga ruxsatdir. Sintaksis quyidagicha: • [boshlash_belgisi:] BEGIN • [operatorlar_royxati] • END [tugash_belgisi] • [boshlash_belgisi:] LOOP • operatorlar_royxati • END LOOP [tugash_belgisi] • [boshlash_belgisi:] REPEAT • operatorlar_royxati • UNTIL search_condition • END REPEAT [tugash_belgisi] • [boshlash_belgisi:] WHILE условие_поиска • DO operatorlar_royxati END WHILE [tugash_belgisi] 10.8. DECLARE bayonoti Saqlanadigan protsedurani yaratishda MySQLdagi turli xil lokal elementlarni aniqlash uchun ishlatiladi. Masalan, lokal o'zgaruvchilar, shartlar, ishlov beruvchilar , kursorlar. DECLARE faqat BEGIN ... END operatori ichida ishlatiladi va boshqa barcha operatorlardan oldin joylashadi. E’lon qilishlar uchun quyidagi qoidalar qo'llaniladi: • Kursor deklaratsiyalari ishlov beruvchilar deklaratsiyalari oldiga qo'yilishi kerak; • Argumentlar va shartlar kursor yoki ishlov beruvchilar, deklaratsiyalar oldin joylashtirilgan bo'lishi lozim. Saqlanadigan dasturlardagi o'zgaruvchilar. Saqlanadigan dasturlar lokal o’zgaruvchilarni aniqlash uchun DECLARE operatoridan foydalanadi. Protseduralar va funktsiyalar, e'lon qilinganida, uni chaqirayotgan agent va qism dastur bilan qiymatlar almashadigan parametrlarni qabul qilishi mumkin. O’zgaruvchini e’lon qilish: • DECLARE o'zgaruvchi_nomi [, o'zgartiruvchi_nomi] ... type [DEFAULT qiymati] O'zgaruvchiga standart qiymatni berish uchun DEFAULT bloki ishlatiladi. Qiymatni ifoda sifatida ko'rsatish mumkin; bu konstanta bo'lishi shart emas. Agar DEFAULT bloki bo'lmasa, boshlang'ich qiymat NULL ga teng. Misol - lokal o'zgaruvchilar. Lokal o'zgaruvchilar MySQL saqlanadigan protseduralari ichida e'lon qilinadi. Ular faqat END ... BEGIN blokida ishlatiladi. Lokal o'zgaruvchilar har qanday SQL ma'lumot turiga ega bo'lishi mumkin. Quyidagi misol saqlanadigan protsedurada lokal o'zgaruvchilardan foydalanishni namoyish etadi: DELIMITER $ $ CREATE PROCEDURE my_procedure_Local_Variables () BEGIN /* lokal o'zgaruvchilar deklaratsiyasi */ DECLARE a INT DEFAULT 10; o'zgaruvchini ishlatish */ SET a = a + 100; SET b = 2; o’zgaruvchi ichma ich blokda */ DECLARE b, c INT; /* lokal SET c = a + b ; BEGIN /* local DECLARE c INT ; SET c = 5; /* lokal o'zgaruvchi yopiq blokda e'lon qilingan xuddi shu nomdagi o'zgaruvchiga nisbatan ustunlikka ega. */ SELECT a, b, c; END; SELECT a, b, c; END $$ Protsedurani bajaring: • mysql> CALL my_procedure_Local_Variables(); • +------+------+------+ • |a |b |c | • +------+------+------+ • | 110 | 2 | 5 | • +------+------+------+ • 1 row in set (0.00 sec) • +------+------+------+ • |a |b |c | • +------+------+------+ • | 110 | 2 | 112 | • +------+------+------+ • 1 row in set (0.01 sec) • Query OK, 0 rows affected (0.03 sec) Masalan: foydalanuvchi o'zgaruvchilari. MySQLda saqlanadigan protseduralarda foydalanuvchi o'zgaruvchisiga foydalanuvchi o'zgaruvchisi oldidagi (masalan, @x va @y) ampersand (@) belgisi yordamida kirish mumkin. Quyidagi misol saqlanadigan protsedura ichida maxsus o'zgaruvchilardan foydalanishni namoyish etadi: • DELIMITER $$ • CREATE PROCEDURE my_procedure_User_Variables() • BEGIN SET @x = 15; SET @y = 10; • SELECT @x, @y, @x-@y; • END$$ Protsedurani bajarilishi: mysql> CALL my_procedure_User_Variables() ; +------+------+-------+ | @x | @y | @x-@y | +------+------+-------+ | 15 | 10 | 5 | +------+------+-------+ 1 row in set (0.04 sec) Query OK, 0 rows affected (0.05 sec) Parametrlar uchun CREATE PROCEDURE sintaksisi quyidagicha: • CREATE [DEFINER = { foydalanuvchi | CURRENT_USER }] PROCEDURE protsedura_nomi ([protsedura_parametri[,...]]) [xarakteristikalar ...] qism_dastur_tanasi • protsedura_parametrlari: [ IN | OUT | INOUT ] protsedura_nomi type Sintaksis variantlari: • CREATE PROCEDURE protsedura_nomi () … • CREATE PROCEDURE protsedura_nomi ([IN] protsedura_nomi type)… • CREATE PROCEDURE protsedura_nomi ([OUT] parametr_nomi type)… • CREATE PROCEDURE protsedura_nomi ([INOUT] parametr_nomi type)… Birinchi misolda parametrlar ro'yxati bo'sh. Ikkinchi misolda IN parametri protseduraga qiymatni uzatadi. Ushbu protsedura qiymatni o'zgartirishi mumkin. Ammo protsedura qiymatni qaytarganda, u murojaat qiluvchiga ko'rinmaydi. Uchinchi misolda OUT parametri protseduradan murojaat qiluvchiga qaytariladi. Uning protseduradagi boshlang'ich qiymati NULL bo'ladi va protsedura qaytib kelganda, u murojaat qiluvchiga ko'rinadi. To'rtinchi misolda, INOUT parametri chaqiruvchi tomonidan o'rnatiladi, uni protsedura o'zgartirishi mumkin va protsedura qaytib kelganda, MySQLda saqlangan protseduralar tomonidan qilingan har qanday o'zgarishlar murojaat qiluvchiga ko'rinadi. Protsedurada har bir parametr IN parametr uchun birlamchi bo'ladi. Buni o'zgartirish uchun parameter nomidan oldin OUT yoki INOUT kalit so'zidan foydalaning. IN parametriga misol. Quyidagi protsedura IN paraemtridan foydalanadi "var1" (turi butun), foydalanuvchidan raqam oladi. Protseduraning asosiy qismida "jobs" jadvalidan satrlarni tanlaydigan SELECT operatori mavjud. Qatorlarning soni foydalanuvchi tomonidan belgilanadi. Quyida protsedura keltiriladi: • mysql> CREATE PROCEDURE my_proc_IN (IN var1 INT) • -> BEGIN • -> SELECT * FROM jobs LIMIT var1; • -> END$$ • Query OK, 0 rows affected (0.00 sec) "jobs" jadvalidan birinchi ikkita qatorni tanlash uchun quyidagi buyruq bajariladi: • mysql> CALL my_proc_in(2)$$ • «jobs» jadvalining birinchi 5 satri: • mysql> CALL my_proc_in(5)$$ OUT parametriga misol. OUT parametridan foydalanadigan MySQL protseduraga misol quyidagi MySQL protsedurasining bir qismi sifatida, MAX() funktsiyasi “jobs” jadvalining MAX_SALARY ustunidan maksimal maoshni oladi: • mysql> CREATE PROCEDURE my_proc_OUT (OUT highest_salary INT) • -> BEGIN • -> SELECT MAX(MAX_SALARY) INTO highest_salary FROM JOBS; • -> END$$ • Query OK, 0 rows affected (0.00 sec) Jarayon tanasida parametr MAX_SALARY ustunidan eng yuqori ish haqini oladi. Protsedurani chaqirgandan so'ng OUT so'zi MBBTga protseduradan kelib chiqadigan qiymatni xabar qiladi highest_salary - bu chiqish parametrining nomi va CALL operatorida biz uning qiymatini @M nomli seans o'zgaruvchisiga o'tkazdik: • mysql> CALL my_proc_OUT(@M)$$ Query OK, 1 row affected (0.03 sec) mysql> SELECT @M$$ +-------+ | @M | +-------+ | 40000 | +-------+ 1 row in set (0.00 sec) INOUT parametriga misol. Quyidagi misolda INOUT va IN parametrlaridan foydalanadigan MySQL saqlanadigan protsedurasi ko'rsatilgan. Foydalanuvchi “M” yoki “F” orqali IN parametrga (emp_gender) user_details jadvalidagi erkak yoki ayol xodimlari sonini hisoblaydi. INOUT (mfgender) parametri natijani foydalanuvchiga qaytaradi. Bu еrda protsedura kodi va natijasi: • mysql> CREATE PROCEDURE my_proc_INOUT (INOUT mfgender INT, IN emp_gender CHAR(1)) • -> BEGIN • -> SELECT COUNT(gender) INTO mfgender FROM user_details WHERE gender = emp_gender; • -> END$$ • Query OK, 0 rows affected (0.00 sec) Belgilangan jadvalda biz ayollar va erkaklar sonini tekshiramiz: • mysql> CALL my_proc_INOUT(@C,'M')$$ • Query OK, 1 row affected (0.02 sec) • mysql> SELECT @C$$ +------+ | @C | +------+ | 3| +------+ 1 row in set (0.00 sec) mysql> CALL my_proc_INOUT(@C,'F')$$ Query OK, 1 row affected (0.00 sec) mysql> SELECT @C$$ +------+ | @C | +------+ | 1| +------+ 1 row in set (0.00 sec) Nazorat savollari 1. SQLda saqlanadigan protsedura. Ikki turdagi SQL qism dasturi. 2. Saqlanadigan protseduralarning afzalligi nimada? 3. CREATE PROCEDURE protsedurasini yarating. Sintaksis. 4. SQLda saqlanadigan protsedura parametrlari. 5. SQL characteristic saqlanadigan protseduralar bloklari. 6. SQLning saqlanadigan protseduralari murakkab operatorlari. 7. Saqlanadigan SQL dasturlaridagi o'zgaruvchilar. DECLARE operatori. 8. Saqlanadigan dasturlardagi o'zgaruvchilar. IN, OUT , INOUT parametrlari. 11. Tranzaktsiyalarni boshqarish. So'rovlarni yaratish va qayta ishlash. 11.1. Tranzaktsiya tushunchasi Tranzaktsiya - bu ma'lumotlar bazasida amalga oshiriladigan, butun bo'lib bajariladigan va ma'lumotlar bazasini bir izchil holatdan ikkinchisiga boshqa holatga o'tkazish operatsiyalarining ketma-ketligi. Tranzaktsiyaga kiritilgan operatsiyalar soni birdan yuzlab, minglab bo'lishi mumkin. Dasturchi qaysi buyruqlar bitta operatsiya sifatida bajarilishini va qaysi ketma-ketlikdagi tranzaktsiyalarga bo'lishini hal qiladi. Tranzaktsiyani amalga oshirayotganda, ma'lumotlar bazasi ma'lumotlar bazasi tizimning to'g'ri va ishonchli ishlashini ta'minlash uchun tranzaktsiyaga kiritilgan buyruqlar to'plamini qayta ishlashni ta'minlashi kerak. Tranzaktsiya ACID talablariga javob berishi kerak . 11.2. ACID - talablar ACID - talablar tizimining to'g'riligini va ishonchliligini kafolatlaydi va tranzaktsiyalarni qayta ishlashning asosiy xususiyatidir Atomic (atomarlik) - Tranzaktsiya qisman bajarilmaydi, to'liq bajariladi yoki umuman amalga oshirilmaydi Consistency (muvofiqlik) - Tranzaktsiyadan keyin barcha ma'lumotlar izchil holatda bo'lishi kerak) Isolation (izolyatsiya) - Tranzaktsiya avtonom bo'lishi kerak va boshqa tranzaktsiyalarga ta'sir qilishi yoki ularga bog’liq bo’lishi kerak. Durability (barqarorlik) - Tranzaktsiya tugagandan so'ng, o'zgarishlar o'zgarishsiz qoladi . Tranzaktsiyalarni tugatish variantlari . Tranzaktsiyani tugatishning 2 varianti: muvaffaqiyatli barcha operatsiyalar bajarildi muvaffaqiyatsiz Tranzaktsiyani qaytarish – bu operatsiyani bajarish paytida kiritilgan ma'lumotlar bazasidagi barcha o'zgartirishlarning bekor qilinishini ta'minlaydigan harakatlar Tranzaktsiyani mustahkamlash – bu operatsiyani bajarish paytida qilingan ma'lumotlar bazasidagi o'zgarishlar diskda saqlanishini ta'minlaydigan harakatlar Bloklashlar. Kichik tranzaktsiyalardan foydalanish samaradorligining oshishi, operatsiya tugagandan so'ng, server ma'lumotlarga bloklash kiritishi bilan bog’liq. Bloklash - bu ma'lum bir ma'lumotlarni qayta ishlash operatsiyalarini vaqtincha cheklash. Blokash jadvalning bitta qatoriga ham, butun ma'lumotlar bazasiga ham qo'llash mumkin. Bloklashlarni boshqarish serverda bloklash menejeri tomonidan boshqariladi, u ularni qo'llash va konfliktlarni hal qilishni boshqaradi. Tranzaktsiyalar va bloklashlar bir-biri bilan chambarchas bog'liq. Tranzaktsiyalar ACID talablari bajarilishini ta'minlash uchun ma'lumotlar bloklanadi. Bloklashlardan foydalanmasdan, bir nechta operatsiyalar bir xil ma'lumotlarni o'zgartirishi mumkin. Bloklash - bu ketma-ket jarayonlarni boshqarish usuli bo'lib, unda ma'lumotlar bazasi ob'ekti operatsiyadan xabarsiz o'zgartirilishi mumkin emas, ya'ni. ob'ektga boshqa operatsiyalar tomondan kirish blokirovka qilinadi, bu esa ob'ektga oldindan aytib bo'lmaydigan o'zgarishlarni istisno qiladi. Bloklashning ikki turi mavjud: Yozuvni blokirovka qilish - tranzaktsiyalar satrlarni jadvallarga shunday joylashtiradiki, bunda boshqa tranzaktsiyalarning ushbu satrlarga bo'lgan so'rovi bekor qilinadi. o'qish blokirovkasi - tranzaktsiyalar satrlarni blokirovka qiladi, shunda ushbu yozuvlarni blokirovka qilish bo'yicha boshqa tranzaktsiyaning so'rovi rad qilinadi, o'qishni blokirovkasi esa qabul qilinadi. MBBT parallelizmni oldini olish uchun ma'lumotlarga ruhsat protokolidan foydalanadi. Uning mohiyati quyidagicha: jadvalda ma'lumotlar satrida bajarilgan natija, uni qidirish natijasi bo'lgan tranzaktsiya ushbu satrda o'qilgan blokga ega bo'lishi kerak; ma'lumotlar satrini o'zgartirishga mo'ljallangan operatsiya yozuv blokirovkasini qo'yadi; agar mavjud blokirovka tufayli qatorda talab qilingan bloklash rad qilinsa, u holda blokirovka qo'yilguncha tranzaktsiya kutish rejimiga o'tkaziladi; yozish blokirovkasi tranzaktsiya oxirigacha saqlanib qoladi. Ma'lumotlar bazasini parallel ravishda qayta ishlash muammosining еchimi shundaki, jadval satrlari bloklangan va ushbu qatorlarni o'zgartiruvchi keyingi operatsiyalar rad etilib, kutish holatiga o'tkaziladi. Ma'lumotlar bazasining yaxlitligini saqlab qolish xususiyati tufayli tranzaktsiyalar foydalanuvchilarni xavfsiz holatga keltiradigan birliklardir. Darhaqiqat, agar ma'lumotlar bazasi bilan o'zaro ishlashning har bir seansi tranzaktsiya orqali amalga oshirilsa, foydalanuvchi ma'lumotlar bazasining izchil holatiga - foydalanuvchi o'zi bilan ishlayotgan bo'lsa ham, bo'lishi mumkin bo'lgan holatga murojaat qilishdan boshlanadi. 11.3. Tranzaktsiyalarni bajarishda muammolar Agar blokirovka mexanizmlari ma'lumotlar bazasini boshqarish tizimida amalga oshirilmasa, bir vaqtning o'zida bir nechta foydalanuvchi bir xil ma'lumotni o'qiydi va o'zgartiradi, kirishda quyidagi parallel muammolar paydo bo'lishi mumkin: oxirgi o'zgartirish (lost update) muammosi bir nechta foydalanuvchi bitta satrni dastlabki qiymatiga qarab o'zgartirganda paydo bo'ladi; keyin ma'lumotlarning bir qismi yo'qoladi, chunki har bir keyingi operatsiya avvalgisiga kiritilgan o'zgarishlarning ustiga yoziladi. Ushbu vaziyatdan chiqish yo'li - izchil o'zgarishlar kiritish; «iflos» o'qish (dirty read) muammosi, agar foydalanuvchi mantiqiy to'g'ri holatga ega bo'lishidan oldin ma'lumotlarni ko'p marta o'zgartirishni talab qiladigan ma'lumotlarni qayta ishlash bo'yicha murakkab operatsiyalarni bajarsa. Agar ma'lumotni o'zgartirayotganda boshqa foydalanuvchi ularni o'qisa, u mantiqiy noto'g'ri ma'lumotni olishi mumkin. Bunday muammolarni oldini olish uchun barcha o'zgarishlar tugagandan so'ng ma'lumotlarni o'qish kerak; takrorlanmaydigan o'qish muammosi (non-repeatable read) - tranzaktsiyalar bo'yicha bir xil ma'lumotlarni qayta-qayta o'qish natijasida. Birinchi operatsiyani bajarish paytida, boshqasi ushbu ma'lumotlarga o'zgartirishlar kiritishi mumkin, shuning uchun qayta ko'rib chiqishda birinchi operatsiya turli xil ma'lumotlar to'plamini oladi, bu ularning yaxlitligini yoki mantiqiy nomuvofiqligini buzilishiga olib keladi; fantomlarni o'qish bilan bog'liq muammolar (phantom reads) bitta operatsiya jadvaldan ma'lumotlarni olgandan so'ng paydo bo'ladi, boshqasi birinchi tugashidan oldin satrlarni qo'shadi yoki o'chiradi. Jadvaldan tanlangan qiymatlar noto'g'ri bo'ladi. Yuqoridagi muammolarni hal qilish uchun maxsus ishlab chiqilgan standart to'rtta blokirovka darajasini belgilaydi. Tranzaktsiyalarni izolyatsiya qilish darajasi boshqa (parallel) tranzaktsiyalar joriy tranzaktsiya tomonidan o'zgartirilgan ma'lumotlarga o'zgartirishlar kiritishi mumkinligini va joriy tranzaktsiyalar parallel ravishda amalga oshirilgan o'zgarishlarni ko'ra oladimi yoki aksincha. Har bir keyingi daraja avvalgisining talablarini qo'llab-quvvatlaydi va qo'shimcha cheklovlarni qo'yadi: ketma-ket, takroriy o'qiladigan, o'qishga topshirilgan, o'qilmagan. Har bir keyingi daraja avvalgisining talablarini qo'llab-quvvatlaydi va qo'shimcha cheklovlarni qo'yadi: 0-bosqich - ma'lumotlar "ifloslanishi" ni taqiqlaydi. Ushbu daraja faqat bitta tranzaktsiya ma'lumotni o'zgartirishi kerakligini talab qiladi; agar boshqa operatsiya xuddi shu ma'lumotni o'zgartirishi kerak bo'lsa, u birinchi tranzaktsiyaning tugashini kutishi kerak; 1-bosqich - "iflos" o'qishni taqiqlash. Agar tranzaktsiya ma'lumotni o'zgartira boshlasa, birinchi tugallanguniga qadar boshqa hech qanday operatsiya uni o'qiy olmaydi; 2-bosqich - qaytarib bo'lmaydigan o'qishni taqiqlash. Agar tranzaktsiya ma'lumotni o'qisa, uni boshqa hech qanday operatsiya o'zgartira olmaydi. Shunday qilib, qayta o'qiyotganda, ular asl holatida bo'ladi; 3-bosqich - fantomlarning man etilishi. Agar tranzaktsiya ma'lumotlarga murojaat qilsa, unda boshqa hech qanday operatsiya tranzaktsiya davomida o'qilishi mumkin bo'lgan yangi satrlarni qo'sholmaydi yoki o'chirolmaydi. Ushbu qulflash darajasi kalitlarni bloklash yordamida amalga oshiriladi. Bunday blok jadvalning ma'lum qatorlariga emas, balki ma'lum bir mantiqiy shartni qanoatlantiradigan qatorlarga o'rnatiladi. Tranzaksiyani izolyatsiya qilish darajalari Serializable – boshqa tranzaksiya ishlatayotgan ma'lumotlarga murojaat qila olmaysiz. Repeatable Read – yangilangan yoki o'chirilgan ma'lumotlarga murojaat qila olmaysiz, ammo qo'shilgan ma'lumotlarga murojaat qilishingiz mumkin. Read Committed – olingan ma'lumotlarga kirishingiz mumkin. Read Uncommitted – har qanday yangilangan va saqlanmagan ma'lumotlarga murojaat qilishingiz mumkin. Snapshot – har bir operatsiya ma'lumotlarning o'z versiyasi bilan ishlaydi. SET TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT | SERIALIZABLE } Izolyatsiya darajasi Lost updateyo’qolgan o’zgarish Dirty read«Iflos» o’qish Nonrepeatable readtakrorlanmaydi gan o’qish Phantom readfantom o’qish Serializable Repeatable Read Read Committed Read Uncommitted Snapshot Rasm. Tranzaktsiyani izolyatsiya qilish darajasi va butunlik xatolari. READ UNCOMMITTED O’qishga blokirovka o’rnatilmaydi Tranzaktsiyalar boshqa tranzaktsiyalar tomonidan o'zgartirilgan satrlarni o'qishi mumkin, ammo saqlanmagan satrlarni emas. Bu sizga saqlanmagan o’zgarishlarni o’qishga imkon beradi Ma'lumotlar tarkibidagi qiymatlar o'zgarishi mumkin va tranzaktsiya tugashidan oldin ma'lumotlar bazasida satralar paydo bo'lishi va yo'q bo'lib ketishi mumkin. Bu izolyatsiya darajasida eng kichik cheklov. Boshqa tranzaktsiyalar tomonidan o'zgartirilgan ma'lumotlarni o'qiy olmaysiz, ammo hali amalga oshirilmagan - "iflos" ma'lumotlar. Mavjud tranzaktsiya ishlayotgan paytda o'qilgan ma'lumotlar boshqa tranzaktsiya orqali o'zgartirilishi mumkin, natijada ma'lumotlar takrorlanmaydi va o'qilmaydi. Bu rejim SQL Serverda odatiy tarzda o’rnatilgan REPEATABLE READ O'zgartirilgan, ammo boshqa tranzaktsiyalar tomonidan amalga oshirilmagan ma'lumotlarni o'qish mumkin emas. Umumiy bloklashlar barcha o'qilgan ma'lumotlarga qo'llaniladi va ular tugatilgunga qadar saqlanadi. Bu boshqa tranzaktsiyalarni joriy tranzaktsiya tomonidan o'qilgan satrlarni o'zgartirishga to'sqinlik qiladi. Boshqa tranzaktsiyalar joriy tranzaktsiyani qidirish shartlariga mos keladigan yangi satrlarni joylashtirishi mumkin. Diapazonni qayta o'qiyotganda yangi "fantom" satrlari paydo bo'lishi mumkin. SNAPSHOT Tranzaktsiya boshida ma'lumotlar bazasidan nusxa ko'chiradi. Joriy tranzaktsiya boshlanganidan beri boshqa tranzaktsiyalar tomonidan kiritilgan ma'lumotlar o'zgarishini ko'rmaydi. O'chirilgan tranzaktsiyalar bo'yicha ma'lumotlarni o'qish boshqa operatsiyalarni yozishga to'sqinlik qilmaydi. Agar tranzaktsiya boshlanganidan keyin kimdir tomonidan o'zgartirilgan ma'lumotlarni yozishga harakat qilsa, u to'xtatiladi. Momental surat izolatsiyasi darajasidan foydalangan holda tranzaktsiyani boshlashdan oldin ALLOW_SNAPSHOT_ISOLATION ma'lumotlar bazasi parametrini ON holatiga qo'yish kerak. Momental tasvirni izolatsiyalash darajasida amalga oshirilgan tranzaktsiyada qilingan o'zgarishlar ko'rib chiqilishi mumkin. SERIALIZABLE Boshqa tranzaktsiyalar tomonidan o'zgartirilgan, ammo hali amalga oshirilmagan ma'lumotlarni o'qiy olmaysiz. Boshqa tranzaktsiyalar joriy tranzaktsiya tomonidan o'qilgan ma'lumotlarni o'zgartira olmaydi. Boshqa tranzaktsiyalar joriy tranzaktsiya tugagunga qadar o'qilgan asosiy qiymatlari bo'lgan yangi qatorlar qo'sha olmaydi. Qayta o'qishda bir xil satrlar to'plami bo'ladi. O'qish oralig'idagi blokirovkalar tranzaktsiya tugaguncha saqlanadi. Bir vaqtning o'zida mos kelmasligi sababli, ushbu parametr faqat kerak bo'lganda tavsiya etiladi. 11.4 Tranzaktsiyalarni boshqarish Tranzaktsiyalarni boshqarish relyatsion MBBT doirasida bajariladigan ma'lumotlar bo'yicha turli xil operatsiyalarni boshqarish qobiliyatini anglatadi. Avvalo, INSERT, UPDATE va DELETE operatorlarini bajarilishi nazarda tutilyapti. Masalan, jadval yaratgandan so'ng (CREATE TABLE buyrug'ini bajarish), natijani saqlash shart emas: jadvalni yaratish avtomatik ravishda ma'lumotlar bazasiga o'tkaziladi. Shunga o'xshab, tranzaktsiyani bekor qilish yordamida, DROP TABLE operatori bilan o'chirilgan jadvalni tiklab bo’lmaydi. Bitta tranzaktsiyaning tarkibiga kiritilgan buyruqlar muvaffaqiyatli bajarilgandan so'ng ma'lumotlar darhol o'zgarmaydi. Tranzaktsiyani yakunlash uchun tranzaktsiyalarni boshqarish buyruqlari mavjud bo'lib, ularning yordamida siz ularni bajarish paytida yuz bergan barcha o'zgarishlarni ma'lumotlar bazasida saqlashingiz yoki ularni butunlay bekor qilishingiz mumkin. Tranzaktsiyalarni boshqarish uchun ishlatiladigan uchta buyruq mavjud: COMMIT – o'zgarishlarni saqlash uchun; ROLLBACK – o'zgarishlarni bekor qilish; SAVEPOINT – aniq qaytib kelish nuqtalarini o'rnatish. Tranzaktsiyalarni aniqlashning turlari. Aniq - Tranzaktsiyalarni boshlash va tugatish buyruqlarini aniq ko'rsatish talab etiladi Avtomatik - Har bir buyruq alohida tranzaktsiya sifatida ko'rib chiqiladi; Yashirin (nazarda tutilgan) - tranzaktsiya birinchi SQL operatoridan boshlanadi va tranzaktsiya tugashining aniq ko'rsatmasi bilan tugaydi; Tranzaktsiya va blokirovka qiladigan so'rovlar. MySQL so'rovlar orqali tranzaktsiyalarni qo'llab-quvvatlaydi (berilgan klient sessiyasi ichida): • SET autocommit • START TRANSACTION • COMMIT • ROLLBACK Tranzaktsiyalarni boshqarish operatorlari. SET autocommit. Odatda MySQL AUTOCOMMIT rejimida ishlaydi. Bu shuni anglatadiki, agar siz aniq tranzaktsiyani amalga oshirmasangiz, har bir so'rov avtomatik ravishda alohida tranzaktsiyada bajariladi. Siz konfiguratsion o'zgaruvchiga quyidagi qiymatni o'rnatib, joriy ulanish uchun AUTOCOMMIT rejimini yoqishingiz yoki o'chirib qo'yishingiz mumkin: mysql> SHOW VARIABLES LIKE 'AUTOCOMMIT'; START TRANSACTION [transaction_characteristic [, transaction_characteristic] ...] transaction_characteristic: { WITH CONSISTENT SNAPSHOT | READ WRITE | READ ONLY } BEGIN [WORK] COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE] ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE] SET autocommit = {0 | 1} START TRANSACTION yoki BEGIN - quyidagilar uchun ishlatiladi: Tranzaktsiya boshlanganligini saqlash. Qaysi obyektlar qo'lga olinayotganligini (agar kerak bo'lsa) va ularni bloklash darajasini ko’rsatish SAVEPOINT <NAME> Tranzaktsiya qisman orqaga qaytarilganda mumkin bo'lgan qaytarish nuqtasini belgilaydi. SAVEPOINT saqlash_nuqtasi_nomi RELEASE SAVEPOINT <NAME> Muvaffaqiyatli yakunlangan qaytish nuqtasini o'chirish COMMIT - quyidagilar uchun ishlatiladi: joriy tranzaktsiyada "doimiy" ravishda barcha o'zgarishlarni amalga oshirish (aslida ma'lumot biroz keyinroq o'zgarishi mumkin). ushbu operatsiyani bajarish uchun barcha saqlash joylarini tozalash tranzaktsiyani yakunlash ushbu tranzaktsiya uchun barcha bloklarni bo'shatish ROLLBACK - quyidagilar uchun ishlatiladi: tranzaktsiya boshlanishidan yoki ba'zi saqlash joyidan (SAVEPOINT) qilingan barcha o'zgarishlarni bekor qilish. ushbu operatsiyani bajarish uchun barcha saqlash joylarini tozalash tranzaktsiyani yakunlash ushbu tranzaktsiya uchun barcha bloklarni bo'shatish misollar: BEGIN; INSERT INTO table1 VALUES (1); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (2); ROLLBACK TO SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (3); COMMIT; BEGIN; INSERT INTO table1 VALUES (3); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (4); RELEASE SAVEPOINT my_savepoint; COMMIT; START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summary=@A WHERE type=1; COMMIT; O’zaro bloklashlar Ikki yoki undan ortiq tranzaktsiyalar o'zaro bir xil resurslarni ushlab turilib, bir xil resurslarni bloklaganda aylanma qaramlik yuzaga keladi. Bunday holatlar, shuningdek, tranzaktsiyalar resurslarni boshqa tartibda blokirovka qilishga uringanda ham kuzatiladi. Ular bir nechta tranzaktsiyalar bitta manbani blokirovka qilishganda yuz berishi mumkin. Misol sifatida, StockPrice jadvaliga kiradigan ikkita operatsiyani ko'rib chiqamiz: Tranzaktsiya №1 START TRANSACTION; UPDATE StockPrice SET close = 45.50 WHERE stock_id = 4 and date = '200205-01'; UPDATE StockPrice SET close = 19.80 WHERE stock_id = 3 and date = '200205-02'; COMMIT; Tranzaktsiya №2 START TRANSACTION; UPDATE StockPrice SET high = 20.12 WHERE stock_id = 3 and date = '200205-02'; UPDATE StockPrice SET high = 47.20 WHERE stock_id = 4 and date = '200205-01'; COMMIT; Agar omadingiz kelmasa, har bir operatsiya birinchi so'rovini bajaradi va ma'lumotlar satrini yangilab, uni blokirovka qiladi. Keyin barcha operatsiyalar ikkinchi qatorni yangilashga harakat qiladi, ammo u allaqachon bloklanganligini topadi. Natijada, har bir tranzaktsiya blokni olib tashlaydigan tashqi aralashuv bo'lmaguncha, boshqa tranzaktsiyaning bajarilishini kutadi. Nazorat savollari 1. Tranzaktsiya nima. Tranzaktsiya tushunchalari. 2. ACID - tranzaktsiya talablari. 3. Bloklar. Bloklashning vazifalari. Bloklash turlari. 4. Tranzaktsiyalarni amalga oshirishdagi muammolar. 5. Tranzaktsiyalarni amalga oshirishda muammoni hal qilish. Tranzaksiyani izolyatsiya qilish darajasi. 6. Tranzaksiyalarni boshqarish uchun SQL operatorlari. 7. Tranzaksiya nazorati bo'yicha SQL operatorlari: START TRANSACTION va SAVEPOINT. 8. Tranzaktsiyalarni boshqarishning SQL operatorlari: COMMIT va ROLLBACK. 9. Tranzaktsiyalarning o’zaro bloklanishi nima. 12. Maʼlumotlar bazasini administratorlash va xavfsizligini taʼminlash. Foydalanuvchi hisobini boshqarish. Ma'lumotlar bazasi tizimlari rivojlanishi bilan MySQLni o'rnatish va undan foydalanish tartiblari osonlashmoqda. Ko'rinishidan, bu MySQL bilan ishlashning soddaligi, bu uning foydalanuvchilar orasida keng tarqalishining asosiy sababi bo'ldi. Bu, ayniqsa, dasturchi bo’lmagan va bo'lishni istamaydiganlarga tegishli. Kompyuter mutaxassisining bilimlari juda foydali bo'lishi mumkin, ammo MySQLdan muvaffaqiyatli foydalanish uchun tajribali dasturchi bo'lish shart emas. 12.1. Xavfsizlik masalalari va MySQLga kirish imtiyozlari tizimi Imtiyozlar tizimi MySQL imtiyozlar tizimi foydalanuvchilarga faqat ularga ruxsat berilgan narsani bajarishni kafolatlaydi. MySQL foydalanuvchini host nomi va foydalanuvchi nomi orqali identifikatsiyalaydi. 12.2. GRANT va REVOKE komandalari sintaksisi GRANT va REVOKE buyruqlari tizim administratoriga MySQL foydalanuvchilari yaratishga va to'rtta imtiyoz darajasida foydalanuvchilarga huquqlarni berishga yoki rad etishga imkon beradi: Global daraja Global imtiyozlar ko'rsatilgan serverdagi barcha ma'lumotlar bazalariga qo'llaniladi. Ushbu imtiyozlar mysql.user jadvalida saqlanadi. Ma'lumotlar bazasi darajasi Ma'lumotlar bazasi imtiyozlari ko'rsatilgan ma'lumotlar bazasidagi barcha jadvallarga qo'llaniladi. Ushbu imtiyozlar mysql.db va mysql.host jadvallarida saqlanadi. Jadval darajasi Jadval imtiyozlari ko'rsatilgan jadvalning barcha ustunlariga qo'llaniladi. Ushbu imtiyozlar mysql.tables_priv jadvalida saqlanadi. Ustun darajasi Ustun imtiyozlari ko'rsatilgan jadvaldagi alohida ustunlarga qo'llaniladi. Ushbu imtiyozlar mysql.columns_priv jadvalida saqlanadi. GRANT komandasi sintaksisi GRANT priv_type [(column_list)] [,priv_type [(column_list)]] ... ON [object_type] priv_level TO user_or_role [, user_or_role] ... [AS user [WITH ROLE DEFAULT | NONE | ALL | ALL EXCEPT role [, role ] ... | role [, role ] ... ] ] } GRANT PROXY ON user_or_role TO user_or_role [, user_or_role] ... [WITH GRANT OPTION] GRANT role [, role] ... TO user_or_role [, user_or_role] ... [WITH ADMIN OPTION] [WITH GRANT OPTION] object_type: { TABLE | FUNCTION | PROCEDURE } priv_level: { * | *.* | db_name.* | db_name.tbl_name | tbl_name | db_name.routine_name } user_or_role: { user | role } GRANT priv_type [(column_list)] [,priv_type [(column_list)]...] ON {tbl_name | * | *.* | db_name.*} TO user_name [IDENTIFIED BY 'password'] [, user_name ...] [WITH GRANT OPTION] REVOKE priv_type [(column_list)] [,priv_type [(column_list)]...] ON {tbl_name | * | *.* | db_name.*} FROM user_name [, user_name ...] Agar imtiyozlar mavjud bo'lmagan foydalanuvchiga berilsa, u holda foydalanuvchi yaratiladi. Priv_type parametri uchun mumkin bo'lgan qiymatlar ro'yxati: ALL [PRIVILEGES] GRANT OPTIONdan tashqari barcha oddiy imtiyozlarni belgilaydi ALTER ALTER TABLEdan foydalanishga ruxsat beradi CREATE CREATE TABLEdan foydalanishga ruxsat beradi CREATE TEMPORARY TABLES CREATE TEMPORARY TABLEdan foydalanishga ruxsat beradi DELETE DELETEga ruxsat beradi DROP DROP TABLEdan foydalanishga ruxsat beradi EXECUTE Foydalanuvchiga saqlanadigan protseduralarni ishga tushirishga ruxsat beradi (MySQL 5.0 uchun) FILE SELECT ... INTO OUTFILE va LOAD DATA INFILE dan foydalanishga ruxsat beradi INDEX CREATE INDEX va DROP INDEX dan foydalanishga ruxsat beradi INSERT INSERT dan foydalanishga ruxsat beradi LOCK TABLES SELECT imtiyozlari bor jadvallarda LOCK TABLES dan foydalanishga ruxsat beradi PROCESS SHOW FULL PROCESSLIST dan foydalanishga ruxsat beradi REFERENCES Keyinchalik foydalanish uchun zahiralangan RELOAD FLUSH dan foydalanishga ruxsat beradi REPLICATION CLIENT Foydalanuvchiga asosiy va boshqariladigan serverlarning manzilini so'rash huquqini beradi REPLICATION SLAVE Replikatsiya paytida boshqariladigan serverlar uchun talab qilinadi (bosh serverning binar jurnallaridan ma'lumotlarni o'qish uchun) SELECT SELECT dan foydalanishga ruxsat beradi SHOW DATABASES SHOW DATABASES barcha ma’lumotlar bazalarini chiqaradi SHUTDOWN mysqladmin shutdown dan foydalanishga ruxsat beradi SUPER Agar maksimal_connections qiymatiga erishilgan bo'lsa ham, bitta ulanishni o'rnatishga va CHANGE MASTER, KILL thread, mysqladmin debug, PURGE MASTER LOGS va SET GLOBAL buyruqlarini bajarishga imkon beradi. UPDATE UPDATE dan foydalanishga ruxsat beradi USAGE «Imtiyozsiz»sinonimi GRANT OPTION WITH GRANT OPTION sinonimi Jadval uchun faqat quyidagi priv_type qiymatlarini ko'rsatish mumkin: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT OPTION, INDEX va ALTER. Ustun uchun faqat quyidagi priv_type qiymatlari (column_list operatoridan foydalanganda) belgilanishi mumkin: SELECT, INSERT va UPDATE. Global imtiyozlar ON *. * sintaksisi va ma'lumotlar bazasi imtiyozlari yordamida ON db_name yordamida o'rnatilishi mumkin. Agar siz joriy ma'lumotlar bazasi ochilganda ON * ni belgilasangiz, u holda ushbu ma'lumotlar bazasi uchun imtiyozlar belgilanadi. (Diqqat: joriy ma'lumotlar bazasi ochilmaganda ON * ni belgilash global imtiyozlarga ta'sir qiladi) Eslatma. GRANT operatorida ma'lumotlar bazasi nomini belgilashda '%' shablon belgilaridan foydalanish mumkin emas. Foydalanuvchi nomi (user_name) user @ host shaklida ko'rsatilishi mumkin. Maxsus belgilar (masalan, '-') yoki satr xostini o'z ichiga olgan satrli foydalanuvchini (masalan, '%') o'z ichiga olgan simli foydalanuvchini ko'rsatishingiz kerak bo'lsa, masalan, masofaviy kompyuter yoki foydalanuvchi nomini qo'shtirnoq ichiga qo'shish kerak (masalan, '). test-foydalanuvchi '@' test-xost nomi '). Bundan tashqari, masofadan turib kompyuter nomidan guruh belgilaridan foydalanishingiz mumkin. Masalan, user@'%.loc.gge 'loc.gre domenidagi barcha masofaviy kompyuterlarning foydalanuvchisini anglatadi va user@'144.155.166.%' 144.155.166 pastki tarmog'idagi barcha masofaviy kompyuterlarning foydalanuvchisini anglatadi. Oddiy shakl foydalanuvchisi - "@" foydalanuvchisining sinonimi. Jadval yoki ustun uchun imtiyozlar to'rtta darajaning har biridagi imtiyozlardan mantiqiy OR operatori yordamida yaratiladi. Masalan, agar mysql.user jadvali foydalanuvchi global SELECT imtiyoziga ega ekanligini bildirsa, bu imtiyoz ma'lumotlar bazasi, jadval yoki ustunlar darajasida bekor qilinmaydi. Ustun uchun imtiyozlar quyidagicha hisoblanishi mumkin: global imtiyozlar OR ma'lumotlar bazasi uchun imtiyozlar OR jadvaldagi imtiyozlari OR ustun imtiyozlari Ko'pgina hollarda, foydalanuvchi huquqlari faqat bitta imtiyoz darajasida belgilanadi, shuning uchun bu protsedura odatda yuqorida tavsiflangan kabi murakkab emas. Agar imtiyozlar mysql.user jadvalida bo'lmagan @ masofaviy kompyuter kombinatsiyasiga berilgan bo'lsa, ikkinchisiga yozuv qo'shiladi, u DELETE buyrug'i yordamida o'chirilguncha jadvalda qoladi. Bular GRANT buyrug'i jadvalda foydalanuvchi yozuvlarini yaratishi mumkin, ammo REVOKE buyrug'i ularni o'chira olmaydi. Buni DELETE buyrug'i yordamida bajarish kerak. 12.3. GRANT misollari Sintaksis qisqa: • mysql> GRANT <imtiyozlar turi> ON <obyekt> TO <foydalanuvchi> [IDENTIFIED BY <parol>] <qo'shimcha imkoniyatlar>; Masalan, ushbu buyruq foydalanuvchiga ruxsat beradi va agar mavjud bo'lmasa, uni yaratadi: mysql> GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; Buyruq tavsifi: ALL PRIVILEGES: ma'lumotlardan to'liq foydalanish huquqini beradi. *.*: huquqlar barcha ma'lumotlar bazalariga va barcha jadvallarga beriladi. dbuser: hisob nomi. localhost: hisobga faqat lokal kompyuterdan kirish huquqi beriladi. password: foydalanuvchiga beriladigan parol. WITH GRANT OPTION: foydalanuvchiga boshqa foydalanuvchilarga o’ziga belgilangan imtiyoz darajasida berilgan barcha imtiyozlarni berish huquqini beradi. MySQLdagi jadvalga imtiyozlar berish misollarini ko'rib chiqaylik. Masalan, dbadam foydalanuvchi nomi bilan contacts jadvalida SELECT, INSERT, UPDATE va DELETE imtiyozlarini berish uchun siz quyidagi GRANT operatorini bajarasiz: GRANT SELECT, INSERT, UPDATE, DELETE ON contacts TO ‘dbadam'@'localhost'; 'dbadam' nomli foydalanuvchiga GRANT OPTIONdan tashqari barcha ruxsatlarni berish. GRANT ALL ON contacts TO ‘dbadam'@'localhost'; Barcha foydalanuvchilarga contacts jadvalida SELECT ruxsatini berish GRANT SELECT ON contacts TO '*'@'localhost'; GRANT SELECT, UPDATE (birthday) ON people TO root3@localhost; 12.4. Jadvaldagi imtiyozlarni bekor qilish Sintaksis: REVOKE privileges ON object FROM user; Contacts jadvalidagi DELETE va UPDATE imtiyozlarini dbadam ismli foydalanuvchidan olib tashlash: REVOKE DELETE, UPDATE ON contacts FROM ‘dbadam'@'localhost'; dbadam nomli foydalanuvchi uchun jadvaldagi barcha ruxsatlarni bekor qilish (GRANT OPTIONdan tashqari): REVOKE ALL ON contacts FROM ‘dbadam'@'localhost'; 12.5. Funktsiyalar / protseduralarga imtiyozlar berish MySQLdagi funktsiya / protseduraga EXECUTE imtiyozlarini berish uchun sintaksis: GRANT EXECUTE ON [ PROCEDURE | FUNCTION ] object TO user; EXECUTE - biron bir funktsiya yoki protsedurani bajarish qobiliyati. PROCEDURE - MySQLning protseduralariga imtiyoz berilganda foydalaniladi. FUNCTION - MySQLda biron bir funktsiya uchun imtiyoz berilganda foydalaniladi. object - imtiyozlar berilgan ma'lumotlar bazasi obyektining nomi. Agar biron bir funktsiya yoki protseduraga EXECUTE imtiyozlari berilsa, bu funktsiya nomi yoki protsedura nomi bo'ladi. user - EXECUTE.RE | FUNCTION] object TO user imtiyozlari beriladigan foydalanuvchining ismi Foydalanuvchi paroli, IDENTIFIED BY operatori bilan aniqlanadi, agar u ko’rsatilgan bo’lsa. Agar foydalanuvchi allaqachon parolga ega bo'lsa, bu parol yangisi bilan almashtiriladi. Agar siz yangi foydalanuvchi yaratishda identifikatsiya qilingan parolni ko'rsatmasangiz, parolsiz foydalanuvchi yaratiladi. Bu xavfsizlik nuqtai nazaridan ishonchsizdir. Parollarni SET PASSWORD buyrug'i yordamida ham o'rnatish mumkin. SET PASSWORD FOR root@localhost = PASSWORD('new_password'); Agar foydalanuvchi jadvalda biron bir imtiyozga ega bo'lmasa, u holda jadvallar ro'yxati so'ralganda, jadval ko'rsatilmaydi (masalan, SHOW TABLES operatoridan foydalangan holda). WITH GRANT OPTION operatori foydalanuvchiga boshqa foydalanuvchilarga belgilangan imtiyoz darajasida o'zlari ega bo'lgan har qanday imtiyozlarni berish huquqini beradi. GRANT imtiyozini berishda ehtiyot bo'ling, chunki turli imtiyozlarga ega ikkita foydalanuvchi o'z imtiyozlarini birlashtirishi mumkin! Siz boshqa foydalanuvchiga siz mavjud bo'lmagan imtiyozni bera olmaysiz. GRANT imtiyozi sizga faqat mavjud imtiyozlarni berish huquqini beradi. E'tibor bering, agar foydalanuvchi ma'lum bir imtiyoz darajasida GRANT imtiyoziga ega bo'lsa, unda ushbu foydalanuvchi tomonidan berilgan barcha imtiyozlar (yoki kelajakda unga tayinlanishi mumkin bo’lgan) ushbu foydalanuvchi tomonidan ham tayinlanishi mumkin. Aytaylik, foydalanuvchiga ma'lumotlar bazasida INSERT imtiyozi berilgan. Agar siz ma'lumotlar bazasida SELECT imtiyozini belgilasangiz va GRANT OPTION WITH ni belgilansangiz, foydalanuvchi nafaqat SELECT imtiyozini, balki INSERT ni ham belgilashi mumkin. Agar siz keyin foydalanuvchiga ma'lumotlar bazasida UPDATE imtiyozini beradigan bo'lsangiz, foydalanuvchi INSERT, SELECT va UPDATE ni tayinlashi mumkin. Oddiy foydalanuvchilarga ALTER imtiyozlarini tayinlamang. Bu foydalanuvchiga jadvallarning nomini o'zgartirish orqali imtiyozlar tizimini yo'q qilish imkoniyatini beradi! GRANT va REVOKE buyruqlari bilan berilgan jadvaldagi o'zgarishlar darhol server tomonidan qayta ishlanadi. Agar siz imtiyozlarni tayinlash jadvallarini qo'lda o'zgartirsangiz (INSERT, UPDATE va hokazolarni ishlatib), siz FLUSH PRIVILEGES yoki mysqladmin flush- privileges operatorlarini serverga imtiyozlar jadvallarini qayta yuklash to'g'risida ko'rsatma berishingiz kerak. 12.6. MySQLga yangi foydalanuvchilarni qo'shish Foydalanuvchilar uch xil usulda qo'shilishi mumkin: 1) CREATE USER buyrug'i yordamida; 2) GRANT buyrug'i yordamida; 3) to'g'ridan-to'g'ri imtiyozlarni tayinlash jadvallariga. GRANT buyrug'idan foydalanish afzalroq - bu usul osonroq va kam xatolarga yo'l qo'yadi. Shuningdek, foydalanuvchilarni yaratish va boshqarishga xizmat qiluvchi juda ko'p sonli dasturlar (masalan, phpmyadmin) mavjud. CREATE USER komandasi CREATE USER user [IDENTIFIED BY [PASSWORD] 'password'] [, user [IDENTIFIED BY [PASSWORD] 'password']] . CREATE USER buyrug'i yangi MySQL hisoblarini yaratadi. Uni ishlatish uchun, siz global CREATE USER imtiyoziga yoki mysql ma'lumotlar bazasi uchun INSERT imtiyoziga ega bo'lishingiz kerak. Har bir hisob uchun CREATE USER, hech qanday imtiyozga ega bo'lmagan mysql.user jadvalida yangi qator yaratadi. Agar hisob allaqachon mavjud bo'lsa, xato yuz beradi. Har bir hisob nomiga GRANT bayonotida ko'rsatilgan format qo'llaniladi; masalan, 'jeffrey'@'localhost'. Hisob nomining foydalanuvchi va xost qismlari hisob uchun foydalanuvchi jadvallari satrining User va Host ustunlari qiymatlariga mos keladi. CREATE USER operatori MySQL ma'lumotlar bazasiga kirishga imkon beruvchi ma'lumotlar bazasi qayd yozuvini yaratadi. MySQLdagi CREATE USER buyrug'ining sintaksisi: CREATE USER user_name IDENTIFIED BY [ PASSWORD ] ‘password_value’; Parametrlar va argumentlar user_name - siz yaratmoqchi bo'lgan ma'lumotlar bazasi qayd yozuvining nomi. PASSWORD majburiy emas. Ushbu parametrni belgilaysizmi yo’qmi, CREATE USER bir xil ishlaydi. password_value bu foydalanuvchi nomini tayinlash uchun parol. CREATE USER komandasiga misollar CREATE USER 'saman'@'localhost' IDENTIFIED BY ‘123456789'; Ushbu misolda CREATE USER so'zi MySQL ma'lumotlar bazasida saman nomli yangi foydalanuvchi yaratadi, uning paroli '123456789'. Bir nechta foydalanuvchilarni yaratish Siz MySQLda bir vaqtning o'zida bir nechta foydalanuvchi yaratishingiz mumkin. Har bir foydalanuvchi / parol kombinatsiyasi bilan vergul bilan ajratilgan bir nechta foydalanuvchilarni yaratish uchun CREATE USER buyrug'idan foydalanishingiz mumkin. Masalan: CREATE USER 'samvel'@'localhost' IDENTIFIED BY 'klondike', 'serg'@'localhost' IDENTIFIED BY 'titidog'; Ushbu CREATE USER misoli MySQLda ikkita foydalanuvchi yaratadi. Birinchi foydalanuvchiga "klondike" paroli bilan samvel, ikkinchi foydalanuvchiga esa "titidog" paroli bilan serg nomi beriladi. Parol uchun xesh qiymatidan foydalanish Yuqoridagi misollar oddiy matn parolini ko'rsatadi. Shuningdek, parol uchun xesh qiymatini belgilash imkoniyati mavjud. Masalan: CREATE USER 'samvel'@'localhost' IDENTIFIED BY '*39C549BDECFBA8AFC3CE6B948C9359A0ECE08DE2'; Ushbu CREATE USER misoli MySQL ma'lumotlar bazasida parol xesh qiymati bilan yangi foydalanuvchi namunasini yaratadi. SELECT ('xyz'); Natija: * 39C549BDECFBA8AFC3CE6B948C9359A0ECE08DE2 SELECT PASSWORD('password'); Natija: *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 SELECT PASSWORD('google'); Natija: *288CAC5A9F4E53A9DCEA23A3EDCE42C695CF48B9 SELECT PASSWORD(NULL); Natija: NULL 12.7. GRANT komandasi mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost -> IDENTIFIED BY 'some_pass' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%" -> IDENTIFIED BY 'some_pass' WITH GRANT OPTION; mysql> GRANT RELOAD,PROCESS ON *.* -> TO admin@localhost; mysql> GRANT USAGE ON *.* TO dummy@localhost; Ushbu GRANT buyruqlari uchta yangi foydalanuvchilarni yaratadi. monty To'liq superfoydalanuvchi - u har qanday joydan serverga ulana oladi, lekin buning uchun some_pass parolidan foydalanishi kerak. E'tibor bering, biz monty @ localhost va monty @ "%" ni ham GRANT qilishimiz kerak. Agar siz localhostdan yozuvni qo'shmasangiz, mysql_install_db bilan yaratilgan localhost uchun noma'lum foydalanuvchi yozuvi mahalliy kompyuterdan ulanishda ustunlikka ega bo'ladi, chunki u host maydoni uchun yanada aniqroq qiymatni belgilaydi va foydalanuvchi jadvalida oldinroq joylashgan. admin localhostdan parolsiz ulanadigan foydalanuvchi; unga RELOAD va PROCESS ma'muriy imtiyozlari berilgan. Ushbu imtiyozlar foydalanuvchiga mysqladmin qayta yuklash, mysqladmin yangilash va mysqladmin flush-* buyruqlarini, shuningdek mysqladmin jarayon ro'yxatini boshqarishga imkon beradi. Unga ma'lumotlar bazasi bilan bog'liq biron bir imtiyoz berilmagan (keyinchalik ularni GRANT operatoridan foydalanib tayinlashingiz mumkin). dummy Serverga parolsiz ulanish mumkin bo'lgan foydalanuvchi, faqat mahalliy kompyuterdan. Barcha global imtiyozlar "N" ga o'rnatildi, foydalanuvchilarga imtiyozlarsiz yaratishga imkon beradigan USAGE imtiyoz turi. Keyinchalik ma'lumotlar bazasiga tegishli imtiyozlar berilishi kutiladi. INSERT buyrug'i yordamida to'g'ridan-to'g'ri foydalanuvchi yaratish mysql> INSERT INTO user VALUES('localhost','monty', -> PASSWORD('some_pass'), -> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y') ; mysql> INSERT INTO user VALUES('%','monty',PASSWORD('some_pass'), -> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); mysql> INSERT INTO user SET Host='localhost',User='admin', -> Reload_priv='Y', Process_priv='Y'; mysql> INSERT INTO user (Host,User,Password) -> VALUES('localhost','dummy',''); mysql> FLUSH PRIVILEGES; admin foydalanuvchisi uchun yaxshiroq o'qiladigan kengaytirilgan INSERT sintaksisidan foydalanish mumkin. Administrator yaratish uchun siz db yoki host jadval yozuvlarida qiymatlarni belgilashingiz shart emas. Foydalanuvchi qo'shishga misol Localhost, server.com va whitehouse.ru kompyuterlaridan ulanadigan foydalanuvchi qo'shiladi. U bank ma'lumotlar bazasiga faqat localhost kompyuteridan, faqat whitehouse.ru saytidagi ma'lumotlar bazasidan va har uch kompyuterdan customer ma'lumotlar bazasidan foydalanishi, shuningdek uchta kompyuterdan ulanishda student parolidan foydalanishi kerak. mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP -> ON bank.* -> TO custom@localhost -> IDENTIFIED BY ' student'; mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP -> ON exp.* -> TO custom@whitehouse.ru -> IDENTIFIED BY ' student'; mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP -> ON customer.* -> TO custom@'%' -> IDENTIFIED BY 'student'; Eslatma. SHOW PRIVILEGES buyrug'i MySQL serveri tomonidan qo'llabquvvatlanadigan tizim imtiyozlari ro'yxatini ko'rsatadi. mysql> show privileges; +------------+--------------------------+-------------------------------| Privilege | Context | Comment +------------+--------------------------+-------------------------------- | Select | Tables | To retrieve rows from | Insert | Tables | To insert data into | Update | Tables | To update existing | Delete | Tables | To delete existing | Index | Tables | To create or drop | Alter | Tables | To alter the | Create | Databases,Tables,Indexes | To create new databases and | Drop | Databases,Tables | To drop databases and tables | Grant | Databases,Tables | To give to other users those privileges you possess | References | Databases,Tables | To have references on tables | Reload | To reload or refresh tables, | Server Admin logs and privileges | Shutdown | Server Admin | To shutdown the | Process | To view the plain text of | Server Admin currently executing queries | File | File access on server | To read and write files on the server +------------+--------------------------+-------------------------------14 rows in set (0.00 sec) 13. Maʼlumotlar bazasiga murojaatni tashkil etishda ODBC va C++dan foydalanish 13.1. Ulagichlar va API MySQL MySQL Connectors mijoz dasturlari uchun MySQL serveriga ulanishni ta'minlaydi. APIlar MySQL protokoli va MySQL manbalariga past darajadagi kirishni ta'minlaydi. Connectrs ham, API ham boshqa til yoki muhitdan, shu jumladan ODBC, Java (JDBC), Perl, Python, PHP, Ruby va boshqalardan MySQLni ulash va bajarishga imkon beradi. Ulagichlar va API qo'llanmasi MySQL Connectors. Oracle bir nechta ulagichlarni ishlab chiqmoqda: Connector / C++ C ++ ilovalariga MySQLga ulanish imkonini beradi. Connector / J standart Java Database Connection (JDBC) API-dan foydalanib Java dasturlaridan MySQLga ulanish uchun drayverni qo'llab-quvvatlaydi. Connector / NET dasturchilarga MySQLga ulanadigan .NET dasturlarini yaratishga imkon beradi. Connector / NET to'liq xususiyatli ADO.NET interfeysini amalga oshiradi va ADO.NET vositalari bilan ishlashni qo'llab-quvvatlaydi. Connector / NET-dan foydalanuvchi dasturlar har qanday qo'llab-quvvatlanadigan .NET tilida yozilishi mumkin. MySQL Connectors Visual Studio uchun MySQL MySQL ulagichlari bilan ishlaydi Visual Studio uchun MySQL Connector / NET va Microsoft Visual Studio 2012, 2013, 2015 va 2017 bilan ishlaydi Connector / ODBC, Open Database Connectivity (ODBC) API-dan foydalanib MySQLga ulanish uchun drayverlarni qo'llab-quvvatlaydi. ODBCni qo'llab-quvvatlash Windows, Unix va macOS platformalarida mavjud. Connector / Python Python DB API 2.0 versiyasiga mos keladigan API yordamida Python dasturlaridan MySQLga ulanish uchun drayverlarni qo’llab quvvatlaydi. Python yoki MySQL mijoz kutubxonalariga qo'shimcha modullar kerak emas. Connector / NET va Microsoft Visual Studio 2012, 2013, 2015 va 2017. Visual Studio uchun MySQL Visual Studio ichidagi MySQL obyektlari va ma'lumotlariga kirishni ta'minlaydi. Visual Studio to'plami sifatida u to'g'ridan-to'g'ri Server Explorerga birlashtirilib, yangi ulanishlarni yaratish va MySQL ma'lumotlar bazasi obyektlari bilan ishlash imkoniyatini beradi. 13.2. Tashqi API MySQL Environ API ment Ada GNU Ada MySQL Bindings C C API C++ Connector/C++ Cocoa MySQL++ MySQL wrapped MySQL-Cocoa Type Notes libmysqlclient See MySQL Bindings for GNU Ada libmysqlclient See Section 28.6, “MySQL C API”. libmysqlclient See MySQL Connector/C++ 8.0 Developer Guide. libmysqlclient See MySQL++ website. libmysqlclient See MySQL wrapped. libmysqlclient Compatible with the Objective-C Cocoa environment. See http://mysqlcocoa.sourceforge.net/ D Eiffel MySQL for D Eiffel MySQL libmysqlclient See MySQL for D. libmysqlclient See Section 28.12, “MySQL Eiffel Wrapper”. Erlang erlang-mysql-driver libmysqlclient See erlang-mysql-driver. Haskell Haskell MySQL Native Driver See Brian O'Sullivan's pure Haskell Bindings MySQL bindings. hsql-mysql libmysqlclient See MySQL driver for Haskell. Java/JDB Connector/J Native Driver See MySQL Connector/J 5.1 Developer C Guide. Kaya MyDB libmysqlclient See MyDB. Lua LuaSQL libmysqlclient See LuaSQL. .NET/Mo Connector/NET Native Driver See MySQL Connector/NET Developer no Guide. Objective OBjective Caml libmysqlclient See MySQL Bindings for Objective Caml MySQL Bindings Caml. Octave Database bindings for libmysqlclient See Database bindings for GNU Octave. GNU Octave ODBC Connector/ODBC libmysqlclient See MySQL Connector/ODBC Developer Guide. Perl DBI/DBD::mysql libmysqlclient See Section 28.8, “MySQL Perl API”. Net::MySQL Native Driver See Net::MySQL at CPAN PHP mysql, ext/mysql interf libmysqlclient See Original MySQL API. ace (deprecated) mysqli, ext/mysqli inte libmysqlclient See MySQL Improved Extension. rface PDO_MYSQL libmysqlclient See MySQL Functions (PDO_MYSQL). PDO mysqlnd Native Driver Python Connector/Python Native Driver See MySQL Connector/Python Developer Guide. Python Connector/Python C libmysqlclient See MySQL Connector/Python Extension Developer Guide. MySQLdb libmysqlclient See Section 28.9, “MySQL Python API”. Ruby MySQL/Ruby libmysqlclient Uses libmysqlclient. See Section 28.10.1, “The MySQL/Ruby API”. Ruby/MySQL Native Driver See Section 28.10.2, “The Ruby/MySQL API”. Scheme Myscsh libmysqlclient See Myscsh. SPL sql_mysql libmysqlclient See sql_mysql for SPL. Tcl MySQLtcl libmysqlclient See Section 28.11, “MySQL Tcl API”. 13.3. MySQL PHP API PHP to'rt xil MySQL API kengaytmalarini ta'minlaydi: “MySQL Improved Extension”: "MySQL takomillashtirilgan" degan ma'noni anglatadi; ushbu kengaytma PHP 5.0.0 dan beri mavjud. U MySQL 4.1.1 va undan keyingi versiyalarda foydalanish uchun mo'ljallangan. Ushbu kengaytma MySQL 5.0 da ishlatiladigan autentifikatsiya protokoli va tayyorlangan operatorlar va bir nechta API-ni to'liq qo'llab-quvvatlaydi. Bundan tashqari, ushbu kengaytma keng obyektga yo'naltirilgan dasturiy interfeysni ta'minlaydi. “MySQL Functions (PDO_MYSQL)”: Bu xususiy API emas, balki PHP PDO (PHP Data Objects) uchun MySQL drayveri. MySQL PDO drayveri PDOning o'zidan pastda turadi va MySQLga tegishli funktsiyalarni ta'minlaydi. Ushbu kengaytma PHP 5.1.0 dan beri mavjud. Mysql_xdevapi: Ushbu kengaytma MySQL X DevAPIdan foydalanadi va mysql_xdevapi nomli PECL kengaytmasi sifatida mavjud. “Original MySQL API”: PHP 4 va 5-versiyalari uchun foydalanish mumkin, bu kengaytma MySQL 4.1-dan oldin MySQL-versiyalari bilan foydalanish uchun mo'ljallangan. Ushbu kengaytma MySQL 4.1-da ishlatiladigan kengaytirilgan autentifikatsiya protokolini qo'llab-quvvatlamaydi, shuningdek tayyorlangan yoki bir nechta operatorlarni qo'llab-quvvatlamaydi. MySQL 4.1 bilan ushbu kengaytmani ishlatish uchun. MySQL PHP drayverlari haqida umumiy ma'lumot PHP versiyasiga qarab MySQL ma'lumotlar bazasiga kirish uchun ikkita yoki uchta PHP API mavjud. PHP 5 foydalanuvchilari eski mysql, mysqli yoki PDO_MySQL kengaytmalaridan birini tanlashi mumkin. PHP 7 mysql kengaytmasini olib tashlaydi va faqat oxirgi ikkita variantni qoldiradi. Terminologik ma'lumot API nima? Ilovaning dasturiy interfeysi yoki API, kerakli vazifani bajarish uchun dasturingiz chaqirishi kerak bo'lgan sinflarni, usullarni, funktsiyalarni va parametrlarni belgilaydi. Ma'lumotlar bazalari bilan o'zaro ishlashi kerak bo'lgan PHP dasturlari uchun odatda zarur bo'lgan API lar PHP kengaytmalari orqali ta'minlanadi. API nima? Ilovaning dasturiy interfeysi yoki API, kerakli vazifani bajarish uchun dasturingiz chaqirishi kerak bo'lgan sinflarni, usullarni, funktsiyalarni va parametrlarni belgilaydi. Ma'lumotlar bazalari bilan o'zaro ishlashi kerak bo'lgan PHP dasturlari uchun odatda zarur bo'lgan API lar PHP kengaytmalari orqali ta'minlanadi. Connector nima? MySQL hujjatlarida "ulagich" atamasi sizning ilovangizga MySQL ma'lumotlar bazasi serveriga ulanishga imkon beradigan dasturiy ta'minotni anglatadi. MySQL turli tillar, jumladan PHP uchun ulagichlarni taqdim etadi. Driver nima? Driver - bu ma'lum bir ma'lumotlar bazasi serveri bilan aloqa qilish uchun mo'ljallangan dasturiy qism. Shuningdek, drayver MySQL Client Library yoki MySQL Native Driver kabi kutubxonaga murojaat qilishi mumkin. Ushbu kutubxonalar MySQL ma'lumotlar bazasi serveri bilan bog'lanish uchun ishlatiladigan past darajadagi protokolni amalga oshiradi. Masalan, PHP Data Objects (PDO) ma'lumotlar bazasini abstrakatsiya qilish qatlami ma'lumotlar bazasiga tegishli bir nechta drayverlardan birini ishlatishi mumkin. Mavjud drayverlardan biri PDO MYSQL drayveri bo'lib, u MySQL serveri bilan bog'lanish imkoniyatini beradi. Extension nima? Siz PHP hujjatlarida boshqa bir atama bilan tanishasiz - kengaytma. PHP kodi asosiy funktsiyalar uchun ixtiyoriy kengaytmali yadrodan iborat. MySQL bilan bog'liq PHP kengaytmalari, masalan mysqli kengaytmasi va mysql kengaytmasi PHP kengaytmasi doirasidan foydalangan holda amalga oshiriladi. 13.4. Uchta MySQL API larini taqqoslash <?php // mysqli $mysqli = new mysqli("example.com", "user", "password", "database"); $result = $mysqli->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL"); $row = $result->fetch_assoc(); echo htmlentities($row['_message']); // PDO $pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password'); $statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL"); $row = $statement>fetch(PDO::FETCH_ASSOC); echo htmlentities($row['_message']); // mysql $c = mysql_connect("example.com", "user", "password"); mysql_select_db("database"); $result = mysql_query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL"); $row = mysql_fetch_assoc($result); echo htmlentities($row['_message']); ?> 14. XML va ma'lumotlar bazasi (MySQL) 14.1. XML nima? XML (eXtensible Markup Language) - bu kengaytiriladigan belgilash tili. XMLning asosiy yo'nalishi ma'lumotlarga qaratilgan. XMLda ma'lumotlarning tarkibiy belgilari va ma'lumotlar taqdimoti qat’iy ravishda ajratilgan. XML yaratishning asosiy sabablari: 1. barchaga ma'lumotlarni formatlash va strukturalash uchun kuchli vositalarni taqdim etishga urinish; 2. oddiy foydalanuvchilar uchun mavjud bo'lgan yordamchi vositalarni yaratish oson bo'lgan hujjat tuzilish tilini barqaror ravishda amalga oshirish zarurati. XML bu meta til - maxsus til bo'lib, unda siz boshqa tillar sinfining to'liq tavsifini yozishingiz mumkin, o'z navbatida bu orqali hujjatlar tuziladi. Bu o'zlarining vazifalariga xos bo'lgan ilovalar va ma'lumotlar to'plamlarini yaratishga imkon beradigan qoidalar to'plami. Har bir XML hujjati ishlatilayotgan XML tilining versiyasini va kodlash usulini ko'rsatadigan prolog bilan boshlanishi kerak, masalan: <?xml version="1.0" encoding="WINDOWS-1251"?> <? xml version="1.0" encoding="WINDOWS-1251" ?> <memo> <recipient> Ildarov M. </recipient> <message>Message </message> </memo> <?xml version="1.0" encoding="UTF-8"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> 14.2. XML funktsiyalari nomi ma’lumot ExtractValue() XPath notatsiyasi yordamida XML satridan qiymat olish UpdateXML() XML o’zgartirilgan fragmentini qaytarish XPath 1.0 (XML Path Language, versiya 1.0) asosiy imkoniyatlarini ta'minlaydigan ikkita funktsiya mavjud. XPath sintaksisi va ulardan foydalanish haqida ba'zi asosiy ma'lumotlar ushbu bo'limda keyinroq berilgan; ammo, ushbu mavzularni batafsil muhokama qilish ushbu mavzu doirasiga kirmaydi va to'liq ma'lumot olish uchun siz XML Path Language (XPath) 1.0 standartiga murojaat qilishingiz kerak. XPath uchun yangi bo'lganlar yoki asoslarni o'rganmoqchi bo'lganlar uchun foydali manba zvon.org da XPath o'quv qo'llanmasi bo'lib, u bir necha tillarda mavjud. Ushbu funktsiyalarda ishlatiladigan XPath ifodalari maxsus o'zgaruvchilar va mahalliy saqlanadigan dasturiy parametrlarni qo'llab-quvvatlaydi. Foydalanuvchi o'zgaruvchilari zaif tekshiriladi; Saqlanadigan protseduralar uchun lokal o'zgaruvchilar qat'iy tekshiriladi. 14.3. Xpath misollari 1-misol (/ AAA). Asosiy XPath sintaksisi fayl tizimining manziliga o'xshash. Agar yo'l '/' bilan boshlangan bo'lsa, u berilgan elementga mutlaq yo'lni anglatadi. AAA ildiz tuguni tanlanadi <AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> 2-misol. Agar yo'l // bilan boshlangan bo'lsa, unda belgilangan shablonga mos keladigan barcha hujjatlar elementlari tanlanadi. BBB barcha elementlari tanlanadi <AAA> <BBB/> <CCC/> <BBB/> <DDD> <BBB/> </DDD> <CCC> <DDD> <BBB/> <BBB/> </DDD> </CCC> </AAA> 3-misol. '*' belgisi uning oldidagi yo'lga mos keladigan barcha elementlarni tanlash kerakligini bildiradi. 14.4. ExtractValue() - XML funktsiyasi nomi ma’lumot ExtractValue() XPath notatsiyasi yordamida XML satridan qiymat olish ExtractValue (xml_frag, xpath_expr) ExtractValue() ikkita satrli argumentlarni, xml_frag XML belgilash fragmentini va xpath_expr XPath ifodasini (shuningdek, lokator sifatida ham tanilgan) oladi; u XPath ifodasiga mos keladigan element yoki elementlarning bolasi bo'lgan birinchi matn tugunining matnini (CDATA) qaytaradi. Foydalanuvchi parametrlari (zaif tekshiriladi). Sintaksisdan foydalanadigan o'zgaruvchilar (ya'ni foydalanuvchi o’zgaruvchilari) tekshirilmaydi. Agar o'zgaruvchi nomutanosib bo'lsa yoki oldindan qiymat belgilanmagan bo'lsa, server ogohlantirish yoki xato qilmaydi. Bu shuni anglatadiki, foydalanuvchi har qanday tipografik xatolar uchun javobgardir, chunki agar (masalan) mo'ljallangan joyda ishlatilsa, hech qanday ogohlantirish bo'lmaydi. Agar sizga mos keladigan xml_frag elementi yoki yo'qligini aniqlash kerak bo'lsa yoki bunday element topilgan bo'lsa, lekin uning tarkibida bolalar matni tugunlari bo'lmagan bo'lsa, siz XPath count() funktsiyasidan foydalanadigan ifoda natijasini tekshirishingiz kerak. Masalan, ushbu operatorlarning ikkalasi bu еrda ko'rsatilgandek bo'sh satrni qaytaradi: SELECT ExtractValue('<a><b/></a>', '/a/b'); natija bo’sh SELECT ExtractValue('<a><c/></a>', '/a/b'); bu еrda ham natija bo’sh Ammo, quyidagilardan foydalanib, haqiqatan ham mos keladigan element mavjudligini aniqlay olasiz: SELECT ExtractValue('<a><b/></a>', 'count(/a/b)'); natija 1 SELECT ExtractValue('<a><c/></a>', 'count(/a/b)'); natija 0 mysql> SET @xml = '<a><b>X</b><b>Y</b></a>'; Query OK, 0 rows affected (0.00 sec) mysql> SET @i =1, @j = 2; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @i, ExtractValue(@xml, '//b[$@i]'); +------+-----------------------------------------+ | @i | ExtractValue(@xml, '//b[$@i]') | +------+-----------------------------------------+ |1 | X | +------+------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT @j, ExtractValue(@xml, '//b[$@j]'); +------+----------------------------------------+ | @j | ExtractValue(@xml, '//b[$@j]') | +------+----------------------------------------+ | 2| Y | +------+----------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT @k, ExtractValue(@xml, '//b[$@k]'); +------+--------------------------------+ | @k | ExtractValue(@xml, '//b[$@k]') | +------+--------------------------------+ | NULL | | +------+--------------------------------+ 1 row in set (0.00 sec) Saqlangan dasturlardagi o'zgaruvchilar (qat'iy tekshirish). Sintaksisdan foydalanadigan o'zgaruvchilar saqlangan dasturlar ichkarisida chaqirilganida, ular ushbu funktsiyalar bilan e'lon qilinishi va ishlatilishi mumkin. Bunday o'zgaruvchilar saqlanadigan dastur uchun lokal bo'lib, unda aniqlanadi, turi va qiymati qat'iy tekshiriladi. $variable_name Misol: mysql> DELIMITER | mysql> CREATE PROCEDURE myproc () BEGIN DECLARE i INT DEFAULT 1; DECLARE xml VARCHAR(25) DEFAULT '<a>X</a><a>Y</a><a>Z</a>'; WHILE i < 4 DO SELECT xml, i, ExtractValue(xml, '//a[$i]'); SET i = i+1; END WHILE; END | Query OK, 0 rows affected (0.01 sec) mysql> DELIMITER ; mysql> CALL myproc(); 14.5. LOAD XML operatori LOAD XML [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' [REPLACE | IGNORE] INTO TABLE [db_name.]tbl_name [CHARACTER SET charset_name] [ROWS IDENTIFIED BY '<tagname>'] [IGNORE number {LINES | ROWS}] [(field_name_or_user_var [, field_name_or_user_var] ...)] [SET col_name={expr | DEFAULT}, [, col_name={expr | DEFAULT}] ...] 14.6. UPDATEXML operatori UpdateXML (xml_target, xpath_expr, new_xml) Ushbu funktsiya belgilangan xml_targetXML belgilaydigan qismning bir qismini yangi new_xml XML fragmentiga almashtiradi va keyin o'zgartirilgan XML-ni qaytaradi. Xml_target almashtirish qismi foydalanuvchi tomonidan taqdim etilgan XPath xpath_expr ifodasiga mos keladi. Agar xpath_expr mos kelmasa yoki bir nechta mosliklar topilmasa, funktsiya xml_target XMLning asl nusxasini qaytaradi. Uchala argument ham satrlar bo'lishi kerak. mysql> SELECT UpdateXML (xml_target, xpath_expr, new_xml) Ushbu funktsiya belgilangan xml_targetXML belgilaydigan qismning bir qismini yangi new_xml XML fragmentiga almashtiradi va keyin o'zgartirilgan XMLni qaytaradi. Xml_target almashtirish qismi foydalanuvchi tomonidan taqdim etilgan XPath xpath_expr ifodasiga mos keladi. Agar xpath_expr mos kelmasa yoki bir nechta mosliklar topilmasa, funktsiya xml_target XMLning asl nusxasini qaytaradi. Uchala argument ham satrlar bo'lishi kerak. Adabiyotlar ro’yxati. 1. Eric Redmond, Jim R. Wilson. A Guide to Modern Databases and the NoSQL Movement– 347 с. AQSH, 2015 г. 2. Фиайли К. SQL: Пер. с англ. – М.: ДМК Пресс. – 456 с. Москва. 2013 г. 3. Jeffrey A. Hoffer, Mary B. Prescott, and Fred R. McFadden. Modern DatabaseManagement (8th Ed.) – 557 р. Prentice-Hall, 2007. 4. For those seeking a stronger technical treatment of database systems: Elmasri, R. and S. B. Navathe: Fundamentals of Database Systems (5th Ed.) – 671 р. Addison Wesley, 2015. 5. Fundamentals of database systems sixth edition. Ramez Elmasri. Department of Computer Science and Engineering The University of Texas at Arlington. 2011. 6. Введение в Oracle 10g. Перри Джеймс, Пост Джеральд. 697 стр 2013. 7. Григорьев Ю.А., Плутенко А.Д.. Жизненный цикл проектов распределенных баз данных. Благовещеснк АмГУ, 1999. 8. Диго С.М. Базы данных Проектирование и использование. издательство "Финансы и статистика" 592 стр, 2005 г. 9. Конноли Томас, Каролин Бегг. Базы данных. Проектирование, реализация и сопровождение. Теория и практика. 3-издание - М. : Изд.дом Вильямс - 2003. - 1440 с.