AXV

Relyatsion jadvallar, Kalitlar va Yaxlitlik

Jadval cheklovlari (Constraints), Natural vs Surrogate keys, Composite PK va ON DELETE qoidalari

10-sinf BI va Machine Learning 3-hafta · 7-dars

Bugungi dars rejasi

Jadval cheklovlari

NOT NULL, UNIQUE, CHECK va DEFAULT cheklovlari orqali ma'lumotlar sifatini kafolatlash.

PK turlari & Composite

Natural vs Surrogate Key farqlari hamda ko'p ustunli Composite Primary Key `(hudud, yil)`.

Yaxlitlik & Anomaliyalar

Foreign Key, ON DELETE CASCADE/RESTRICT qoidalari va 3 ta relyatsion anomaliyani yengish.

01

Jadval sxemasi va Cheklovlar

Data Quality kafolati: NOT NULL, UNIQUE, CHECK va DEFAULT

Nega cheklovlar (Constraints) zarur?

Cheklovlarsiz jadval (Tartibsizlik)

Yosh ustuniga -25 yozish mumkin, talaba ismi bo'sh qolishi mumkin, bir xil pasport 10 kishiga kiritilishi mumkin.

Bunday baza tez orada ifloslanadi va analitika uchun yaroqsiz bo'lib qoladi!

Cheklovlar bilan (Tartibli baza)

Baza darajasidagi tekshiruvlar noto'g'ri qiymatlarni darhol to'xtatadi va qabul qilmaydi.

Dasturda xato bo'lsa ham, baza ma'lumotlar tozaligini o'zi himoya qiladi!

Asosiy 4 ta ustun cheklovi

NOT NULL

Ustunda bo'sh (NULL) qiymat bo'lishiga mutlaqo yo'l qo'ymaydi.

UNIQUE

Ustundagi barcha qiymatlar takrorlanmas (yagona) bo'lishi shart.

CHECK

Mantiqiy shartni tekshiradi: masalan, `CHECK (yosh >= 6 AND yosh <= 18)`.

DEFAULT

Qiymat berilmasa, avtomatik standart qiymat o'rnatadi (`DEFAULT 'Faol'`).

02

Primary Key turlari va Composite PK

Natural Key, Surrogate Key va ko'p ustunli birikmalar

Natural Key vs Surrogate Key

Natural Key (Tabiiy kalit)

Haqiqiy hayotdan olingan unikal xususiyat:

  • Fuqaroning JSHSHIR raqami
  • Kitobning xalqaro ISBN kodi
  • Avtomobilning VIN raqami

Kamchiligi: Real hayotda tashqi standartlar o'zgarishi mumkin.

