Dasturiy ta’minot ishlab chiqish · 2026-yil 14-oktabr · 2 daqiqa o‘qish
SQL ma’lumotlar bazasini loyihalash: jadvallar, bog‘lanishlar va indekslar
Bu sahifa rus tilida: /blog/razrabotka-bazy-dannyh-sql
Relyatsion bazalar (PostgreSQL, MySQL, MS SQL va boshqalar) ma’lumotlarni jadvallarda saqlaydi va ular orasidagi bog‘lanishlarni SQL tili orqali boshqaradi. Kod yillar davomida qayta yozilishi mumkin, baza tuzilmasi esa odatda uzoq yashaydi. Shuning uchun uni o‘ylab loyihalash kerak.
1-qadam: ob’ektlarni ajratish
Biznes jarayonidagi «otlar»ni toping: mijoz, buyurtma, mahsulot, ombor, to‘lov, xodim. Har biri — nomzod jadval. Har bir ob’ekt uchun savol bering: uning qanday xususiyatlari bor va u boshqa ob’ektlar bilan qanday bog‘langan?
2-qadam: kalitlar
- Birlamchi kalit — har bir qatorni aniq belgilaydigan maydon. Odatda tizim tomonidan beriladigan raqam yoki noyob identifikator. Telefon raqami yoki pasport raqami kabi «tabiiy» qiymatlarni birlamchi kalit qilish xavfli — ular o‘zgaradi.
- Tashqi kalit — boshqa jadvaldagi qatorga havola. Masalan, buyurtmada mijoz identifikatori. Baza havola qilingan mijoz mavjudligini o‘zi tekshiradi.
3-qadam: bog‘lanish turlari
- Birga-ko‘p — bitta mijozning ko‘p buyurtmasi. Buyurtmalar jadvalida mijozga havola.
- Ko‘pga-ko‘p — buyurtmada ko‘p mahsulot, mahsulot ko‘p buyurtmada. Oraliq jadval kerak: buyurtma pozitsiyalari (buyurtma, mahsulot, soni, narxi).
- Birga-bir — kamdan-kam; masalan, foydalanuvchi va uning batafsil profili alohida saqlanganda.
4-qadam: normallashtirish
Asosiy g‘oya: har bir fakt bir joyda saqlanadi. Mijoz manzili har bir buyurtmada qayta yozilmaydi — mijozga havola yetarli. Aks holda manzil o‘zgarganda uni hamma joyda yangilash kerak va qarama-qarshiliklar paydo bo‘ladi.
Istisno ham bor: buyurtma paytidagi narx buyurtma pozitsiyasida saqlanishi kerak, chunki mahsulot narxi keyin o‘zgaradi, buyurtma tarixi esa o‘zgarmasligi kerak. Bu takror emas, balki boshqa fakt — «sotilgan narx».
5-qadam: maydon turlari va cheklovlar
- Pul summalari uchun aniq o‘nlik tur, kasr sonli (float) emas
- Sanalar uchun sana turi, matn emas
- Majburiy maydonlar — NOT NULL
- Noyob qiymatlar — UNIQUE (masalan, mahsulot artikuli)
- Ruxsat etilgan qiymatlar tekshiruvi (masalan, holat faqat ro‘yxatdagilardan)
Baza darajasidagi cheklovlar ilova xatolaridan himoya qiladi: noto‘g‘ri kod ham noto‘g‘ri ma’lumot yoza olmaydi.
6-qadam: indekslar
Indeks — kitobdagi mundarija kabi: qidirishni tezlashtiradi. Qidiruv, saralash va bog‘lash uchun ishlatiladigan maydonlarga indeks qo‘yiladi: telefon raqami, buyurtma sanasi, tashqi kalitlar. Lekin har bir indeks yozishni biroz sekinlashtiradi va joy egallaydi, shuning uchun «hamma maydonga» emas, real so‘rovlarga qarab qo‘yiladi.
Tipik xatolar
- Bitta jadvalga hammasini yig‘ish: «mahsulot1, mahsulot2, mahsulot3» ustunlari
- O‘chirish o‘rniga yozuvlarni yo‘qotish — buxgalteriya va tarix uchun «o‘chirilgan» belgisi ko‘pincha yaxshiroq
- O‘zgarishlar tarixini saqlamaslik: kim va qachon narx yoki holatni o‘zgartirgani
- Jadval va maydon nomlarida tartibsizlik: bir joyda inglizcha, boshqasida transliteratsiya
- Tuzilma o‘zgarishlarini qo‘lda qilish — migratsiya skriptlari orqali, versiyalangan holda bajarilishi kerak
Hujjatlashtirish
Jadvallar va bog‘lanishlar sxemasi (ER-diagramma) va har bir maydon uchun qisqa izoh. Keyin hisobot tuzadigan tahlilchi ham, yangi dasturchi ham shu hujjatdan boshlaydi.
Vazifani muhokama qilamiz
Ism va telefon raqamingizni qoldiring — qo‘ng‘iroq qilib, jarayon haqida so‘raymiz va nimadan boshlashni taklif qilamiz.
Loyihani muhokama qilish