022. Normalizatsiya va sxema loyihalash
Bu mavzuda normal shakllar, bog'lovchi jadvallar, tarixiy jadvallar bo'yicha 23 ta masala bor. Har bir masala oldida qavs ichida sxema nomi va qiyinlik darajasi ko'rsatilgan. Sxemalar Sxemalar va tayyorlov sahifasida berilgan.
Masalani o'zingiz yechib, natijani Kutilgan natija bilan solishtiring. O'zgartiruvchi masalalarda (INSERT, UPDATE, DELETE, DDL) natija shartda aytilgan tekshiruv so'rovidan olingan. Natija 10 qatordan ko'p bo'lsa, birinchi 10 qator ko'rsatilgan.
1. (dokon, oson) 1NF buzilishini aniqlash: telefonlar vergul bilan 'a,b' saqlangan satrdan alohida qatorlarga ajrating (UNNEST + STRING_TO_ARRAY) — VALUES (1,'998901,998902'),(2,'998903').
2. (dokon, oson) Takrorlanuvchi ma'lumotni ajrating (2NF): buyurtmalarni (mijoz_id, mijoz shahari) bilan bog'langan jadvaldan noyob mijoz_id va shahar juftliklari soni.
3. (dokon, o'rta) Normalizatsiya: yagona 'katta' jadvaldan (VALUES) mijoz va shahar jadvallarini ajrating: noyob shaharlar soni.
4. (dokon, o'rta) Sxema: shahar uchun alohida jadval yarating (shahar_id, nom), mijoz.shahar dan to'ldiring, mijoz ga shahar_id qo'shing va to'ldiring; shaharlar soni.
5. (dokon, o'rta) 3NF: buyurtma_element da narx emas, faqat mahsulot_id; summani JOIN bilan hisoblash: eng katta 3 buyurtma jami.
6. (dokon, qiyin) Narx tarixi: 'narx_tarix' jadvali (mahsulot_id, narx, boshlanish) yarating; hozirgi narxlarni 2024-01-01 dan ko'chiring; qatorlar soni.
7. (dokon, qiyin) Ko'p-ko'pga bog'lanish: mijoz va 'tanlangan_teg' o'rtasidagi bog'lovchi jadval yarating (mijoz_id, teg text) PK juft; 3 qator qo'shib tekshiring (dublikat qo'shmasdan).
8. (dokon, qiyin) Denormalizatsiya: har bir mijozga 'buyurtma_soni' ustunini qo'shib to'ldiring; jami yig'indisi buyurtmalar soniga tengligini tekshiring.
9. (maktab, oson) Maktab sxemasi: sinf va o'quvchi bog'lanishi turi qanday? Har bir sinfdagi o'quvchilar soni (1:N tasdig'i).
10. (maktab, o'rta) Ko'p-ko'pga: o'qituvchi-sinf (dars beradi) bog'lovchi jadvali 'dars' (oqituvchi_id, sinf_id) yarating va baholardan (fan orqali o'qituvchi, o'quvchi sinfi) to'ldiring; qator soni.
11. (maktab, o'rta) Surrogat va tabiiy kalit: o'quvchi telefonlari takrorlanmasligini tekshiring: telefon bo'yicha dublikatlar soni.
12. (maktab, qiyin) Tarixiy jadval: 'sinf_tarix' (oquvchi_id, sinf_id, boshlanish, tugash) yarating; hozirgi o'quvchilar sinflarini ko'chiring (tugash NULL); NULL tugash soni.
13. (maktab, qiyin) Baho jadvali dublikatlari: bir o'quvchi bir kunda bir fandan bir necha baho olgan holatlar soni (kandidat UNIQUE tekshiruvi).
14. (bank, oson) Mijoz-hisob 1:N: bitta mijozda eng ko'p hisob soni.
15. (bank, o'rta) Bank tranzaksiyalarini 'turi' lug'ati jadvaliga ajrating: tranzaksiya_turi (id, nom) yarating va to'ldiring; turlar soni.
16. (bank, o'rta) Hisob egalari: bir hisobga bir necha egalik (qo'shma hisob): 'hisob_egasi' (hisob_id, mijoz_id) bog'lovchi jadvalini hisob.mijoz_id dan to'ldiring; qator soni.
17. (bank, qiyin) 3NF tekshiruvi: filial.shahar filial nomiga bog'liq; mijozdan shaharni filial orqali olish — shahar bo'yicha mijozlar soni.
18. (bank, qiyin) Audit jadvali: 'hisob_audit' (hisob_id, eski_balans, yangi_balans) yarating va balans o'zgarishini qo'lda yozing (1-hisobga +100); audit qatori.
19. (kutubxona, oson) Kitob va muallif: 1:N. Mualliflar bo'yicha kitoblar soni (maks).
20. (kutubxona, o'rta) Kitoblarning bir nechta muallifi bo'lishi uchun 'kitob_muallif' (kitob_id, muallif_id) bog'lovchi jadvalini yarating va to'ldiring; qator soni.
21. (kutubxona, o'rta) Davlatni alohida jadvalga ajrating: 'davlat' (id, nom) va muallif ga davlat_id; davlatlar soni.
22. (kutubxona, qiyin) Ijara tarixini 'ijara_arxiv' ga ko'chiring (qaytarilganlar) va asosiy jadvaldan o'chiring: arxivdagi va asosiy jadvaldagi qatorlar soni.
23. (kutubxona, qiyin) Soft delete: kitob ga 'ochirilgan' boolean ustuni; nusxasi 1 bo'lgan kitoblarni ochirilgan=true qiling; ochirilmaganlar soni.