Changes between Version 7 and Version 8 of DatabaseCreation


Ignore:
Timestamp:
05/27/26 00:32:32 (20 hours ago)
Author:
231108
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseCreation

    v7 v8  
    1 = Креирање на База на Податоци =
     1= Фаза 2Б - Полнење на табелите и погледи =
    22
    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 редови за да се избегнат проблеми со дисковен простор на серверот. Генерираните податоци се што е можно пореалистични — имиња од македонски именски пул, реални адреси, валидни формати за е-пошта и телефон.
    585
    596== Број на Редови по Табела ==
     
    8128|| Skill || 65 ||
    8229|| !AdditionalCourse || 20 ||
     30
     31----
     32
     33== Погледи (Views) ==
     34
     35=== v_companies_by_industry ===
     36Прикажува листа на компании збогатена со информации за индустријата и секторот на кој припаѓаат. Се користи при пребарување и филтрирање на компании по индустрија, на пример кога корисникот бара вработување во одреден сектор или кога системот генерира статистики за застапеноста на alumni по индустрии.
     37{{{
     38CREATE OR REPLACE VIEW public.v_companies_by_industry AS
     39SELECT c.company_id,
     40       c.name AS company_name,
     41       c.number_employees,
     42       i.industry_name,
     43       i.sector_category
     44FROM company c
     45JOIN industry i ON i.industry_id = c.industry_id;
     46}}}
     47
     48=== v_employment_history ===
     49Прикажува целосна историја на вработувања на корисниците — компанија, период, тип на вработување и дали е тековно. Се користи при приказ на работното CV на alumni, каде апликацијата треба да прикаже хронолошки список на сите претходни и тековни вработувања.
     50{{{
     51CREATE OR REPLACE VIEW public.v_employment_history AS
     52SELECT 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
     60FROM employment e
     61JOIN "User" u ON u.user_id = e.user_id
     62JOIN company c ON c.company_id = e.company_id;
     63}}}
     64
     65=== v_event_participants ===
     66Прикажува листа на учесници за секој настан, заедно со нивната улога. Се користи при управување со настани — организаторите можат да го видат списокот на пријавени alumni, а корисниците можат да ги прегледаат настаните на кои присуствувале.
     67{{{
     68CREATE OR REPLACE VIEW public.v_event_participants AS
     69SELECT 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
     76FROM event e
     77JOIN event_user eu ON eu.event_id = e.event_id
     78JOIN "User" u ON u.user_id = eu.user_id;
     79}}}
     80
     81=== v_faculty_programs ===
     82Прикажува студиски програми збогатени со информации за факултетот и универзитетот на кој припаѓаат. Се користи при приказ на каталогот на студиски програми во апликацијата, каде нов корисник може да ја избере програмата на која студирал или студира.
     83{{{
     84CREATE OR REPLACE VIEW public.v_faculty_programs AS
     85SELECT 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
     92FROM faculty f
     93JOIN university u ON u.university_id = f.university_id
     94JOIN studyprogram sp ON sp.faculty_id = f.faculty_id;
     95}}}
     96
     97=== v_startups_with_founders ===
     98Прикажува стартапи заедно со нивните основачи (корисниците кои ги основале). Се користи при приказ на претприемачката активност на alumni — корисниците можат да ги прегледаат стартапите на своите колеги или да го промовираат сопствениот стартап.
     99{{{
     100CREATE OR REPLACE VIEW public.v_startups_with_founders AS
     101SELECT st.startup_id,
     102       st.name AS startup_name,
     103       st.status,
     104       u.user_id,
     105       u.first_name,
     106       u.last_name
     107FROM startup st
     108JOIN founder f ON f.startup_id = st.startup_id
     109JOIN "User" u ON u.user_id = f.user_id;
     110}}}
     111
     112=== v_student_academic_profile ===
     113Прикажува целосен академски профил на корисник — студиска програма, факултет, универзитет, период и статус на студии. Се користи при приказ на академскиот дел од профилот на alumni, каде другите корисници или работодавачи можат да ги видат образовните квалификации.
     114{{{
     115CREATE OR REPLACE VIEW public.v_student_academic_profile AS
     116SELECT 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
     125FROM "User" u
     126JOIN studies s ON s.user_id = u.user_id
     127JOIN studyprogram sp ON sp.study_program_id = s.study_program_id
     128JOIN faculty f ON f.faculty_id = sp.faculty_id
     129JOIN university uni ON uni.university_id = f.university_id;
     130}}}
     131
     132=== v_students_per_program ===
     133Прикажува вкупниот број на студенти запишани на секоја студиска програма. Се користи за административни извештаи и статистики — администраторите можат да ја следат популарноста на студиските програми и бројот на alumni по програма.
     134{{{
     135CREATE OR REPLACE VIEW public.v_students_per_program AS
     136SELECT sp.study_program_id,
     137       sp.program_name,
     138       COUNT(s.user_id) AS total_students
     139FROM studyprogram sp
     140LEFT JOIN studies s ON s.study_program_id = sp.study_program_id
     141GROUP BY sp.study_program_id, sp.program_name;
     142}}}
     143
     144=== v_user_skills ===
     145Прикажува листа на вештини (ime и тип) кои ги поседува секој корисник. Се користи при приказ на профилот на alumni и при пребарување на кандидати по специфични вештини — на пример работодавач бара alumni со Python и Machine Learning вештини.
     146{{{
     147CREATE OR REPLACE VIEW public.v_user_skills AS
     148SELECT u.user_id,
     149       u.first_name,
     150       u.last_name,
     151       s.skill_name,
     152       s.type
     153FROM "User" u
     154JOIN user_skill us ON us.user_id = u.user_id
     155JOIN skill s ON s.skill_id = us.skill_id;
     156}}}
     157
     158=== v_user_full_career ===
     159Прикажува целосен преглед на кариерата на корисник — студии, вработувања и компании на едно место. Се користи при генерирање на целосен профил на alumni за работодавачи, каде на еден поглед се гледаат и образованието и работното искуство на кандидатот.
     160{{{
     161CREATE OR REPLACE VIEW public.v_user_full_career AS
     162SELECT 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
     171FROM "User" u
     172LEFT JOIN studies s ON s.user_id = u.user_id
     173LEFT JOIN studyprogram sp ON sp.study_program_id = s.study_program_id
     174LEFT JOIN employment e ON e.user_id = u.user_id
     175LEFT JOIN company c ON c.company_id = e.company_id;
     176}}}