Entity-Relationship arxitekturasi, kardinallik (1:1, 1:N, M:N) va Maktab tahliliy platformasi
10-sinf BI va Machine Learning 3-hafta · 8-darsObyekt (Entity), Atribut va Munosabatlar. Nega kod yozishdan oldin model chiziladi?
1:1, 1:N va M:N bog'lanishlar. Ko'pga-ko'p munosabatni oraliq jadval bilan yechish.
Rasmiy dasturdagi `maktab.db` relyatsion arxitekturasi va Python sqlite3 amaliyoti.
Entity-Relationship Diagram: axborot tizimining arxitektura chizmasi
Jadvallar va ustunlar pala-partish ochiladi, ma'lumotlar dublikat bo'ladi, relyatsion yaxlitlik yo'qoladi.
Katta tizimlarda noto'g'ri arxitekturani qayta tuzish oylab vaqt va millionlab mablag' talab qiladi!
Barcha obyektlar, ularning kalitlari va bog'lanishlari avval qog'ozda yoki grafik vositada aniqlanadi.
Dasturchi va biznes tahlilchi yagona umumiy tilda muloqot qiladi!
Ma'lumot to'planadigan mavzu yoki shaxs (Maktab, O'quvchi, Hudud, Fan).
To'rtburchakObyektni ifodalovchi xususiyatlar (Ismi, Sig'imi, Yil, Balans, Telefon).
UstunlarObyektlar orasidagi mantiqiy bog'liqlik (O'qiydi, Tegishli, Dars beradi).
Chiziqlar1:1, 1:N va M:N bog'lanishlar tahlili
Bitta ota yozuvga faqat bitta bola yozuv mos keladi.
Kamdan-kam hollarda, odatda xavfsizlik uchun alohida jadval qilinadi.
Bitta otaga ko'plab bolalar to'g'ri keladi. Eng asosiy tur!
Bola jadvalda otaning Primary Key ustuni Foreign Key bo'lib turadi.
Bitta o'quvchi bir nechta fandan to'garakka qatnashishi mumkin. Bitta to'garakda ham ko'plab o'quvchilar bor.
Relyatsion bazada satr katagiga massiv [1, 2, 3] yozish taqiqlanadi!
Ma'lumotlar bazasida M:N munosabat to'g'ridan-to'g'ri saqlanmaydi.
Uning o'rniga oraliq jadval (Junction table) kiritiladi va ikkita 1:N ga bo'linadi.
Ko'prik jadval orqali ko'pga-ko'p bog'lanishlarni normalizatsiya qilish
Ular o'rtasida qanday munosabat bor?
Bitta shifokor ko'p bemorni ko'radi, bitta bemor bir nechta shifokorga (LOR, okulist) borishi mumkin. Qabul tarixi jadvali kerak!
Ular o'rtasida qanday munosabat bor?
Bitta viloyatda ko'plab maktablar bor, ammo bitta maktab faqat bitta viloyat hududiga tegishli bo'ladi.
Rasmiy o'quv dasturidagi maktab.db relyatsion modeli va Python kodi
import sqlite3
conn = sqlite3.connect('data/maktab.db')
cursor = conn.cursor()
cursor.execute("PRAGMA foreign_keys = ON;")
# 1. Hududlar jadvali
cursor.execute("""
CREATE TABLE IF NOT EXISTS hududlar (
hudud_id INTEGER PRIMARY KEY AUTOINCREMENT,
nomi TEXT NOT NULL UNIQUE,
markaz TEXT NOT NULL
);
""")
# 2. Maktablar jadvali (1:N bog'langan)
cursor.execute("""
CREATE TABLE IF NOT EXISTS maktablar (
maktab_id INTEGER PRIMARY KEY AUTOINCREMENT,
hudud_id INTEGER NOT NULL,
raqam INTEGER NOT NULL,
sigim INTEGER NOT NULL CHECK (sigim > 0),
FOREIGN KEY (hudud_id) REFERENCES hududlar(hudud_id) ON DELETE CASCADE
);
""")
conn.commit()
cursor.execute("""
SELECT
h.nomi,
k.yil,
ROUND(CAST(k.oquvchilar_soni AS REAL) / k.maktablar_soni, 0) AS maktab_yuklamasi,
ROUND(CAST(k.oquvchilar_soni AS REAL) / k.oqituvchilar_soni, 1) AS oquvchi_oqituvchi
FROM yillik_kpi k
JOIN hududlar h ON k.hudud_id = h.hudud_id
ORDER BY k.yil DESC, maktab_yuklamasi DESC;
""")
for row in cursor.fetchall():
print(f"{row[0]} ({row[1]}): Maktabga {row[2]} o'quvchi | Nisbat: 1/{row[3]}")
Relyatsion ma'lumotlar bazasida Ko'pga-ko'p (M:N) munosabatni saqlash uchun nima ishlatiladi?
Maktab va Hududlar jadvallarini yaratib, 3 ta hudud va 6 ta maktab ma'lumotini kiriting.
10 daqiqaO'quvchi va To'garaklar o'rtasida Junction table hosil qilib, 5 ta a'zolikni ro'yxatdan o'tkazing.
15 daqiqaYillik KPI jadvali asosida har bir viloyat bo'yicha o'quvchi/o'qituvchi nisbatini SQL da hisoblang.
20 daqiqa