# SQL ER-model va baza dizayni

> Ma'lumotlar bazasini qurishdan oldin qanday rejalashtirish kerak? ER-model, jadval (entity), bog'lanish (relationship) va bir-ko'p munosabati sodda misolda.

Manba: https://learncode.uz/sql/er-model/
Sana: 2026-06-21

Yaxshi baza kod yozishdan **oldin** qog'ozda rejalashtiriladi: qanday
jadvallar bo'ladi va ular qanday bog'lanadi? Bu rejani chizishning eng keng
tarqalgan usuli — **ER-model**. Bu darsda baza dizaynining asosini ko'ramiz.

## ER-model nima

**ER-model** (Entity–Relationship — "obyekt–bog'lanish") — bazani
jadvallar va ular orasidagi aloqalar ko'rinishida chizadigan sxema. Ikki
asosiy tushuncha:

- **Entity** (obyekt) — real narsa, u jadvalga aylanadi: `mijoz`, `mahsulot`.
- **Relationship** (bog'lanish) — jadvallar o'rtasidagi aloqa: mijoz
  buyurtma **beradi**.

Namuna bazamiz aynan shunday loyihalangan: uchta entity (`mijozlar`,
`mahsulotlar`, `buyurtmalar`) va ular orasidagi bog'lanishlar.

## Bir-ko'p munosabati

Eng ko'p uchraydigan bog'lanish — **bir-ko'p** (one-to-many): bir mijoz
**ko'p** buyurtma beradi, lekin har buyurtma **bitta** mijozga tegishli.

Bu munosabat [foreign key](https://learncode.uz/sql/primary-foreign-key) bilan quriladi:
`buyurtmalar.mijoz_id` — `mijozlar.id` ga ishora qiladi. "Ko'p" tomondagi
jadval (`buyurtmalar`) "bir" tomonga (`mijozlar`) kalit orqali bog'lanadi.

> **Atama**
>
> **Bir-ko'p (one-to-many)** — bir yozuv boshqa jadvalning ko'p yozuvi bilan
> bog'lanishi. Misol: bir toifada ko'p mahsulot; bir mijozda ko'p buyurtma.
> Bunday munosabatda foreign key doim **"ko'p"** tomondagi jadvalda turadi.

## Dizayn tartibi

Baza qurishdan oldin quyidagi bosqichlar foydali:

1. **Entity'larni aniqlang** — qanday asosiy narsalar bor (mijoz, mahsulot)?
2. **Har entity atributlarini yozing** — mijozning ismi, shahri, yoshi.
3. **Bog'lanishlarni belgilang** — kim kim bilan bog'liq?
4. **Normallashtiring** — [takrorni](https://learncode.uz/sql/normalizatsiya) yo'qoting.
5. **Keyin** `CREATE TABLE` bilan quring.

> **Yodda tuting**
>
> Avval qog'ozda chizish — vaqtni tejaydi. Noto'g'ri tuzilgan bazani keyin
> o'zgartirish qiyin va xatarli. Bir necha daqiqa rejalashtirish, keyingi
> soatlab qayta ishlashdan saqlaydi.

## Jonli namuna

O'zingiz ishga tushirib ko'ring — so'rovni tahrirlashingiz ham mumkin:

```sql
SELECT m.ism, COUNT(b.id) AS buyurtmalar
FROM mijozlar AS m
LEFT JOIN buyurtmalar AS b ON b.mijoz_id = m.id
GROUP BY m.ism;
```

## Amaliy mashq

Bog'lanishlarni chizing:

1. `LEFT JOIN` bilan har mijozning buyurtmalar sonini chiqaring;
2. hech narsa buyurtma qilmagan mijozni toping;
3. bitta mijoz nechta buyurtma qila oladi — bir yoki ko'pmi?
4. bitta buyurtmada nechta mijoz bo'ladi?
5. qog'ozda uch jadvalni to'rtburchak qilib chizing va oralarini
   chiziq bilan bog'lang;
6. do'konga "yetkazuvchi" entity qo'shilsa, u qaysi jadval bilan va
   qaysi tomonda foreign key orqali bog'lanishini aniqlang.

3 va 4-qadam javoblari "bir-ko'p" munosabatini tavsiflaydi.

## Qisqacha xulosa

- **ER-model** — bazani entity va bog'lanishlar ko'rinishida chizadigan reja.
- **Entity** — jadvalga aylanadigan narsa; **relationship** — ular orasidagi aloqa.
- **Bir-ko'p** — eng keng tarqalgan munosabat, foreign key bilan quriladi.
- Dizayn tartibi: entity → atribut → bog'lanish → normalizatsiya → qurish.
- Avval rejalashtiring, keyin `CREATE TABLE` yozing.

Bu bilan SQL bo'limining asosiy darslarini yakunladik. Keyingi qadam — bilimni
mustahkamlash uchun mashqlar va takrorlash.
