| | 1 | == UC014 - Распоредување на професори по предмети |
| | 2 | |
| | 3 | '''Иницијален актер:''' Администратор |
| | 4 | |
| | 5 | '''Други актери:''' - |
| | 6 | |
| | 7 | Администраторот определува кој професор кој предмет го предава во кој активен |
| | 8 | семестар. Ова распоредување е предуслов за запишување на семестар, бидејќи |
| | 9 | предметот кој никој не го предава не може да се запише. |
| | 10 | |
| | 11 | === Сценарио |
| | 12 | |
| | 13 | 1. Администраторот избира '''Распоред''' и избира активен семестар. |
| | 14 | |
| | 15 | 2. Системот го прикажува тековниот распоред за тој семестар. |
| | 16 | {{{#!sql |
| | 17 | SELECT s.code, s.name AS subject, p.name || ' ' || p.surname AS professor |
| | 18 | FROM project.professour_subjects ps |
| | 19 | JOIN project.subjects s ON s.id = ps.subject_id |
| | 20 | JOIN project.users p ON p.id = ps.prof_id |
| | 21 | WHERE ps.active_semester_id = 3 |
| | 22 | ORDER BY s.code; |
| | 23 | }}} |
| | 24 | |
| | 25 | 3. Системот ги прикажува професорите достапни за распоредување. |
| | 26 | {{{#!sql |
| | 27 | SELECT id, name || ' ' || surname AS professor |
| | 28 | FROM project.users |
| | 29 | WHERE role = 'prof' |
| | 30 | ORDER BY surname; |
| | 31 | }}} |
| | 32 | |
| | 33 | 4. Администраторот избира предмет и професор и потврдува. |
| | 34 | |
| | 35 | 5. Системот го запишува распоредувањето. Примарниот клуч е составен од трите колони, па исто распоредување не може да се внесе двапати. |
| | 36 | {{{#!sql |
| | 37 | INSERT INTO project.professour_subjects (prof_id, active_semester_id, subject_id) |
| | 38 | VALUES (5, 3, 20) |
| | 39 | ON CONFLICT (prof_id, active_semester_id, subject_id) DO NOTHING; |
| | 40 | }}} |
| | 41 | |
| | 42 | 6. Ако професорот повеќе не го предава предметот, администраторот го отстранува распоредувањето. |
| | 43 | {{{#!sql |
| | 44 | DELETE FROM project.professour_subjects |
| | 45 | WHERE prof_id = 5 AND active_semester_id = 3 AND subject_id = 20; |
| | 46 | }}} |
| | 47 | |
| | 48 | 7. Системот покажува колку предмети предава секој професор во тој семестар, за да се види оптовареноста. |
| | 49 | {{{#!sql |
| | 50 | SELECT p.name || ' ' || p.surname AS professor, count(*) AS subjects |
| | 51 | FROM project.professour_subjects ps |
| | 52 | JOIN project.users p ON p.id = ps.prof_id |
| | 53 | WHERE ps.active_semester_id = 3 |
| | 54 | GROUP BY p.id, p.name, p.surname |
| | 55 | ORDER BY subjects DESC, professor; |
| | 56 | }}} |
| | 57 | |
| | 58 | === Алтернативни текови |
| | 59 | |
| | 60 | * '''6а.''' Отстранување на распоредувањето не ги менува веќе запишаните предмети, бидејќи semesters_subjects.professor_id се запишува при запишувањето и останува непроменет. |
| | 61 | |
| | 62 | === Забелешки |
| | 63 | |
| | 64 | * Табелата professour_subjects е тројна врска меѓу users, active_semesters и subjects, со составен примарен клуч од трите надворешни клучеви. |
| | 65 | * Ист предмет може да го предаваат повеќе професори во ист семестар; при запишување системот избира еден од нив. |