1.1 Kirish
Baza ma'lumotini loyihalash har doim qiyin va muhim vazifa bo'lib, dasturingiz arxitekturasini qurishga o'xshaydi. Ko'p sonli jadvallar bilan to'g'ri va oson kengaytiriladigan tuzilmani qilish mumkin yoki hamma narsani bir necha jadvallarga joylashtirish mumkin.
Bazani loyihalashda e'tibor berishingiz kerak bo'lgan narsalar ro'yxati:
- Barcha ma'lumotni to'g'ri saqlashni ta'minlash
- So'rovlar to'g'ri ishlashi kerak
- Keraksiz va ortiqcha ma'lumotlarni qisqartirishga harakat qiling
- Ma'lumotlar bazasining yaxlitligi
- Ma'lumotlarga kirishni tezlashtirish
Qanday afsuski, siz birinchi urinishda loyihangiz uchun ideal tuzilmani yaratib bo'lmaydi, chunki loyihangiz o'zgaradi, yangi jadvallar va ustunlar qo'shiladi, modifikatsiyalar va birlashmalar sodir bo'ladi. Asosiy uchta narsani eslab qoling
- Strukturangizning mantiqi boshqa dasturchiga tushunarli bo'lishi kerak
- To'g'ri baza tuzilishi - muvaffaqiyat kaliti
- Hech qachon biror narsani optimallashtirishga shoshilma
Albatta, dunyodagi eng yaxshi struktura yaratishga harakat qilasiz, lekin sizga hech qachon yetib bo'lmaydi)) Strukturasi doim o'zgaradi va sizning vazifangiz faqat yangi funksiyalar qo'shilgandan keyin ham baza oson tushunarli bo'lib qolishini ta'minlashdir.
Odatda, baza ma'lumotini loyihalash bilan tajribali hamkasblar shug'ullanadi, sizning vazifangiz mavjud sxemaga tuzatishlar kiritish bo'ladi. Asosiysi - mavjud sxema qanday qurilganligini va printsipini tushunib olish va unga rioya qilishdir. O'z nizomingiz bilan begonalar monastiriga kirib keta olmaysiz, lekin yaxshi jamoada sizning g'oyangizni eshitishlari mumkin.
Premature Optimisation Is the Root of All Evil. Har narsani optimallashtirishga shoshilmang. Baza ma'lumotida keshlar va so'rovlar va ma'lumotlar bilan ishlashni optimallashtirishning boshqa usullari mavjud.
Lekin siz baribir so'rovlarni tezlashtirishni, reja tuzishni va vaqtni o'nlab va yuzlab marta kamaytirishni bilishingiz kerak bo'ladi. Shunday ekan, qanday qilib buni qilishni gaplashamizmi?
Ehtimol, siz allaqachon bazalarni normallashtirish haqida eshitgansiz va bu qanday zo'r, lekin ishda de-normallashtirish bilan shug'ullanish kerak bo'ladi. Har qanday buyurtmachi ma'lumotlar bazasini va chiroyli tuzilishini tezligini tanlaydi, va agar yuzlab jadvallarni birlashtirish kerak bo'lsa, uni qilish kerak bo'ladi.
1.2 Kutubxona loyihalash
Endi yanada chuqurroq gaplashamiz va misol sifatida kitob kutubxonasi ishi tanlanadi. Ushbu tuzilmani siz ehtimol yaxshi tushunishingiz mumkin va muammolar chiqmasligi kerak
Asosiy narsa bilan boshlaymiz, kutubxonaning vazifasi nima? Albatta, bu bizning CRUD operatsiyalarimiz, lekin biznes mantiq bilan qo'shiladi - kitobni olish, kitob qo'shish, uni bron qilish va boshqalar. Shundan kelib chiqib, loyihamizda uch guruhni ajratamiz: o'quvchi, kutubxonachi va administrator. Ularning imkoniyatlari foydalanish variantlari diagrammasida ko'rsatilgan.
Endi bazamizdagi mavjud bo'lgan obyektlarni ajratamiz:
Bizning joriy yondashuvdan kitobni qanday qilib muayyan o'quvchi bilan bog'lashni tushunolmadik. Yana kitobda bir necha nusxalar bor, ular turli o'quvchilarga beriladi. Agar shunday bo'ladi deb o'ylasak ham, har bir kitobdan faqat bitta nusxa bo'lsa ham, biz kim va qachon olib ketganini kuzatolmaymiz.
Yana bir eng yaxshi yechim - kitob berilganlik kartochkasini kiritishdir. Agar o'quvchi kitobni olgan bo'lsa, biz kartochka yaratilamiz, kitob qaytarilganda esa shunga mos belgi qo'yamiz. Bu kartochkalar yordamida biz statistikani tuzamiz va kutubxona qarzdorlarini kuzatamiz.
Foydalanuvchi adabiyotni bron qilishni hohlasa - yana kartochka ochamiz, agar bron qilingan adabiyotni belgilangan muddatda o'qituvchi olib ketmasa - kartochka yo'qotiladi. Shuningdek, biz o'quvchi bron qila oladigan kitoblar soniga cheklov qo'shamiz.
Foydalanuvchi adabiyotlar ro'yxatini ochmoqchi bo'lsa, biz unga turli xil saralash imkoniyatlari, muallif bo'yicha filtrlar va hokazo qo'shamiz.
Shuningdek, biz kitoblar bo'yicha statistikani olish imkoniyatini qo'shamiz, biz uni ma'lum bir davr uchun shakllantiramiz va ma'lum bir kitob uchun. Guruhlashlar yordamida kitoblarning minimal sonini belgilaymiz va ushbu statistikadan kelib chiqib, eng ko'p o'qilayotgan kitoblarni va aksini olamiz.
Endi kutubxonamizning asosiy obyektlarini shakllantirishga o'tamiz:
- foydalanuvchi (kutubxonachilar va administratorlar);
- o'quvchi;
- o'qish zali;
- kitob;
- kitob berilishi kartochkasi;
- kitob bron qilinishi kartochkasi.
Tayyor baza ma'lumotlari diagrammasi quyidagicha ko'rinadi:
Endi kerakli so'rovlarni yig'ishga harakat qilamiz:
- berilgan shartlarga mos keladigan kitoblarni olish;
- berilgan vaqtda yopilmagan kartochkalarga ega foydalanuvchilarni olish (qarzlarni qidirish);
- berilgan foydalanuvchining berilgan vaqtda yopilmagan kitob kartochkalariga mos keladigan kitoblarni olish (foydalanuvchi kutubxonaga yangi kitoblar uchun keladi - biz uni qarzdorligini tekshirmoqchimiz);
- berilgan vaqtda yaratilgan barcha bron kartochkalarini o'chirish
- berilgan foydalanuvchi uchun kitob bron kartochkalari yopilmagan kitoblarni olish (o'quvchi kitoblarni buyurtirib oldi - kutubxonachi bu ro'yxatni olish uchun kerak).
1.3 Ma'lumotlar diagrammasini yaratish
Endi jadvallarimizdagi maydonlarni muhokama qilamiz va ularni diagrammaga qo'shamiz. Boshlang'ich loyihalashda noaniqlik va xatolarni ko'rish oson. Shundan oxiratda kitobni kutubxona zali bilan qandaydir bog'lashimiz kerakligini topdik.
Buni qanday qilish mumkin? Kitobga "zal raqami" rekvizit qo'yamiz, lekin bu yomon yondashuv, chunki agar kitob bir necha zallarda bo'lsa, kitoblarni takrorlash kerak bo'ladi.
To'g'ri yondashuv "kitob joylashuvi" qo'shimcha obyektini qo'shishdan iborat. Natijada bizda mana bunday diagramma paydo bo'ldi.
Biz olgan diagrammani osongina jadvallar, bog'lanishlar va atributlar orqali bazaga o'tkazishimiz mumkin. Natijada biz uchta qismga bo'lingan to'rtburchaklar sifatida tasvirlangan jadvallarni olamiz:
- jadval nomi;
- ichki kalitlar (ular markirovka bilan belgilangan);
- qolgan maydonlar, majburiylari markirovka bilan belgilangan.
Bu yerda biz administratorlar va kutubxonachilar jadvalini birlashtirmadik va users qilmadik. Lekin nima uchun?
- administrator muayyan zal bilan bog'lanmagan (muvofiq maydonlarni null qiymatlar bilan to'ldirish kerak bo'lardi)
- qo'shimcha rol va kirish huquqlarini taqsimlash vaqti kelganda oddiy kutubxonachi administratorlar haqida ma'lumot olishi mumkin.
Yana, biz yuqorida gapirgan jadval librarians_rooms qo'shdik - bu yerda kutubxonachilar va zallarni birlashtirdik. Bir necha kutubxonachilar bitta zalda bo'lishi va bir kutubxonachi bir necha zallar uchun javobgar bo'lishi mumkin.
Baza ma'lumotini loyihalash bilan shug'ullanayotganda, yuqorida qilganimizdek mulohaza qilishga harakat qiling. Agar hamma narsa to'g'ri chiqsa - yana davom etamiz: yana ko'proq nazariya.
GO TO FULL VERSION