Surrogate Key (Sun'iy kalit)

Baza tomonidan sun'iy ravishda yaratiladigan son:

  • `id INTEGER PRIMARY KEY AUTOINCREMENT`
  • Biznes mantiqqa bog'liq bo'lmaydi
  • O'zgarmaydi va JOIN operatsiyalari uchun eng tezkor

Sanoatda DWH va ilovalar uchun standart tanlov hisoblanadi.

Composite Primary Key (Murakkab kalit)

Bitta ustun yetarli bo'lmaganda

Ta'lim statistikasida bitta viloyat (masalan, Toshkent) har yili takrorlanadi. Bitta yil (masalan, 2024) barcha viloyatlarda takrorlanadi.

Ammo (hudud, yil) juftligi har bir satr uchun mutlaqo unikaldir!

SQL sintaksisi

CREATE TABLE ta_lim_kpi (
    hudud TEXT NOT NULL,
    yil INTEGER NOT NULL,
    maktablar_soni INTEGER,
    PRIMARY KEY (hudud, yil)
);

Ikkita ustun birgalikda yagona birlamchi kalitni tashkil etadi.

03

Foreign Key va Relyatsion yaxlitlik

Referential Integrity, ON DELETE CASCADE, RESTRICT va SET NULL

Ota yozuv o'chirilganda nima bo'ladi?

RESTRICT (Xavfsiz)

Agar bog'langan bola yozuvlar bo'lsa, ota yozuvni o'chirish taqiqlanadi (xato beradi).

Standart qoida

CASCADE (Zanjir)

Ota yozuv o'chirilishi bilan unga bog'liq barcha bolalar yozuvlari ham avtomatik o'chadi.

Tozalash uchun

SET NULL (Bo'shatish)

Ota o'chirilganda bola yozuvlar saqlanadi, lekin ularning FK ustuni NULL bo'lib qoladi.

Tarixni saqlash

CASCADE xatti-harakati diagrammasi

Ota jadval: maktablar maktab_id = 15 [DELETE] nom = "15-maktab" O'chirish so'rovi yuborildi... CASCADE Bola jadval: oquvchilar oquvchi 1: maktab_id = 15 ──> [O'CHIRILDI] oquvchi 2: maktab_id = 15 ──> [O'CHIRILDI] Yetim yozuvlar qolmadi, baza yaxlitligi saqlandi!

Bilimingizni sinang: ON DELETE qoidalari

Bank tizimida CASCADE?

Mijoz o'chirilganda uning barcha kredit shartnomalariga CASCADE qo'llash to'g'rimi?

Mutlaqo xato!

Bankda moliyaviy tarix hech qachon avtomatik o'chirilmasligi shart. Bu yerda RESTRICT ishlatiladi!

Savatcha (Cart) tizimi?

Foydalanuvchi akkaunti o'chirilganda uning savatchasidagi vaqtinchalik tovarlariga-chi?

CASCADE ideal!

Chunki egasi yo'q bo'lgan savatcha bazada ortiqcha axlat yozuv bo'lib qolmasligi lozim.

04

Relyatsion anomaliyalar va Amaliyot

Qo'shish, yangilash va o'chirish anomaliyalari hamda Python sqlite3 kodi

3 ta relyatsion anomaliya

Insertion Anomaly

Qo'shish muammosi: Yangi o'qituvchini bazaga kiritish uchun albatta sinf yoki dars ochilgan bo'lishi shart bo'lib qoladi.

Update Anomaly

Yangilash muammosi: Maktab direktori o'zgarganda, bitta ismni 1000 ta qatorda alohida o'zgartirish kerak bo'ladi.

Deletion Anomaly

O'chirish muammosi: Maktabdagi oxirgi o'quvchi o'chirilishi bilan birga maktabning o'zi ham bazadan tasodifan o'chib ketadi.

Python sqlite3: Cheklovlarni yaratish

import sqlite3

conn = sqlite3.connect('data/maktab.db')
cursor = conn.cursor()
cursor.execute("PRAGMA foreign_keys = ON;") # Majburiy qator!

cursor.execute("""
CREATE TABLE IF NOT EXISTS maktablar (
    maktab_id INTEGER PRIMARY KEY AUTOINCREMENT,
    raqam INTEGER NOT NULL,
    hudud TEXT NOT NULL,
    sigim INTEGER NOT NULL CHECK (sigim > 0),
    UNIQUE (raqam, hudud)
);
""")

cursor.execute("""
CREATE TABLE IF NOT EXISTS oquvchilar (
    oquvchi_id INTEGER PRIMARY KEY AUTOINCREMENT,
    maktab_id INTEGER NOT NULL,
    ism TEXT NOT NULL,
    sinf INTEGER CHECK (sinf BETWEEN 1 AND 11),
    FOREIGN KEY (maktab_id) REFERENCES maktablar(maktab_id) ON DELETE CASCADE
);
""")
conn.commit()

IntegrityError xatosini ushlash

# CHECK xatosi: sig'im manfiy bo'lishi mumkin emas
try:
    cursor.execute("INSERT INTO maktablar (raqam, hudud, sigim) VALUES (5, 'Toshkent', -100);")
    conn.commit()
except sqlite3.IntegrityError as err:
    print("Xato ushlandi (CHECK buzildi):", err)

# UNIQUE xatosi: bir xil hudud va maktab raqami qayta kiritilmaydi
try:
    cursor.execute("INSERT INTO maktablar (raqam, hudud, sigim) VALUES (1, 'Toshkent', 800);")
    cursor.execute("INSERT INTO maktablar (raqam, hudud, sigim) VALUES (1, 'Toshkent', 900);")
    conn.commit()
except sqlite3.IntegrityError as err:
    print("Xato ushlandi (UNIQUE buzildi):", err)

Interaktiv savol

Nima uchun ta'lim statistikasida hududiy ko'rsatkichlar uchun `PRIMARY KEY (hudud, yil)` murakkab kaliti ishlatiladi?

To'g'ri! Hudud har yili qaytariladi, yil esa har bir viloyatda uchraydi. Unikal bo'lishi uchun ularning juftligi kalit qilinadi.

Amaliy topshiriq: 3 daraja

1-daraja: Oson

Bemorlar jadvalini yaratib, `CHECK` cheklovi orqali qon guruhi (I, II, III, IV) nazoratini o'rnating.

10 daqiqa

2-daraja: O'rta

`ON DELETE CASCADE` orqali o'qituvchi o'chirilganda uning dars soatlari avtomatik tozalanishini sinang.

15 daqiqa

3-daraja: Qiyin

`(oquvchi_id, fan_id, chorak)` ustunlaridan Composite Primary Key tuzib, takroriy bahoni bloklang.

20 daqiqa

Dars xulosasi

  • Constraints (NOT NULL, UNIQUE, CHECK, DEFAULT) ma'lumotlar sifatini baza darajasida kafolatlaydi.
  • Surrogate Key sanoat tizimlari uchun eng barqaror va tezkor identifikator hisoblanadi.
  • Composite Primary Key bitta ustun yetarli bo'lmaganda unikal juftliklar hosil qilish imkonini beradi.
  • ON DELETE CASCADE yetim yozuvlarning oldini oladi, RESTRICT esa qimmatli ma'lumotlarni tasodifiy o'chishdan asraydi.
  • Keyingi dars: ER-diagrammalar (ERD) loyihalash va Maktab ta'lim platformasi arxitekturasi!