ER Diagram — jadvallar va munosabatlarni loyihalash

~20 daq · PostgreSQL · Ma'lumotlar Bazasini 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