O`ZBEKISTON RESPUBLIKASI OLIY VA O`RTA MAXSUS TA`LIM VAZIRLIGI
FARG`ONA POLITEXNIKA INSTITUTI
MEXANIKA FAKULTETI
2-KURS TMJ YO`NALISHI
S8-20 GURUHI TALABASI
ILYOSOV AKRAMJONNING
“TEZNIK TIZIMLARDA AXBOROT TEXNOLIGIYASI”
FANIDAN YOZGAN
REFERAT ISHI
MAVZU: Ma’lumotlar ombori, uni tashkil etish.
QABUL QILDI:
Ma'lumotlar ombori (ma'lumotlar bazasi) haqida
Web saytga qandaydir ma'lumotlar kiritiladi, sayt qandaydir ma'luotlarni saqlaydi va qayta ishlaydi hamda so'rov asosida qandaydir ma'lumotlarni beradi. Web dasturchi shu ma'lumotlarni qayerda va qanday saqlash kerakligini o'ylab ko'rishi kerak bo'ladi. Men sizdan quyidagi savollarga javob olishni istardim:
loyihangizda saqlanadigan ma'lumotlar ko'pmi?
Loyiha dasturi bu ma'lumotlarga tez-tez murojaat qiladimi?
Bu ma'lumotlar tez-tez o'zgaradimi?
Bu ma'lumotlarga bir vaqtning o'zida bir necha foydalanuvchi murojaat qilishi mumkinmi?
Vaqt o'tishi bilan ma'lumotlar miqdori oshib yoki o'zgarib boradimi?
Ma'lumotlarning yo'qolib qolishi siz uchn katta yoqotish bo'ladimi?
Yuqoridagi savollarni hech bo'lmaganda bittasiga HA deb javob bersangiz, siz ma'lumotlaringizni ma'lumotlar omborida saqlashingizni tavsiya qilgan bo'lar edim. Ma'lumotlar ombori haqida nima deyishimiz mumkin? Ma'lumotlar omborida barcha ma'lumotlar bir-biriga bog'langan holda saqlanadi. Ma'lumotlar Omborini Boshqarish Tizimi (MOBT) bu omborga ma'lumotlarni yozadi, o'chiradi, o'zgartiradi va shunga o'xshash ishlarni amalga oshiradi. MOBT lari juda ko'p, biz ulardan birini o'rganish va foydalanish uchun tanlab olishimiz kerak bo'ladi. Bu holatda mening fikrim mazkur kurs uchun asosiy o'rinni egallaydi. Men bu kurs uchun MySQL MOBTni tanlab oldim. Albatta nima uchun:
Aksariyat Web serverlar MySQL ni ham qo'llaydi;
MySQL ni o'rgnish juda oson;
PHP MySQL bilan oson muloqot qila oladi;
MySQL kiliyent/server texnologiyasini qo'llaydi;
MySQL hozirda Web muhitdagi eng ommaviy MOBT laridan biri;
MySQL ni Internetdan osongina yuklab olish va foydalanish mumkin;
MySQL Web muhitda ham juda tez ishlaydi.
Nega men MySQL ni tanlaganimni Web sayt yaratganingizda to'laroq tushinib olasiz degan umiddaman. MySQL ni sistemangizga o'rnatib olish haqida gapirib o'tirmayman, agar siz DENWERni o'rnatsangiz MySQL ham birga o'rnatiladi.
Relyatsion ma'lumotlar ombori
Relyatsion terminini jadval ko'rinishida deyishimiz mumkin. Demak omborda ma'lumotlar jadval ko'rinishida saqlanar ekan. Bu omborni o'rganishni misolda davom ettirsak yaxshi bo'lar edi. Futbol jamoasi bilan bog'liq misolni ko'rib chiqamiz. Bizning asosiy maqsadimiz har bir o'yinda ishtirok etgan o'yinchilar haqidagi ma'lumotlarni yozib borish bo'lsin. Unda jadvalimiz taxminan quyidagicha bo'ladi:
O'yinchi_raqami
|
Ismi
|
Tel_nomeri
|
O'yin_vaqti
|
Pozitsiyasi
|
3
|
Asror
|
235-4567
|
23/08/2012
|
Yarim himoyachi
|
2
|
Karim
|
345-2367
|
23/08/2012
|
Himoyachi
|
9
|
Salim
|
123-5671
|
23/08/2012
|
Hujumchi
|
1
|
Odil
|
123-4563
|
23/08/2012
|
Darvozabon
|
.................................................................................
|
2
|
Karim
|
345-2367
|
29/08/2012
|
Himoyachi
|
1
|
Odil
|
123-4563
|
29/08/2012
|
Darvozabon
|
9
|
Salim
|
1235671
|
29/08/2012
|
Hujumchi
|
3
|
Asror
|
235-4567
|
29/08/2012
|
Yarim himoyachi
|
Yuqorida 23 va 29 avgust 2012 yilda o'tkazilgan 2 ta o'yin protokoli keltirilgan. Endi o'ylab ko'ring, bir mavsumda 40 ga yaqin o'yin o'tkazilsa jadvaldagi satrlar soni oshib ketishini tasavvur qilishingiz mumkin. To'g'ri, har bir o'yin yangi yozuvlarni kiritishni talab qiladi, lekin meni tashvishga solayotgani jadvaldagi ma'lumotlarni qayta takrorlanishidir. Jadvaldan ko'rinmoqdaki 1,2,3 raqamli o'yinchilar ham 23, ham 29-kunlari maydonga tushgani sabali ularning ismi, telefon raqami hamda Pozitsiyasi haqidagi ma'lumotlar qayta-qayta jadvaldan o'rin olmoqda.
Amaliyotda bunaqa ma'lumotlar ombori tashkil qilish tavsiya etilmaydi. O'tgan atrning 70-yillarida E. F. Codd ma'lumotlar omborini yaratish bo'yicha bir qator tavsiyalarbi beradi va bu bilan yuqoridagi muammolarni hal etadi. Bu qoidalar (tavsiyalar) fanda normal formalar (narmal forms) nomi bilan kiritilgan
Ma'lumotlar omborini normallash
Ma'lumotlar omborini normallash bu ayni bir ma'lumotni qayta-qayta kiritilishini oldini olish maqsadida ma'lumotlarni bir necha jadvalda tarqatib tashlashdir.
Birinchi normal forma(1NF) 1)
1) O'zaro bog'langan har bir ma'lumotlar to'plami uchun alohida jadval tashkil qilish
2) Har bir jadvalda ma'lumotlarni takrorlanishiga yo'l qo'ymaslik
3) Birlamchi kalit yordamida har bir yozuvni unikal(noyob, takrorlanmas) belgilab borish
1NF yordamida yuqoridagi jadvalni boshqatdan tuzib chiqamiz. Jadvalni ikkita jadvalga ajaratamiz: Birinchi jadval (o'yinchilar haqidagi ma'lumotlar jadvali).
O'yinchi_raqami Ismi Tel_nomer Pozitsiyasi
3 Asror 235-4567 Yarim himoyachi
2 Karim 345-2367 Himoyachi
9 Salim 521-5671 Hujumchi
1 Odil 123-4563 Darvozabon
……………………… …………………… ……………………….. ………………
2 Karim 345-2367 Himoyachi
1 Odil 123-4563 Darvozabon
8 Salim 267-4566 Himoyachi
3 Asror 235-4567 Yarim himoyachi
Ikkinchi jadval (o'yinlar protokoli).
O'yinchi_raqami O'yin_vaqti
3 23/08/2012
2 23/08/2012
9 23/08/2012
1 23/08/2012
……………………… ……………………….
2 29/08/2012
1 29/08/2012
8 29/08/2012
3 29/08/2012
1NF ning birinchi talabi bajarildi. Endi ikkinchi talabi(ma'lumotlarni takrorlanishino oldini olish)ni bajarilishi uchun birinchi jadvalni quyidagi holga olib kelamiz:
O'yinchi_raqami
Ismi Tel_nomer Pozitsiyasi
3 Asror 235-4567 Yarim himoyachi
2 Karim 345-2367 Himoyachi
9 Salim 521-5671 Hujumchi
1 Odil 123-4563 Darvozabon
……………………… …………………… ……………………….. ………………
8 Salim 267-4566 Himoyachi
Endi birinchi jadvalda takrorlanuvchi ma'lumotlar yo'q. 1NF ning uchinchi talabi(birlamchi kalit yordamida unikal belgilash)bilan shug'ullanamiz. Ikkinchi jadvalda O'yinchi_raqami maydonidagi raqamlar rakrorlanmaydi. Chunki bir jamoada ikkita bir xil raqamli o'yinchi bo'lmaydi (agar biror o'yinchi jamoadan ketib uning o'rniga yangi o'yinchi kelsa va uning raqamini oladigan bo'lsa, o'yinchi raqami ham unikal bo'lmay qoladi. bunday holda suniy ravishda unikal maydon hosil qilamiz). Ikkinchi jadvalda esa unikal maydon yo'q. Demak ikkinhi jadvalda o'zimiz sun'iy ravishda unikal maydon kiritishimiz kerak bo'ladi.
Misol uchun quyidagicha jadvalni tavsiya qilish mumkin:
ID O'yinchi_raqami O'yin_vaqti
1 3 23/08/2012
2 2 23/08/2012
3 9 23/08/2012
4 1 23/08/2012
…………. ……………………… ……………………….
36 2 29/08/2012
37 1 29/08/2012
38 8 29/08/2012
39 3 29/08/2012
Endi ikkinchi jadvalning ID maydoni unikal maydonga aylandi.
Ikkinchi normal forma (2NF)
1) Har bir o'zaro bog'langan qiymatlar guruhi uchun, agar ular bir necha yozuvlarga bog'langan bo'lsa yangi jadval tashkil qilish.
2) Yangi jadvalni mavjud jadval bilan tashqi kalit (fireign key) orqali bog'lash
2NF ning birinchi talabi shuki aytim bir maydonlarning qiymatlari taktorlanishi mumkin. Agar shunday bo'ladigan bo'lsa bu qiymatlar boshqa jadvalda saqlangani maqulroq bo'ladi. Misol: Futbol jamoasi o'yinchilari quyidagi pozitsiyalarda o'ynashi mumkin: Darvozada, Himoyada, Yarmi himoyada va Hujumda. Agar 2NFni qo'llasak jadvallarimiz quyidagicha bo'ladi.
Uchinchi Pozitsiyalar jadvali
ID Pozitsiyasi
1 Darvozabon
2 Himoyachi
3 Yarim himoyachi
4 Hujumchi
Natijada birinchi jadvalimiz quyidagi ko'rinishga keladi:
O'yinchi_raqami Ismi Tel_nomer Pozitsiyasi
3 Asror 235-4567 3
2 Karim 345-2367 2
9 Salim 521-5671 4
1 Odil 123-4563 1
……………………… …………………… ……………………….. ………………
8 Salim 267-4566 2
Endi 3 raqamli o'yinchi Asrorni qaysi pozitsiyada o'ynashini bilish uchun Pozitsiyasi maydonidan 3 raqamini o'qiymiz va Pozitsiyalar jadvalining ID maydonidan 3 ni qidiramiz. Demak uning pozitsiyasi Yarim himoyachi ekan. Birinchi va ikkinchi jadvalda ham O'yinchi_raqami nomli maydon mavjud, shu sababli ikkala jadvalni bir-birga bog'lash mumkin. Bizning holatimizda tashqi kalit shart emas. Umuman yana bir qancha normal formalar mavjud, siz bu ma'lumotlarni MySQL ning rasmiy www.mysql.com saytidan olishingiz mumkin. Lekin denorlalizatsiya tushunchasi ham mavjudki ma'lumotlarni juda ko'p jadvallarda bo'laklab tashlaganda ishlash tezligi tushib ketish holatlarida jadvallar qayta birlashtirilishi kerak.
Indekslar va kalitlar
Internet forumlarida tajribasiz foydalanuvchilar MOBT ning ishi sekinligidan nolishadi. Va bunday holatda professonal dasturchilar kerakli joyda indexslar qolib ketganini bilan baholashadi. Indekslarni jadvalning alohida olingan maydoni uchun tartiblangan ro'yxat sifatida tasavvur qilish mumkin. O'ylashimiz mumkinki maydon uchun alohida tartiblangan ro'yxat tashkil qilguncha shu maydonni o'zini tartiblasak bo'lmaydimi. Bo'ladi faqat har doim emas. Chunki jadvalda maydonlar ko'p va har bir maydon bo'yicha tartiblab bo'lmaydi. Shu sababli tartiblanishi kerak bo'lgan maydonlarni tartiblamiz, ammo bu maydonlar uchun indekslar tashkil qilamiz. Yana bir savol: indekslar nima uchun kerak? Indexslangan maydondan kerakli ma'lumotni izlab topishni nisbatan tezroq amalga oshirish mumkin. Umuman indekslangan maydonlarda ma'lumotni tezroq topish mumkin, lekin bu maydonlarda ma'lumotlarni yozish va bu ma'lumotlarni o'zgartirishga juda ko'p vaqt va xotiradon ko'proq joy sarflanadi.
Birlamchi kalit (primary key) maxsus indeks bo'lib, u har bir yozuvni unikal belgilaydi va jadvalni boshqa jadval bilan bog'laydi. Har bir jadval faqat bitta birlamchi kalitga ega bo'lishi kerak. MySQL da ma'lumot tiplari Jadval yaratishda har bir maydanning tipini va o'lchamini aniqlab olish kerak. MySQLda, uuman SQLda tiplarni asosan uch guruhga bo'lish mumkin:
1) Sonli tiplar
2) Sana va vaqt
3) Belgili tiplar
Keling hoziroq shu tiplar bilan tanishb chiqamiz:
Sonli tiplar
Sonli tiplar Ta'rifi Qiymatlar sohasi
INT Oddiy kattalikdagi butun sonlar -2147483648 dan 2147483647 gacha yoki 0 dan 4294967295 gacha
TINYINT Juda kichik butun sonla -127 dan 127 gacha yoki 0 dan 255 gacha
SMALLINT Kichik butun sonlar - 32768 dan 32767 gacha Yoki 0 dan 65535 gacha
MEIUMINT O'rtacha butun sonlar -8388608 dan -8388607 gacha yoki 0 dan 4294967295 gacha
BIGINT Katta butun sonlar 9223372036854775808 dan 9223372036854775807 gacha 0 dan 18446744073709551615 gacha
FLOAT Oddiy aniqlikdagi haqiqiy sonlar ±1,175494351Р•-308 – ±3,402823466Р•+38
DOUBLE/REAL Katta aniqlikdagi haqiqiy sonlar ±2,2250738585072014E-308 ±1,7976931348623157Р•+308
DECIMAL Satrlardek saqlanuvchi haqiqiy sonlar Qiymatlar sohasi
DOUBLE dagidek
Sana va vaqt tiplari
Sana va vaqt tiplari Ta'rifi Qiymatlar sohasi
DATE Sana Format YYYY-MM-DD 1000-01-01 dan 9999-12-31 gacha
DATETIME Sana va vaqt Format YYYY-MM-DD hh:mm:ss 1000-01-01 00:00:00 dan 9999-12-31 23:59:59 gacha
TIMESTAMP Ayni vaqtni belgilash Format YYYYMMDDhhmmss 1970-01-01 00:00:00 dan 2037-12-31 23:59:59 gacha
TIME Vaqt Format hh:mm:ss -828:59:59 dan 838:59:59 gacha
YEAR Yil Format YYYY 1900 yildan 2155 yilgacha
Belgili tiplar
Belgili tiplar Ta'rifi Qiymatlar sohasi
CHAR Aniq o'lchamdagi satr 0-255 ta simvol
VARCHAR O'zgaruvchi o'lchamdgi vaqt 0-255 ta simvol
BLOB Katta ikkilik obyekt (BLOB) 0-65536 bayt
TINYBLOB Kichik BLOB qiymat 0-225 bayt
MEDIUMBLOB O'rtacha BLOB-qiymat 0-16777215 bayt
LONGBLOB Katta blob qiymat 0-4294967295 bayt
TEXT Oddiy o'lchamdagi matn maydoni 0-65536 bayt (64 Kbayt)
TINYTEXT Kichkina matn maydoni 0-225 bayt
MEDIUMTEXT O'rtacha o'lchamdagi matn maydoni 0-16777215 bayt (16 Mbayt)
LONGTEXT Katta o'lchamdagi matn maydoni 0-4294967295 bayt (4 Gbayt)
ENUM Ro'yxatdan biror element qo'yiladi Qiymatlarning maksimal soni: 65535
SET Nol yoki berilgan ro'yxatdan biror qiymat qo'yiladi Qiymatlarning maksimal soni: 64 MySQL ning so'rovlari MySQL da so'rovlar orqali ma'lumotlar omboriga ma'lumotlar kiritish, ularni o'zgartirish yoki o'chirish mumkin. Bularning barisi quyidagi 5 ta komanda orqali amalga oshiriladi:
- SELECT : ombordan ma'lumotlarni oladi;
- DELETE : omborgi ma'lumotlarni o'chiradi;
- INSERT : omborga ma'lumotlarni yozadi;
- REPLACE : agar omborga shunaqa yozuv bo'lsa uni yangilaydi, aks holda qo'shib qo'yadi;
- UPDATE : ombordagi ma'lumotni o'zgartiradi.
MySQL ning boshqa komandalari mo'lumotlar omborini strukturasini tashkil qilishda ishlatiladi, ya'ni ular ma'lumotlar bilan ishlamaydi.
- CREATE : ma'umotlar ombori, jadval yoki indeks yaratadi;
- ALTER : jadval strukturasini o'zgartiradi;
- DROP : ma'lumotlar omborini yoki jadvalni o'chiradi. myphpadmin da ishlash Ma'lumotlar ombori yaratish Agar DENWER o'rnatilgan bo'lsa Internet brauzerni ishga tushiring va http://localhost/Tools/phpMyAdmin/index.php adresni yozing. phpMyAdmin dasturi ishga tushadi. Yuqorida taxminan quyidagidek menyu bo'lishi kerak: Databases menyusini tanlaymiz va hosil bo'lgan oynada my_base (yangi yaratmoqchi bo'lgan ma'lumotlar omborimizning nomini) yozib Create tugmasini bosamiz. Chap tomonda yangi yaratigan my_base nomli ma'lumotlar ombori ko'rinadi. Create table tugmasini bosamiz: Name maydonida jadvalning nomini, Numder of fields maydoniga bizning holimiz uchun 5 raqmini yozib Go tugmasini bosamiz. Bunda 5 ta maydon hosil bo'ladi, bu maydonlarni taxminan quyidagicha to'ldiramiz: Hamda Save tugmasini bosamiz. my_base omborida new_table jadvali yaratiladi. Table name maydoniga yaratmoqchi bo'lgan jadvalimizni nomini yozamiz. Column maydoniga yaratmoqchi bo'lgan maydonning nomini yozamiz. Type maydoniga maydonning turini yozamiz. Leght/Values maydoniga maydonning maydon kengligini yozamiz. Default maydoniga agar qiymat bermasak avtomatik qanday qiymatni qabil qilishi kerakligi yoziladi. M: Gollar_soni maydonida 0 raqamini yozib qo'yishimiz mumkin. Collation maydoniga foydalanmoqchi bo'lgan kodirovkani tanlaymiz. Null maydoniga Null qiymatga ruxsat etilishi yoki ruxsat etilmasligini tanlaymiz. Index maydonidan maydonni indekslashimiz mumkin(agar istasak). AUTO_INCREMENT maydoni orqali avto o'sish qiymatini tanlashimiz mumkin. Aslida SQL menyusida quyidagi SQL komandalarini yosib ham bajarsak bo'lar edi.
CREATE TABLE `my_base`.`nt` (
`Uyinchi raqami` INT(7) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`Ismi` VARCHAR(25) CHARACTER SET cp1251 COLLATE cp1251_general_cs NOT NULL,
`Telefon_raqami` VARCHAR(12) CHARACTER SET cp1251 COLLATE cp1251_general_cs NULL DEFAULT NULL,
`Pozitsiyasi` INT(1) NOT NULL, `Gollar_soni` INT(2) NOT NULL) ENGINE = MyISAM;
Jadvalga yangi yozuv qo'shish uchun Insert menyusini bosamiz: Menyudan Browse tugmasini bosib jadvalga kiritilgan ma'lumotlarni ro'yxat shaklida ko'rishimiz mumkin: Umuman phpMyAdmin dasturi juda qulay web interfeysga ega bo'lib foydalanishga juda qulaydir. Lekin katta loyihalar bilan ishlaganda SQL(Tuzilmalashtirilgan So'rovlar Tili) tilini mukammalroq o'rganib olishingiz kerak bo'ladi.
Do'stlaringiz bilan baham: |