| 3 | | == Структура на Базата == |
| 4 | | Базата се состои од 22 табели организирани во следните групи: |
| 5 | | |
| 6 | | === Образование === |
| 7 | | * '''University''' - Складира информации за универзитети (име, адреса, веб страна, контакт) |
| 8 | | * '''Faculty''' - Факултети кои припаѓаат на универзитети |
| 9 | | * '''!StudyProgram''' - Студиски програми понудени од факултети (bachelor, master, phd) |
| 10 | | * '''Studies''' - Следи кои корисници се запишани на кои студиски програми |
| 11 | | * '''Diploma''' - Записи за дипломирање на завршени студии |
| 12 | | |
| 13 | | === Корисници === |
| 14 | | * '''User''' - Главна табела за корисници со лични информации (име, датум на раѓање, просек, контакт) |
| 15 | | * '''Skill''' - Достапни вештини со типови (технички, меки, јазици, итн.) |
| 16 | | * '''User_Skill''' - Врска many-to-many помеѓу корисници и вештини |
| 17 | | |
| 18 | | === Вработување === |
| 19 | | * '''Industry''' - Категории на индустрии |
| 20 | | * '''Company''' - Компании со број на вработени и индустрија |
| 21 | | * '''Employment''' - Записи за вработување кои ги поврзуваат корисниците со компании |
| 22 | | * '''Position''' - Работни позиции за време на вработувањето |
| 23 | | * '''Promotion''' - Записи за унапредување со стари/нови нивоа |
| 24 | | * '''!SalaryHistory''' - Промени на плата со текот на времето |
| 25 | | |
| 26 | | === Останати Активности === |
| 27 | | * '''Internship''' - Записи за пракси кои ги поврзуваат корисниците со компании |
| 28 | | * '''!AdditionalCourse''' - Курсеви за професионален развој |
| 29 | | * '''AdditionalCourse_User''' - Записи за завршени курсеви по корисник |
| 30 | | * '''Startup''' - Стартап компании |
| 31 | | * '''Founder''' - Ги поврзува корисниците со стартапите кои ги основале |
| 32 | | * '''Event''' - Професионални настани организирани од компании |
| 33 | | * '''Event_User''' - Записи за присуство на настани |
| 34 | | * '''Award''' - Награди добиени од корисници |
| 35 | | |
| 36 | | == Ограничувања == |
| 37 | | Структурата ги наметнува следните правила за интегритет на податоците: |
| 38 | | |
| 39 | | * Валидација на формат на е-пошта преку regex на табелите University, Faculty и User |
| 40 | | * Валидација на формат на телефон (6-15 цифри, опционален + префикс) |
| 41 | | * Валидација на формат на веб страна (мора да започнува со http:// или https://) |
| 42 | | * Просек опсег 5-10 |
| 43 | | * Тип на диплома ограничен на: bachelor, master, phd |
| 44 | | * Тип на вработување ограничен на: full-time, part-time, contract, internship |
| 45 | | * Ограничувања за статус на студии/вработување |
| 46 | | * Валидација на опсег на датуми (end_date >= start_date) |
| 47 | | * Каскадни ажурирања и ограничени бришења на foreign keys |
| 48 | | |
| 49 | | == Генерирање на Податоци == |
| 50 | | Податоците беа генерирани со комбинација на: |
| 51 | | * '''CSV датотеки''' - 14 CSV датотеки кои содржат референтни податоци (имиња, градови, универзитети, факултети, студиски програми, индустрии, компании, вештини, работни позиции, настани, курсеви, стартапи, награди) |
| 52 | | * '''SQL скрипта за генерирање''' - Големите табели се генерирани со користење на PostgreSQL функцијата `generate_series()` со детерминистички формули за да се обезбеди референцијален интегритет |
| 53 | | |
| 54 | | === Стратегија на Генерирање === |
| 55 | | * Референтните податоци (University, Faculty, Industry, Skill, итн.) вметнати од CSV датотеки |
| 56 | | * Големите табели (User, Studies, Employment, итн.) генерирани во серии од 500.000 редови за да се избегнат проблеми со истекување на времето |
| 57 | | * Користени процедури за сериско вметнување |
| | 3 | == Полнење на табелите == |
| | 4 | Податоците беа генерирани со комбинација на CSV датотеки за референтни податоци и SQL скрипта која користи `generate_series()` за големите табели. Табелите се полнети во серии од 500.000 редови за да се избегнат проблеми со дисковен простор на серверот. Генерираните податоци се што е можно пореалистични — имиња од македонски именски пул, реални адреси, валидни формати за е-пошта и телефон. |
| | 30 | |
| | 31 | ---- |
| | 32 | |
| | 33 | == Погледи (Views) == |
| | 34 | |
| | 35 | === v_companies_by_industry === |
| | 36 | Прикажува листа на компании збогатена со информации за индустријата и секторот на кој припаѓаат. Се користи при пребарување и филтрирање на компании по индустрија, на пример кога корисникот бара вработување во одреден сектор или кога системот генерира статистики за застапеноста на alumni по индустрии. |
| | 37 | {{{ |
| | 38 | CREATE OR REPLACE VIEW public.v_companies_by_industry AS |
| | 39 | SELECT c.company_id, |
| | 40 | c.name AS company_name, |
| | 41 | c.number_employees, |
| | 42 | i.industry_name, |
| | 43 | i.sector_category |
| | 44 | FROM company c |
| | 45 | JOIN industry i ON i.industry_id = c.industry_id; |
| | 46 | }}} |
| | 47 | |
| | 48 | === v_employment_history === |
| | 49 | Прикажува целосна историја на вработувања на корисниците — компанија, период, тип на вработување и дали е тековно. Се користи при приказ на работното CV на alumni, каде апликацијата треба да прикаже хронолошки список на сите претходни и тековни вработувања. |
| | 50 | {{{ |
| | 51 | CREATE OR REPLACE VIEW public.v_employment_history AS |
| | 52 | SELECT u.user_id, |
| | 53 | u.first_name, |
| | 54 | u.last_name, |
| | 55 | c.name AS company_name, |
| | 56 | e.start_date, |
| | 57 | e.end_date, |
| | 58 | e.employment_type, |
| | 59 | e.is_current |
| | 60 | FROM employment e |
| | 61 | JOIN "User" u ON u.user_id = e.user_id |
| | 62 | JOIN company c ON c.company_id = e.company_id; |
| | 63 | }}} |
| | 64 | |
| | 65 | === v_event_participants === |
| | 66 | Прикажува листа на учесници за секој настан, заедно со нивната улога. Се користи при управување со настани — организаторите можат да го видат списокот на пријавени alumni, а корисниците можат да ги прегледаат настаните на кои присуствувале. |
| | 67 | {{{ |
| | 68 | CREATE OR REPLACE VIEW public.v_event_participants AS |
| | 69 | SELECT e.event_id, |
| | 70 | e.name AS event_name, |
| | 71 | e.date, |
| | 72 | u.user_id, |
| | 73 | u.first_name, |
| | 74 | u.last_name, |
| | 75 | eu.role |
| | 76 | FROM event e |
| | 77 | JOIN event_user eu ON eu.event_id = e.event_id |
| | 78 | JOIN "User" u ON u.user_id = eu.user_id; |
| | 79 | }}} |
| | 80 | |
| | 81 | === v_faculty_programs === |
| | 82 | Прикажува студиски програми збогатени со информации за факултетот и универзитетот на кој припаѓаат. Се користи при приказ на каталогот на студиски програми во апликацијата, каде нов корисник може да ја избере програмата на која студирал или студира. |
| | 83 | {{{ |
| | 84 | CREATE OR REPLACE VIEW public.v_faculty_programs AS |
| | 85 | SELECT f.faculty_id, |
| | 86 | f.name AS faculty_name, |
| | 87 | u.name AS university_name, |
| | 88 | sp.study_program_id, |
| | 89 | sp.program_name, |
| | 90 | sp.degree_type, |
| | 91 | sp.duration_years |
| | 92 | FROM faculty f |
| | 93 | JOIN university u ON u.university_id = f.university_id |
| | 94 | JOIN studyprogram sp ON sp.faculty_id = f.faculty_id; |
| | 95 | }}} |
| | 96 | |
| | 97 | === v_startups_with_founders === |
| | 98 | Прикажува стартапи заедно со нивните основачи (корисниците кои ги основале). Се користи при приказ на претприемачката активност на alumni — корисниците можат да ги прегледаат стартапите на своите колеги или да го промовираат сопствениот стартап. |
| | 99 | {{{ |
| | 100 | CREATE OR REPLACE VIEW public.v_startups_with_founders AS |
| | 101 | SELECT st.startup_id, |
| | 102 | st.name AS startup_name, |
| | 103 | st.status, |
| | 104 | u.user_id, |
| | 105 | u.first_name, |
| | 106 | u.last_name |
| | 107 | FROM startup st |
| | 108 | JOIN founder f ON f.startup_id = st.startup_id |
| | 109 | JOIN "User" u ON u.user_id = f.user_id; |
| | 110 | }}} |
| | 111 | |
| | 112 | === v_student_academic_profile === |
| | 113 | Прикажува целосен академски профил на корисник — студиска програма, факултет, универзитет, период и статус на студии. Се користи при приказ на академскиот дел од профилот на alumni, каде другите корисници или работодавачи можат да ги видат образовните квалификации. |
| | 114 | {{{ |
| | 115 | CREATE OR REPLACE VIEW public.v_student_academic_profile AS |
| | 116 | SELECT u.user_id, |
| | 117 | u.first_name, |
| | 118 | u.last_name, |
| | 119 | sp.program_name, |
| | 120 | f.name AS faculty_name, |
| | 121 | uni.name AS university_name, |
| | 122 | s.start_date, |
| | 123 | s.end_date, |
| | 124 | s.status |
| | 125 | FROM "User" u |
| | 126 | JOIN studies s ON s.user_id = u.user_id |
| | 127 | JOIN studyprogram sp ON sp.study_program_id = s.study_program_id |
| | 128 | JOIN faculty f ON f.faculty_id = sp.faculty_id |
| | 129 | JOIN university uni ON uni.university_id = f.university_id; |
| | 130 | }}} |
| | 131 | |
| | 132 | === v_students_per_program === |
| | 133 | Прикажува вкупниот број на студенти запишани на секоја студиска програма. Се користи за административни извештаи и статистики — администраторите можат да ја следат популарноста на студиските програми и бројот на alumni по програма. |
| | 134 | {{{ |
| | 135 | CREATE OR REPLACE VIEW public.v_students_per_program AS |
| | 136 | SELECT sp.study_program_id, |
| | 137 | sp.program_name, |
| | 138 | COUNT(s.user_id) AS total_students |
| | 139 | FROM studyprogram sp |
| | 140 | LEFT JOIN studies s ON s.study_program_id = sp.study_program_id |
| | 141 | GROUP BY sp.study_program_id, sp.program_name; |
| | 142 | }}} |
| | 143 | |
| | 144 | === v_user_skills === |
| | 145 | Прикажува листа на вештини (ime и тип) кои ги поседува секој корисник. Се користи при приказ на профилот на alumni и при пребарување на кандидати по специфични вештини — на пример работодавач бара alumni со Python и Machine Learning вештини. |
| | 146 | {{{ |
| | 147 | CREATE OR REPLACE VIEW public.v_user_skills AS |
| | 148 | SELECT u.user_id, |
| | 149 | u.first_name, |
| | 150 | u.last_name, |
| | 151 | s.skill_name, |
| | 152 | s.type |
| | 153 | FROM "User" u |
| | 154 | JOIN user_skill us ON us.user_id = u.user_id |
| | 155 | JOIN skill s ON s.skill_id = us.skill_id; |
| | 156 | }}} |
| | 157 | |
| | 158 | === v_user_full_career === |
| | 159 | Прикажува целосен преглед на кариерата на корисник — студии, вработувања и компании на едно место. Се користи при генерирање на целосен профил на alumni за работодавачи, каде на еден поглед се гледаат и образованието и работното искуство на кандидатот. |
| | 160 | {{{ |
| | 161 | CREATE OR REPLACE VIEW public.v_user_full_career AS |
| | 162 | SELECT u.user_id, |
| | 163 | u.first_name, |
| | 164 | u.last_name, |
| | 165 | sp.program_name, |
| | 166 | s.status AS study_status, |
| | 167 | e.start_date AS employment_start, |
| | 168 | e.end_date AS employment_end, |
| | 169 | e.employment_type, |
| | 170 | c.name AS company_name |
| | 171 | FROM "User" u |
| | 172 | LEFT JOIN studies s ON s.user_id = u.user_id |
| | 173 | LEFT JOIN studyprogram sp ON sp.study_program_id = s.study_program_id |
| | 174 | LEFT JOIN employment e ON e.user_id = u.user_id |
| | 175 | LEFT JOIN company c ON c.company_id = e.company_id; |
| | 176 | }}} |