12 / 100

Database Design

Ma'lumotlar bazasini loyihalash

Kirish: Ushbu darsda siz amaliy dasturlar uchun PostgreSQL ma'lumotlar bazasini noldan boshlab to'g'ri loyihalash, biznes talablarini tahlil qilish, jadvallarni aniqlash va ular orasidagi munosabatlarni (bog'lanishlarni) to'g'ri o'rnatishni o'rganasiz.


Biznes talablari (Business Requirements)

Biz ushbu bo'limda omborni boshqarish tizimi (Inventory Management System) uchun ma'lumotlar bazasini loyihalashtiramiz.

Loyiha uchun biznes talablari quyidagilardan iborat:

«Bizning inventarizatsiyani boshqarish tizimimiz ombor xodimlariga bir nechta omborlar bo'yicha tovarlar qoldig'ini samarali boshqarish imkonini beradi.

Tizim tovarlarni teglar (tags), kategoriyalar (categories) va brendlar (brands) bo'yicha guruhlashni soddalashtiradi.

Bundan tashqari, tizim tovarlarning kirim va chiqim operatsiyalarini (goods receipt/issue transactions) to'liq qayd etib boradi, bu esa ombor hisobini aniq va shaffof yuritishni ta'minlaydi.»


Loyihalashdagi eng muhim savollar

Ma'lumotlar bazasini to'g'ri arxitektura qilish uchun dasturchi avvalo quyidagi ikkita asosiy savolga javob berishi lozim:

  1. Ma'lumotlar bazasida qanday jadvallar (tables) bo'lishi kerak?
  2. Ushbu jadvallar bir-biri bilan qanday bog'lanadi (relationships)?

Jadvallarni aniqlash

Biznes talablaridan kelib chiqib, tizimimiz uchun quyidagi asosiy jadvallarni ajratib olamiz:

  1. users (Foydalanuvchilar): Tizimga bir nechta xodimlar kirib ishlashi sababli ularning hisob ma'lumotlari saqlanadigan jadval.
  2. profiles (Profil ma'lumotlari): Har bir foydalanuvchining shaxsiy ma'lumotlari (ism, familiya, telefon raqami va h.k.) uchun alohida jadval.
  3. warehouses (Omborlar): Tizim bir nechta omborlarni boshqarishi sababli har bir omborning nomi va manzili saqlanadi.
  4. brands (Brendlar): Mahsulot ishlab chiqaruvchilari yoki savdo belgilari (masalan, Apple, Samsung, Sony).
  5. categories (Kategoriyalar): Mahsulotlarning toifalari (masalan, Elektronika, Smartfonlar, Noutbuklar).
  6. tags (Teglar): Mahsulotlarni erkin belgilash va qidirish uchun kalit so'zlar (masalan, "Yangi", "Chegirma", "Flagman").
  7. products (Mahsulotlar): Omborda mavjud bo'lgan tovarlarning asosiy xarakteristikalari.
  8. transactions (Tranzaksiyalar): Mahsulotlarning omborga kirishi yoki chiqishini qayd etuvchi hisob-kitob jurnali.
  9. inventories (Qoldiqlar): Aniq bir ombordagi aniq bir mahsulotning ayni paytdagi qoldiq soni va narxini ko'rsatuvchi jadval.

Jadvallar orasidagi munosabatlar (Relationships)

Relyatsion ma'lumotlar bazalarida jadvallar o'zaro uch xil asosiy bog'lanish orqali ulanadi:

kod
[ Birga-bir (1:1) ]       users  <------->  profiles
[ Birga-ko'p (1:N) ]      brands <--------  products
[ Ko'pga-ko'p (N:M) ]     products <======> tags (product_tags orqali)

1. Birga-bir munosabati (One-to-One Relationship)

Har bir foydalanuvchi bitta profilga ega bo'ladi va har bir profil faqat bitta foydalanuvchiga tegishli bo'ladi.

  • PostgreSQLda users jadvalidagi har bir qatorga profiles jadvalida roppa-rosa bitta mos keluvchi qator mavjud bo'ladi.

2. Birga-ko'p munosabati (One-to-Many Relationship)

  • Brend va Mahsulot: Bitta brend ko'plab mahsulotlarga ega bo'lishi mumkin, lekin bitta mahsulot faqat bitta brendga tegishli (masalan, iPhone mahsuloti faqat Apple brendiga tegishli). Demak, brands va products o'rtasida birga-ko'p munosabati mavjud.
  • Kategoriya va Mahsulot: Bitta kategoriya ko'plab mahsulotlarni o'z ichiga oladi, lekin har bir mahsulot bitta asosiy kategoriyaga tegishli.
  • Foydalanuvchi va Tranzaksiya: Bitta xodim ko'plab kirim-chiqim operatsiyalarini amalga oshirishi mumkin, ammo har bir operatsiya bitta aniq xodim tomonidan ro'yxatga olinadi.
  • Ombor va Tranzaksiya: Bitta omborda minglab operatsiyalar yuz beradi, ammo har bir operatsiya bitta omborga tegishli.
  • Kategoriyalar va Kichik kategoriyalar (Subcategories): Bitta kategoriya o'z ichida kichik kategoriyalarga bo'linishi mumkin. Buni ifodalash uchun alohida jadval ochish shart emas — categories jadvalining o'zini o'ziga bog'lash (self-referencing) orqali hal etiladi.

3. Ko'pga-ko'p munosabati (Many-to-Many Relationship)

Bitta mahsulot bir nechta teglarga ega bo'lishi mumkin (masalan, "Yangi", "Smartfon", "Top"), ayni paytda bitta teg ham ko'plab mahsulotlarga biriktirilishi mumkin.

  • Relyatsion bazalarda ko'pga-ko'p munosabatini to'g'ridan-to'g'ri saqlab bo'lmaydi. Shu sababli oraliq bog'lovchi jadval — product_tags (link table) yaratiladi.
  • product_tags jadvali ikkita birga-ko'p bog'lanishni birlashtiradi: bittasi products jadvali bilan, ikkinchisi esa tags jadvali bilan.

Xulosa

  • Ma'lumotlar bazasini loyihalash biznes talablarini sinchkovlik bilan o'rganishdan boshlanadi.
  • Asosiy obyektlar alohida jadvallarga ajratiladi: users, warehouses, brands, products, transactions va h.k.
  • Jadvallar orasidagi munosabatlar 3 turga bo'linadi: Birga-bir (1:1), Birga-ko'p (1:N) va Ko'pga-ko'p (N:M).
  • Ko'pga-ko'p munosabatlar relyatsion modelda oraliq bog'lovchi jadval (link table) orqali tashkil etiladi.
QBilimingizni sinab ko'ring
1 / 5

1. Ma'lumotlar bazasini loyihalashda dastlab qanday ikki muhim savolga javob berilishi kerak?