ER Diagram — jadvallar va munosabatlarni loyihalash
Yangi loyiha boshlanadi. Darhol kod yozishdan oldin — jadvallar qanday bo'lishi, qanday bog'liqliklar bo'lishi kerak. Bu bosqich — ER Diagram (Entity-Relationship). Kодни yozmasdan, qog'ozda (yoki dasturda) chizib ko'rish.
Entity — jadval
Har bir entity — alohida jadval. Qoidasi: mustaqil mavjud bo'la oladigan narsa — entity.
Foydalanuvchi — ✅ mustaqil mavjud
Buyurtma — ✅ mustaqil mavjud
Kategoriya — ✅ mustaqil mavjud
Buyurtma turi — ❌ alohida jadval emas, maydon
Munosabat turlari
One-to-Many (1:N)
Bir foydalanuvchida ko'p buyurtma:
Foydalanuvchi ──────── Buyurtmalar
1 N
CREATE TABLE buyurtmalar (
id SERIAL PRIMARY KEY,
foydalanuvchi_id INT REFERENCES foydalanuvchilar(id)
-- Foreign key ko'p tomonda (N tomonda)
);
Many-to-Many (M:N)
Bir buyurtmada ko'p mahsulot, bir mahsulot ko'p buyurtmada:
Buyurtmalar ────── buyurtma_mahsulotlar ────── Mahsulotlar
M (junction) N
CREATE TABLE buyurtma_mahsulotlar (
buyurtma_id INT REFERENCES buyurtmalar(id),
mahsulot_id INT REFERENCES mahsulotlar(id),
miqdor INT,
PRIMARY KEY (buyurtma_id, mahsulot_id)
);
One-to-One (1:1)
Foydalanuvchi va profil — har foydalanuvchida bitta profil:
CREATE TABLE profillar (
id SERIAL PRIMARY KEY,
foydalanuvchi_id INT UNIQUE REFERENCES foydalanuvchilar(id)
-- UNIQUE — bir foydalanuvchi uchun faqat bitta profil
);
E-commerce misolida ER Diagram
Foydalanuvchilar
id, ism, email, parol_hash
Kategoriyalar
id, nomi, ota_kategoriya_id (o'ziga reference)
Mahsulotlar
id, nomi, narxi, qoldiq, kategoriya_id → Kategoriyalar
Manzillar
id, foydalanuvchi_id → Foydalanuvchilar
shahar, ko'cha, uy
Buyurtmalar
id, foydalanuvchi_id → Foydalanuvchilar
manzil_id → Manzillar
holat, jami_summa, yaratilgan
Buyurtma_elementlari
buyurtma_id → Buyurtmalar
mahsulot_id → Mahsulotlar
miqdor, narxi (o'sha vaqtdagi)
Loyihalash qoidalari
1. Har entityga PRIMARY KEY (SERIAL yoki UUID)
2. Foreign key — bog'liq jadvalga
3. Many-to-Many — junction table bilan
4. NULL bo'lishi mumkin bo'lmagan maydonlar — NOT NULL
5. Noyob bo'lishi kerak — UNIQUE
6. Hisoblangan ma'lumot — saqlamas, so'rovda hisoblash
7. NULL — "yo'q" ma'nosi, 0 yoki "" bilan aralashtirmaslik
Tez-tez uchraydigan xatolar
Bir jadvalda hamma narsa:
❌ buyurtmalar jadvalida:
mijoz_ism, mijoz_email, mahsulot_nomi, kategoriya, narxi...
✅ Alohida jadvallar:
foydalanuvchilar, mahsulotlar, kategoriyalar
Junction table da PRIMARY KEY yo'q:
-- ❌
CREATE TABLE foydalanuvchi_rol (
foydalanuvchi_id INT,
rol_id INT
); -- takror qo'shish mumkin
-- ✅
PRIMARY KEY (foydalanuvchi_id, rol_id)
Xulosa
Entity → jadval (mustaqil mavjud bo'ladigan)
1:N → foreign key ko'p tomonda
M:N → junction table (ikkala foreign key + primary key)
1:1 → foreign key + UNIQUE
Loyihalash:
Avval ER diagram → keyin SQL
Munosabatlarni aniq belgilash
Foreign key va UNIQUE constraint qo'yish
Keyingi dars
51-dars: Naming Convention va Schema Design best practices