1-bo‘lim
Ma'lumotlar bazasi nima?
Fayl va baza farqi, relatsion model, jadval-qator-ustun tushunchalari, SQL tarixi va mashhur MBBT lar.
Ushbu bo‘lim mundarijasi
Har qanday jiddiy dastur ma'lumotni saqlashi kerak: foydalanuvchilar, buyurtmalar, xabarlar. Faylga yozish kichik hajmda ishlaydi, lekin tez orada yetarli bo'lmay qoladi.
Nima uchun fayl yetarli emas? #
Tasavvur qiling: 100 000 ta foydalanuvchi ma'lumoti CSV faylda saqlanmoqda.
| Vazifa | Fayl bilan | Baza bilan |
|---|---|---|
| Bitta foydalanuvchini topish | Butun faylni o'qish | Millisekundlarda |
| Ikki kishi bir vaqtda yozsa | Ma'lumot buziladi | Baza boshqaradi |
| Yozish yarmida to'xtasa | Yarim yozilgan fayl | Hammasi bekor qilinadi |
| "30 yoshdan kattalar" | Qo'lda filtrlash kodi | Bitta so'rov |
| Ma'lumot to'g'riligi | Hech kim tekshirmaydi | Baza majburlaydi |
Ma'lumotlar bazasini boshqarish tizimi (MBBT) aynan shu muammolarni hal qiladi.
Relatsion model #
Eng keng tarqalgan model - relatsion. Unda ma'lumot jadvallarda saqlanadi.
| Atama | Ma'nosi | Excel dagi analogi |
|---|---|---|
| Baza (database) | Jadvallar to'plami | Butun fayl |
| Jadval (table) | Bir turdagi ma'lumot | Varaq |
| Ustun (column) | Xususiyat | Ustun |
| Qator (row) | Bitta yozuv | Qator |
| Birlamchi kalit | Noyob identifikator | - |
Jadvallar bir-biri bilan bog'lanadi (relation). Masalan buyurtmalar jadvalidagi
mijoz_id ustuni mijozlar jadvalidagi id ga ishora qiladi. Bu bog'lanish
ma'lumotni takrorlamasdan saqlash imkonini beradi - 10 va 11-bo'limlarda batafsil ko'ramiz.
SQL nima? #
SQL (Structured Query Language) - ma'lumotlar bazasi bilan gaplashish tili.
SELECT ism, yosh
FROM talabalar
WHERE yosh > 21
ORDER BY yosh DESC;
Bu so'rovni deyarli inglizcha gap kabi o'qish mumkin: "talabalar jadvalidan yoshi 21 dan katta bo'lganlarning ism va yoshini tanla, yosh bo'yicha kamayish tartibida saralab".
Python'da qanday qilishni yozasiz: siklni ochib, har bir elementni tekshirasiz. SQL da esa nimani xohlashingizni aytasiz, qanday topishni baza o'zi hal qiladi.
Aynan shuning uchun SQL o'rganish oson va shuning uchun baza sizdan ko'ra samaraliroq ishlaydi - u indekslar va optimizatorga ega.
SQL buyruqlari guruhlari #
| Guruh | To'liq nomi | Buyruqlar |
|---|---|---|
| DDL | Data Definition | CREATE, ALTER, DROP |
| DML | Data Manipulation | INSERT, UPDATE, DELETE |
| DQL | Data Query | SELECT |
| DCL | Data Control | GRANT, REVOKE |
| TCL | Transaction Control | COMMIT, ROLLBACK |
Amalda ish vaqtingizning 80% i SELECT bilan o'tadi.
Mashhur MBBT lar #
| MBBT | Turi | Kuchli tomoni | Qayerda |
|---|---|---|---|
| MySQL / MariaDB | Relatsion | Ommabop, oson, bepul | Veb-saytlar, WordPress |
| PostgreSQL | Relatsion | Kuchli imkoniyatlar, standartga rioya | Murakkab tizimlar |
| SQLite | Relatsion | Bitta fayl, server kerak emas | Mobil ilovalar, kichik loyihalar |
| Oracle | Relatsion | Korporativ darajada | Banklar, davlat tizimlari |
| MS SQL Server | Relatsion | Microsoft ekotizimi | Korporativ .NET loyihalar |
| MongoDB | Hujjatli (NoSQL) | Moslashuvchan tuzilma | Tez o'zgaradigan ma'lumot |
| Redis | Kalit-qiymat | Juda tez, xotirada | Kesh, sessiyalar |
Biz MySQL (aniqrog'i uning MariaDB varianti) bilan ishlaymiz - u XAMPP bilan birga keladi va o'rganish uchun eng qulay.
MariaDB - MySQL ning ochiq kodli "davomchisi". Uni MySQL yaratuvchilari 2009-yilda, Oracle MySQL ni sotib olgandan keyin ajratib chiqargan. Ular deyarli to'liq mos: bu darslikdagi barcha so'rovlar ikkalasida ham bir xil ishlaydi.
XAMPP da aslida MariaDB o'rnatilgan, lekin buyruqlar mysql deb nomlanadi.
SQL va NoSQL #
-- SQL: qat'iy tuzilma
CREATE TABLE talabalar (
id INT PRIMARY KEY,
ism VARCHAR(120),
yosh INT
);
// NoSQL (MongoDB): erkin tuzilma
{ "ism": "Husanboy", "yosh": 25 }
{ "ism": "Sardor", "telefon": "+998...", "manzil": { "shahar": "Toshkent" } }
| SQL | NoSQL | |
|---|---|---|
| Tuzilma | Qat'iy sxema | Erkin |
| Bog'lanishlar | Kuchli (JOIN) | Zaif |
| Tranzaksiyalar | To'liq (ACID) | Cheklangan |
| Masshtablash | Vertikal | Gorizontal |
| Qachon | Moliya, buyurtma, hisobot | Loglar, katta oqim |
Boshlovchi uchun javob oddiy: SQL dan boshlang. Loyihalarning 90% i uchun relatsion baza to'g'ri tanlov. NoSQL aniq bir muammoni hal qilish uchun kerak bo'ladi - va bu muammo bor-yo'qligini bilish uchun avval SQL ni bilish kerak.
SQL tarixi #
| Yil | Voqea |
|---|---|
| 1970 | Edgar Codd relatsion modelni taklif qiladi |
| 1974 | IBM da SEQUEL tili yaratiladi |
| 1979 | Oracle birinchi tijorat MBBT ni chiqaradi |
| 1986 | SQL ANSI standarti bo'ladi |
| 1995 | MySQL paydo bo'ladi |
| 1996 | PostgreSQL hozirgi nomini oladi |
| 2009 | MariaDB ajralib chiqadi |
| Bugun | SQL 50 yildan beri asosiy til bo'lib qolmoqda |
Edgar F. Codd
Relatsion model asoschisi. Britaniyalik olim, IBM da ishlagan. 1970-yilda "A Relational Model of Data for Large Shared Data Banks" maqolasini chop etib, ma'lumotni jadvallarda saqlash g'oyasini ilgari surdi. O'sha paytda bu inqilobiy edi - dunyo hali ierarxik bazalardan foydalanardi. Bugungi barcha SQL bazalari uning ishiga asoslanadi.
Nima uchun SQL o'rganish kerak? #
| Sabab | Izoh |
|---|---|
| Universal | Barcha bazalarda deyarli bir xil |
| Barqaror | 50 yildan beri o'zgarmayapti |
| Talabgir | Deyarli har bir IT vakansiyasida so'raladi |
| Faqat dasturchilar uchun emas | Tahlilchi, marketolog, buxgalter ham ishlatadi |
| Tez o'rganiladi | Asosini bir haftada o'zlashtirish mumkin |
Hali kod yozmaymiz - qog'ozda ishlaymiz:
- O'zingiz bilgan biror tizimni tanlang (kutubxona, do'kon, maktab).
- Unda qanday jadvallar kerakligini yozing (kamida 3 ta).
- Har bir jadval uchun ustunlarni sanang.
- Qaysi ustun birlamchi kalit bo'lishini belgilang.
- Jadvallar bir-biri bilan qanday bog'lanishini o'ylab ko'ring (masalan: kitob → muallif, buyurtma → mijoz).
Bu chizmani saqlab qo'ying - darslik davomida unga qaytamiz.
Xulosa #
- Ma'lumotlar bazasi fayl bilan hal qilib bo'lmaydigan muammolarni yechadi: tezlik, bir vaqtda ishlash, ma'lumot butunligi.
- Relatsion model: ma'lumot jadvallarda, jadvallar bir-biri bilan bog'langan.
- SQL - deklarativ til: nimani xohlashingizni aytasiz, qanday topishni baza hal qiladi.
- Asosiy buyruqlar guruhlari: DDL (tuzilma), DML (ma'lumot), DQL (
SELECT). - Biz MySQL/MariaDB bilan ishlaymiz - XAMPP bilan birga keladi.
- Relatsion modelni 1970-yilda Edgar Codd taklif qilgan va u bugun ham asosiy model.
Keyingi bo'limda MySQL bilan ishlashni boshlaymiz va birinchi so'rovni yozamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.