= Relational Model = == 1. Основни табели == === Objects === * '''PK''': object_id * '''Attributes''': inventory_number (UNIQUE), title, creation_year, acquisition_date, description * '''FK''': ''site_id'' → Sites, ''current_status_id'' → Status_Types, ''found_by_user_id'' → Users * '''Description''': Централна табела која ги претставува културните објекти (артефакти) и ги поврзува со сите останати ентитети во системот. === Sites === * '''PK''': site_id * '''Attributes''': site_name, latitude, longitude, altitude, discovery_year, is_active * '''FK''': ''site_type_id'' → Site_Types, ''region_id'' → Regions, ''protection_status_id'' → Protection_Status, ''municipality_id'' → Municipalities * '''Description''': Содржи податоци за археолошки локалитети со географски и административни информации. === Users === * '''PK''': user_id * '''Attributes''': username (UNIQUE), full_name, email (UNIQUE), password_hash * '''FK''': ''role_id'' → Roles * '''Description''': Регистрирани корисници на системот со дефинирани улоги. === Institutions === * '''PK''': institution_id * '''Attributes''': name (UNIQUE), address, city * '''Description''': Институции (музеи, лаборатории, универзитети) кои управуваат со објектите. === Publications === * '''PK''': publication_id * '''Attributes''': title, request_date, publisher_location * '''FK''': ''status_id'' → Status_Types, ''main_author_id'' → Authors * '''Description''': Научни публикации поврзани со артефактите. === Treatments === * '''PK''': treatment_id * '''Attributes''': treatment_date, description * '''FK''': ''object_id'' → Objects * '''Description''': Евиденција на конзервациски третмани применети врз објектите. === Fragments === * '''PK''': fragment_id * '''Attributes''': description, discovery_date * '''FK''': ''site_id'' → Sites, ''object_id'' → Objects, ''found_by_user_id'' → Users, ''status_id'' → Status_Types, ''parent_fragment_id'' → Fragments * '''Description''': Моделира делови од артефакти со поддршка за хиерархиска (self-referencing) структура. === Conservation_Projects === * '''PK''': project_id * '''Attributes''': project_name, start_date, end_date, budget * '''FK''': ''institution_id'' → Institutions, ''object_id'' → Objects * '''Description''': Проекти поврзани со конзервација и реставрација. === Exhibitions === * '''PK''': exhibition_id * '''Attributes''': name, start_date, end_date * '''FK''': ''location_institution_id'' → Institutions * '''Description''': Изложби во кои се прикажуваат објектите. === Condition_Assessment === * '''PK''': assessment_id * '''Attributes''': assessment_date, notes * '''FK''': ''object_id'' → Objects, ''status_id'' → Status_Types * '''Description''': Проценка на физичката состојба на објектите низ време. == 2. Помошни (Junction) табели == Овие табели се користат за решавање на M:N релации: * '''Object_Publication''' (''object_id, publication_id'') — Objects <-> Publications * '''Object_Exhibition''' (''object_id, exhibition_id'') — Objects <-> Exhibitions * '''Publication_Authors''' (''publication_id, author_id'') — Publications <-> Authors * '''Materials_Objects''' (''object_id, material_id'') — Objects <-> Materials * '''Treatment_Materials''' (''treatment_id, material_id'') — Treatments <-> Materials == 3. Ограничувања (Constraints) == За обезбедување на интегритет на податоците се применети следните ограничувања: * '''UNIQUE''': inventory_number (Objects), username, email (Users), site_name + region_id (Sites). * '''CHECK''': Географски координати во дозволен опсег за Македонија. * '''CHECK''': Валидност на датуми (end_date >= start_date). * '''CHECK''': Година на создавање (creation_year) не е во иднината. * '''CHECK''': fragment_id <> parent_fragment_id (спречување на директен цикличен однoс). * '''FOREIGN KEY''': Обезбедуваат референтен интегритет помеѓу сите поврзани табели. == 4. Дизајн одлуки == * '''M:N релациите''' се реализирани преку посебни junction табели со composite primary keys за подобра нормализација. * '''Self-referencing''' е имплементиран кај Fragments за моделирање на делови од објекти и нивна хиерархиска поврзаност. * '''Status_Types''' е генерализирана табела која овозможува унифицирано управување со различни типови статуси преку полето "type". * '''User_Details''' е издвоена табела со цел дополнителна нормализација и оптимизација на пребарувањето. * '''Object_Location_History''' овозможува целосно следење на движењето на објектите низ времето. * '''Treatment_Step_Log''' овозможува прецизно и детаљно евидентирање на секоја фаза од конзервациските процеси. == 5. Дијаграм == [[Image(diagram.jpg)]]