Changes between Version 1 and Version 2 of RelationalModel
- Timestamp:
- 04/20/26 01:01:45 (2 weeks ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
RelationalModel
v1 v2 1 1 = Relational Model = 2 2 3 == 1. Tables==3 == 1. Основни табели == 4 4 5 5 === Objects === 6 6 * '''PK''': object_id 7 7 * '''Attributes''': inventory_number (UNIQUE), title, creation_year, acquisition_date, description 8 * '''FK''': site_id → Sites, current_status_id → Status_Types, found_by_user_id → Users 8 * '''FK''': ''site_id'' → Sites, ''current_status_id'' → Status_Types, ''found_by_user_id'' → Users 9 * '''Description''': Централна табела која ги претставува културните објекти (артефакти) и ги поврзува со сите останати ентитети во системот. 9 10 10 11 === Sites === 11 12 * '''PK''': site_id 12 13 * '''Attributes''': site_name, latitude, longitude, altitude, discovery_year, is_active 13 * '''FK''': site_type_id → Site_Types, region_id → Regions, protection_status_id → Protection_Status, municipality_id → Municipalities 14 * '''FK''': ''site_type_id'' → Site_Types, ''region_id'' → Regions, ''protection_status_id'' → Protection_Status, ''municipality_id'' → Municipalities 15 * '''Description''': Содржи податоци за археолошки локалитети со географски и административни информации. 14 16 15 17 === Users === 16 18 * '''PK''': user_id 17 19 * '''Attributes''': username (UNIQUE), full_name, email (UNIQUE), password_hash 18 * '''FK''': role_id → Roles 20 * '''FK''': ''role_id'' → Roles 21 * '''Description''': Регистрирани корисници на системот со дефинирани улоги. 19 22 20 23 === Institutions === 21 24 * '''PK''': institution_id 22 25 * '''Attributes''': name (UNIQUE), address, city 26 * '''Description''': Институции (музеи, лаборатории, универзитети) кои управуваат со објектите. 23 27 24 28 === Publications === 25 29 * '''PK''': publication_id 26 30 * '''Attributes''': title, request_date, publisher_location 27 * '''FK''': status_id → Status_Types, main_author_id → Authors 31 * '''FK''': ''status_id'' → Status_Types, ''main_author_id'' → Authors 32 * '''Description''': Научни публикации поврзани со артефактите. 28 33 29 34 === Treatments === 30 35 * '''PK''': treatment_id 31 36 * '''Attributes''': treatment_date, description 32 * '''FK''': object_id → Objects 37 * '''FK''': ''object_id'' → Objects 38 * '''Description''': Евиденција на конзервациски третмани применети врз објектите. 33 39 34 40 === Fragments === 35 41 * '''PK''': fragment_id 36 42 * '''Attributes''': description, discovery_date 37 * '''FK''': site_id → Sites, object_id → Objects, found_by_user_id → Users, status_id → Status_Types, parent_fragment_id → Fragments (self-reference) 43 * '''FK''': ''site_id'' → Sites, ''object_id'' → Objects, ''found_by_user_id'' → Users, ''status_id'' → Status_Types, ''parent_fragment_id'' → Fragments 44 * '''Description''': Моделира делови од артефакти со поддршка за хиерархиска (self-referencing) структура. 38 45 39 46 === Conservation_Projects === 40 47 * '''PK''': project_id 41 48 * '''Attributes''': project_name, start_date, end_date, budget 42 * '''FK''': institution_id → Institutions, object_id → Objects 49 * '''FK''': ''institution_id'' → Institutions, ''object_id'' → Objects 50 * '''Description''': Проекти поврзани со конзервација и реставрација. 43 51 44 52 === Exhibitions === 45 53 * '''PK''': exhibition_id 46 54 * '''Attributes''': name, start_date, end_date 47 * '''FK''': location_institution_id → Institutions 55 * '''FK''': ''location_institution_id'' → Institutions 56 * '''Description''': Изложби во кои се прикажуваат објектите. 48 57 49 58 === Condition_Assessment === 50 59 * '''PK''': assessment_id 51 60 * '''Attributes''': assessment_date, notes 52 * '''FK''': object_id → Objects, status_id → Status_Types 61 * '''FK''': ''object_id'' → Objects, ''status_id'' → Status_Types 62 * '''Description''': Проценка на физичката состојба на објектите низ време. 53 63 54 == 2. Junction Tables (M:N Relationships)==64 == 2. Помошни (Junction) табели == 55 65 56 * '''Object_Publication''' (object_id, publication_id) — Objects ↔ Publications 57 * '''Object_Exhibition''' (object_id, exhibition_id) — Objects ↔ Exhibitions 58 * '''Publication_Authors''' (publication_id, author_id) — Publications ↔ Authors 59 * '''Materials_Objects''' (object_id, material_id) — Objects ↔ Materials 60 * '''Treatment_Materials''' (treatment_id, material_id) — Treatments ↔ Materials 66 Овие табели се користат за решавање на M:N релации: 61 67 62 == 3. Constraints == 68 * '''Object_Publication''' (''object_id, publication_id'') — Objects <-> Publications 69 * '''Object_Exhibition''' (''object_id, exhibition_id'') — Objects <-> Exhibitions 70 * '''Publication_Authors''' (''publication_id, author_id'') — Publications <-> Authors 71 * '''Materials_Objects''' (''object_id, material_id'') — Objects <-> Materials 72 * '''Treatment_Materials''' (''treatment_id, material_id'') — Treatments <-> Materials 63 73 64 * UNIQUE: inventory_number, username, email, site_name+region_id 65 * CHECK: координати во опсег за Македонија 66 * CHECK: датуми (end_date >= start_date) 67 * CHECK: creation_year не е во иднина 68 * CHECK: fragment не може да си биде сам parent 74 == 3. Ограничувања (Constraints) == 69 75 70 == 4. Design Decisions == 76 За обезбедување на интегритет на податоците се применети следните ограничувања: 71 77 72 * M:N релации се решени со помошни табели: Object_Publication, Object_Exhibition, Publication_Authors, Materials_Objects, Treatment_Materials 73 * Self-reference: Fragments (parent_fragment_id → fragment_id) 74 * Status_Types е генерализирана табела со поле "type" за различни видови статуси 75 * Одделна табела User_Details за дополнителни информации за корисниците 78 * '''UNIQUE''': inventory_number (Objects), username, email (Users), site_name + region_id (Sites). 79 * '''CHECK''': Географски координати во дозволен опсег за Македонија. 80 * '''CHECK''': Валидност на датуми (end_date >= start_date). 81 * '''CHECK''': Година на создавање (creation_year) не е во иднината. 82 * '''CHECK''': fragment_id <> parent_fragment_id (спречување на директен цикличен однoс). 83 * '''FOREIGN KEY''': Обезбедуваат референтен интегритет помеѓу сите поврзани табели. 76 84 77 == 5. Diagram==85 == 4. Дизајн одлуки == 78 86 79 [[Image(diagram.png)]] 87 * '''M:N релациите''' се реализирани преку посебни junction табели со composite primary keys за подобра нормализација. 88 * '''Self-referencing''' е имплементиран кај Fragments за моделирање на делови од објекти и нивна хиерархиска поврзаност. 89 * '''Status_Types''' е генерализирана табела која овозможува унифицирано управување со различни типови статуси преку полето "type". 90 * '''User_Details''' е издвоена табела со цел дополнителна нормализација и оптимизација на пребарувањето. 91 * '''Object_Location_History''' овозможува целосно следење на движењето на објектите низ времето. 92 * '''Treatment_Step_Log''' овозможува прецизно и детаљно евидентирање на секоја фаза од конзервациските процеси. 93 94 == 5. Дијаграм == 95 96 [[Image(diagram.jpg)]]
