== UC012 - Управување со предмети '''Иницијален актер:''' Администратор '''Други актери:''' - Администраторот ја одржува понудата на предмети: додава нов предмет, ги менува неговите кредити, го распоредува во студиските програми и определува предуслови. === Сценарио 1. Администраторот избира '''Предмети''' и потоа '''Нов предмет'''. 2. Системот прикажува формулар за назив, шифра, кредити и потребни кредити за слушање. 3. Администраторот ги внесува податоците и потврдува. 4. Системот го запишува предметот. Називот и шифрата имаат ограничување UNIQUE, па дупликат не е можен. {{{#!sql INSERT INTO project.subjects (name, code, awarded_credits, dependency_credit) VALUES ('Computer Graphics', 'F18L3S025', 6, 12) RETURNING id; }}} 5. Администраторот го распоредува предметот во една или повеќе студиски програми, со семестарот во кој се слуша. {{{#!sql INSERT INTO project.major_subjects (major_id, subject_id, mandatory_semester) VALUES (1, (SELECT id FROM project.subjects WHERE code = 'F18L3S025'), 4); }}} 6. Администраторот определува предуслов за предметот. {{{#!sql INSERT INTO project.dependency_subject (subject_id, dependency_id) VALUES ((SELECT id FROM project.subjects WHERE code = 'F18L3S025'), (SELECT id FROM project.subjects WHERE code = 'F18L1S002')); }}} 7. При измена на постоечки предмет, системот го ажурира записот. {{{#!sql UPDATE project.subjects SET awarded_credits = 8, dependency_credit = 18 WHERE code = 'F18L3S025'; }}} 8. Системот ја прикажува обновената листа на предмети со нивните програми и предуслови. {{{#!sql SELECT s.code, s.name, s.awarded_credits, m.name AS major, ms.mandatory_semester FROM project.subjects s LEFT JOIN project.major_subjects ms ON ms.subject_id = s.id LEFT JOIN project.major m ON m.id = ms.major_id ORDER BY s.code, m.name; }}} === Алтернативни текови * '''4а.''' Шифрата или називот веќе постојат - ограничувањата UNIQUE го одбиваат записот. * '''6а.''' Обид предметот да биде сопствен предуслов - ограничувањето CHECK (subject_id <> dependency_id) го спречува. * '''9а.''' Бришење на предмет кој веќе е слушан од студенти не е дозволено, бидејќи надворешните клучеви од semesters_subjects го спречуваат. Прво мора да се отстранат врските: {{{#!sql DELETE FROM project.dependency_subject WHERE subject_id = (SELECT id FROM project.subjects WHERE code = 'F18L3S025') OR dependency_id = (SELECT id FROM project.subjects WHERE code = 'F18L3S025'); DELETE FROM project.major_subjects WHERE subject_id = (SELECT id FROM project.subjects WHERE code = 'F18L3S025'); DELETE FROM project.subjects WHERE code = 'F18L3S025'; }}}