Задачата
Задача 1 (от учебника)
Проектирайте неголяма информационна система на тема Моето училище, като предвидите някои от възможните обекти — Училище, Ученик, Учебен предмет, Преподавател и т.н. За всеки обект определете типа на данните за всеки от атрибутите и множеството от допустими стойности там, където е приложимо.
Това е първата ни среща с истинско моделиране — преди да пишем и ред код, отговаряме на въпросите: кои обекти ще описва системата, какви характеристики (атрибути) има всеки обект и какъв тип данни е всяка характеристика.
Стъпка 1 — избираме обектите
Оглеждаме се в предметната област „училище" и изброяваме съществените обекти:
- Ученик — централният обект на системата.
- Клас — учениците се групират в класове.
- Преподавател — води учебни предмети.
- Учебен предмет — какво се изучава.
- Оценка — свързва ученик, предмет и стойност.
Съвет
Добър тест дали нещо е отделен обект: има ли собствени характеристики и много ли екземпляри от него съществуват? „Оценка" не е просто число — тя има ученик, предмет и дата, затова е отделен обект.
Стъпка 2 — атрибути и типове
За всеки атрибут посочваме типа (по познанията ни от езиците за програмиране) и допустимите стойности:
| Обект | Атрибут | Тип | Допустими стойности |
|---|---|---|---|
| Ученик | Име | string | непразен текст |
| Ученик | ЕГН | string | точно 10 цифри |
| Ученик | Клас | връзка към Клас | съществуващ клас |
| Клас | Име | string | напр. „12А“ |
| Преподавател | Име | string | непразен текст |
| Оценка | Стойност | double | от 2.00 до 6.00 |
| Оценка | Дата | дата | валидна дата от учебната година |
| Оценка | Ученик, Предмет | връзки | съществуващ ученик / предмет |
Допустимите стойности са част от модела
„Оценката е между 2 и 6" не е детайл — това е ограничение за цялостност. В следващите уроци ще видим, че СУБД може да пази такива правила вместо нас.
Стъпка 3 — от модел към таблици
По релационния модел на Код: за всяка група еднотипни обекти — таблица. Връзките между обектите стават колони, сочещи към друга таблица (както class_id при учениците в нашата учебна база):
- Таблица
classes(id, name). - Таблица
students(id, name, grade, class_id → classes). - Таблица
subjects(id, name). - Таблица
marks(id, student_id → students, subject_id → subjects, mark, date).
Точно това е схемата, върху която работят SQL упражненията в този учебник — тя е решение на задачата „Моето училище".
Стъпка 4 — полезните справки
Задача 3 (от учебника)
Формулирайте полезни справки от базата с данни. Например: „всички ученици от даден клас", „средният успех по предмет", „учениците с поне една отлична оценка".
Справките са смисълът на цялата система — моделът е добър, ако отговаря лесно на въпросите, които потребителите ще задават. Провери двете справки в упражненията по-долу.
Какво трябва да запомниш
- Моделирането започва с въпроса „кои са обектите“, не с кода.
- Всеки атрибут има тип И множество от допустими стойности.
- Връзките между обектите са част от модела (ученик → клас).
- Обект с много екземпляри и собствени характеристики → отделна таблица.
- Моделът се оценява по това колко лесно отговаря на нужните справки.