== Entity Relationship Diagram == ER дијаграмот ја прикажува структурата на податоците во апликацијата **Reportium**. Преку него се дефинираат ентитетите, нивните атрибути, како и релациите помеѓу нив. Овој дијаграм служи како основна водилка за дизајнирање на базата на податоци. [[Image(er.jpg, align=center)]] == Податочни побарувања == === Ентитети === ==== Силни ентитети ==== 1. Person * **Primary Key (PK):** person_id - integer * **Attributes:** * name - text * surname - text * address - text * gender - enum (MALE, FEMALE) * date_of_birth - date * date_of_death - date * contact_phone - text * is_alive - boolean * is_stub - boolean * embg - text 2. Institution * **Primary Key (PK):** institution_id - integer * **Attributes:** * name - text * address - text * type - enum (PRIMARY SCHOOL, HIGH SCHOOL, UNIVERSITY, ACADEMY) * year_established - integer * city - text 3. Report * **Primary Key (PK):** report_id - integer * **Attributes: * report_type - enum (CRIMINAL, MEDICAL, ACADEMIC, EMPLOYMENT) * created_at - date * summary - text * person_id - (Foreign Key to Person Entity) - integer 4. !CrimeType * **Primary Key (PK):** crime_type_id - integer * **Attributes:** * label - text * severity_level - enum (LOW, MEDIUM, HIGH) 5. Diagnosis * **Primary Key (PK):** diagnosis_id - integer * **Attributes:** * description - text * therapy - text * severity - enum (LOW, MEDIUM, HIGH) * is_chronic - boolean 6. Doctor * **Primary Key (PK):** doctor_id - integer * **Attributes:** * surname - text * years_of_experience - integer * specialization - text * name - text * is_active - boolean 7. Role * **Primary Key (PK):** role_id - integer * **Attributes:** * role_name - integer * description - text 8. !FilterSession * **Primary Key (PK):** session_id - integer * **Attributes:** * filter_description - text * searched_at - timestamp * user_id - (Foreign Key to ReportiumUser Entity) 9. !ReportiumUser * **Primary Key (PK):** user_id - integer * **Attributes:** * password_hash - text * is_active - boolean * email - text (email) * surname - text * name - text * created_at - timestamp 10. !UserProfile * **Primary Key (PK):** profile_id - integer * **Attributes:** * profile_created_at - timestamp * user_id - (Foreign Key to ReportiumUser Entity) * username - text * role_id - (Foreign Key to Role Entity) ==== Слаби ентитети ==== 1. Punishment * **Primary Key (PK):** punishment_id - integer * **Attributes:** * value_unit - enum (EUROS, YEARS) * punishment_type - enum (FINE, PRISON) * fine_to_pay - double * release_date - date * report_id - (Foreign Key to Report Entity) 2. !UserProfileLog * **Primary Key (PK):** log_id - integer * **Attributes:** * change_description - text * profile_id - (Foreign Key to !UserProfile Entity) * changed_at - timestamp 3. !ExportLog * **Primary Key (PK):** export_id - integer * **Additional Attributes:** * export_date - timestamp * export_format - enum (CSV, PDF) * filter_summary - text * file_name - text * session_id - (Foreign Key to !FilterSession Entity) ==== Подтипови на Report ентитетот ==== 1. !AcademicReport * **Primary Key (PK):** report_id (inherited) * **Additional Attributes:** * institution_id - (Foreign Key to Institution Entity) * academic_field - text * description_of_report - text 2. !CriminalReport * **Primary Key (PK):** report_id (inherited) * **Additional Attributes:** * location - text * resolved - boolean * crime_type_id - (Foreign Key to !CrimeType Entity) * descriptive_punishment - text 3. !MedicalReport * **Primary Key (PK):** report_id (inherited) * **Additional Attributes:** * doctor_id - (Foreign Key to Doctor Entity) * next_control_date - date 4. !EmploymentReport * **Primary Key (PK):** report_id (inherited) * **Additional Attributes:** * position_description - text * start_date - date * end_date - date * income_per_month - double === Релаци === * UserProfile - UserProfileLog: 1 - N релација каде еден кориснички профил може да има повеќе логови, а еден лог може да припаѓа само на еден и единствен кориснички профил. Оваа релација е со целосно учество од обете страни * UserProfile - ReportiumUser: 1 - 1 релација каде еден кориснички профил може да има еден кориснички профил, и обратно. Оваа релација е со целосно учество од обете страни * UserProfile - Role: N - 1 релација каде еден кориснички профил може да има една улога, а улогата може да е поседувана од повеќе кориснички профили. Оваа релација е со целосно учество од страната на UserProfile * UserProfile - FilterSession: 1 - N релација каде еден кориснички профил може да има повеќе филтрирачки сесии, а една сесија припаѓа на само еден корисник. Оваа релација е со целосно учество од страната на FilterSession * FilterSession - ExportLog: 1 - N релација каде една сесија има повеќе exports, а еден таков export е само на една сесија. Оваа релација е со целосно учество од обете страни * FilterSession - Person: 1 - N релација каде една филтер сесија има повеќе Person објеќти вклучено, додека пак еден Person може да учествува во повеќе такви сесии * Person - Report: 1 - N релација каде еден person има повеќе извештаи, додека пак еден извештај му припаѓа на само еден person. Оваа релација е со целосно учество од страна на Report * Релацијата на Report со AcademicReport/MedicalReport/CriminalReport/EmploymentReport - еден Report објект е како абстрактната класа која ја наследува еден од четирите напоменати типови. Тоа значи дека тука има појава на disjoint, односно специјализирање во САМО ЕДЕН ОД МОЖНОСТИТЕ * AcademicReport - Institution: N - 1 релација каде еден академски извештај може да има една институција, а истата може да биде во повеќе академски извештаи. Оваа релација е со целосно учество на страна на AcademicReport * CriminalReport - CrimeType: 1 - 1 релација каде еден криминален извештај има свој 1 CrimeType, а тој може да биде поседун од повеќе CriminalReports. Оваа релација е со целосно учество на страна на CriminalReport * CriminalReport - Punishment: 1 - 1 релација каде еден криминален извештај има својa 1 казна, која припаѓа само на тој криминален извештај. Оваа релација е со целосно учество од обете страни * MedicalReport - Diagnosis: N - 0..M оваа many-to-many релација посочува дека еден медицински извештај може да има повеќе дијагнози, а и една дијагноза да припаѓа на разл. медицински извештаи * MedicalReport - Doctor: 1 - N релација каде еден медицински извештај има 1 доктор, а докторот може да биде назначен на повеќе различни медицински извештаи. Полно учество е на страна на MedicalReport