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.
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.»
Ma'lumotlar bazasini to'g'ri arxitektura qilish uchun dasturchi avvalo quyidagi ikkita asosiy savolga javob berishi lozim:
Biznes talablaridan kelib chiqib, tizimimiz uchun quyidagi asosiy jadvallarni ajratib olamiz:
users (Foydalanuvchilar): Tizimga bir nechta xodimlar kirib ishlashi sababli ularning hisob ma'lumotlari saqlanadigan jadval.profiles (Profil ma'lumotlari): Har bir foydalanuvchining shaxsiy ma'lumotlari (ism, familiya, telefon raqami va h.k.) uchun alohida jadval.warehouses (Omborlar): Tizim bir nechta omborlarni boshqarishi sababli har bir omborning nomi va manzili saqlanadi.brands (Brendlar): Mahsulot ishlab chiqaruvchilari yoki savdo belgilari (masalan, Apple, Samsung, Sony).categories (Kategoriyalar): Mahsulotlarning toifalari (masalan, Elektronika, Smartfonlar, Noutbuklar).tags (Teglar): Mahsulotlarni erkin belgilash va qidirish uchun kalit so'zlar (masalan, "Yangi", "Chegirma", "Flagman").products (Mahsulotlar): Omborda mavjud bo'lgan tovarlarning asosiy xarakteristikalari.transactions (Tranzaksiyalar): Mahsulotlarning omborga kirishi yoki chiqishini qayd etuvchi hisob-kitob jurnali.inventories (Qoldiqlar): Aniq bir ombordagi aniq bir mahsulotning ayni paytdagi qoldiq soni va narxini ko'rsatuvchi jadval.Relyatsion ma'lumotlar bazalarida jadvallar o'zaro uch xil asosiy bog'lanish orqali ulanadi:
[ Birga-bir (1:1) ] users <-------> profiles
[ Birga-ko'p (1:N) ] brands <-------- products
[ Ko'pga-ko'p (N:M) ] products <======> tags (product_tags orqali)
Har bir foydalanuvchi bitta profilga ega bo'ladi va har bir profil faqat bitta foydalanuvchiga tegishli bo'ladi.
users jadvalidagi har bir qatorga profiles jadvalida roppa-rosa bitta mos keluvchi qator mavjud bo'ladi.brands va products o'rtasida birga-ko'p munosabati mavjud.categories jadvalining o'zini o'ziga bog'lash (self-referencing) orqali hal etiladi.Bitta mahsulot bir nechta teglarga ega bo'lishi mumkin (masalan, "Yangi", "Smartfon", "Top"), ayni paytda bitta teg ham ko'plab mahsulotlarga biriktirilishi mumkin.
product_tags (link table) yaratiladi.product_tags jadvali ikkita birga-ko'p bog'lanishni birlashtiradi: bittasi products jadvali bilan, ikkinchisi esa tags jadvali bilan.users, warehouses, brands, products, transactions va h.k.