| 5 | | === Objects === |
| 6 | | * '''PK''': object_id |
| 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 |
| 9 | | * '''Description''': Централна табела која ги претставува културните објекти (артефакти) и ги поврзува со сите останати ентитети во системот. |
| | 5 | Релациониот модел на Cultural Heritage Preservation System е изграден околу централната табела '''Objects''', која ги претставува културните артефакти. Секој објект задолжително припаѓа на еден археолошки локалитет ('''Sites'''), има дефиниран статус преку генерализираната табела '''Status_Types''' и може да биде поврзан со корисникот кој го пронашол. Sites дополнително се поврзани со тип на локалитет, регион, заштитен статус и општина, обезбедувајќи целосен географски и административен контекст. |
| 11 | | === Sites === |
| 12 | | * '''PK''': site_id |
| 13 | | * '''Attributes''': site_name, latitude, longitude, altitude, discovery_year, is_active |
| 14 | | * '''FK''': ''site_type_id'' → Site_Types, ''region_id'' → Regions, ''protection_status_id'' → Protection_Status, ''municipality_id'' → Municipalities |
| 15 | | * '''Description''': Содржи податоци за археолошки локалитети со географски и административни информации. |
| | 7 | Корисниците на системот ('''Users''') се организирани преку табелата '''Roles''', а нивните дополнителни информации, како специјализација и институциска припадност, се чуваат во одделна табела '''User_Details'''. Ова овозможува подобра нормализација и поефикасно пребарување. |
| 28 | | === Publications === |
| 29 | | * '''PK''': publication_id |
| 30 | | * '''Attributes''': title, request_date, publisher_location |
| 31 | | * '''FK''': ''status_id'' → Status_Types, ''main_author_id'' → Authors |
| 32 | | * '''Description''': Научни публикации поврзани со артефактите. |
| | 13 | Конзервациските активности се организираат и преку '''Conservation_Projects''', кои поврзуваат институција со конкретен предмет. Пристапот на надворешни истражувачи до предметите и проектите се контролира преку '''Researcher_Access''', каде точно се дефинира кој корисник, од која институција и во рамки на кој проект има одобрен пристап. |
| 40 | | === Fragments === |
| 41 | | * '''PK''': fragment_id |
| 42 | | * '''Attributes''': description, discovery_date |
| 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) структура. |
| | 17 | Табелата '''Fragments''' овозможува моделирање на делови од артефакти со поддршка за self-referencing структура, односно еден фрагмент може да биде дел од друг фрагмент. Со цел зачувување на конзистентноста на податоците, е имплементирано ограничување кое спречува фрагментот да си биде сам родител, а исто така фрагментот не може истовремено да припаѓа на објект и на друг фрагмент. |
| 52 | | === Exhibitions === |
| 53 | | * '''PK''': exhibition_id |
| 54 | | * '''Attributes''': name, start_date, end_date |
| 55 | | * '''FK''': ''location_institution_id'' → Institutions |
| 56 | | * '''Description''': Изложби во кои се прикажуваат објектите. |
| | 21 | Објектите можат да учествуваат на повеќе изложби и да бидат споменати во повеќе научни публикации. Овие M:N релации се реализирани преку junction табелите '''Object_Exhibition''' и '''Object_Publication'''. За изложбите, дополнителни информации за прикажување на секој предмет (наслов, опис, јазик) се чуваат во '''Exhibition_Object_Details'''. Публикациите можат да имаат повеќе автори преку '''Publication_Authors''', при што се прави разлика помеѓу главен автор и останатите соавтори. |
| 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 |
| | 29 | Табелата '''Status_Types''' е дизајнирана како генерализирана табела која преку полето "type" опслужува повеќе различни типови статуси во системот, наместо да се креираат посебни табели за секој тип. Сите M:N релации се реализирани преку посебни junction табели со композитен примарен клуч. Географските координати на локалитетите се валидираат преку CHECK constraint кој го ограничува опсегот на вредности на координатите за територијата на Македонија. |
| 76 | | За обезбедување на интегритет на податоците се применети следните ограничувања: |
| 77 | | |
| 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''': Обезбедуваат референтен интегритет помеѓу сите поврзани табели. |
| 84 | | |
| 85 | | == 4. Дизајн одлуки == |
| 86 | | |
| 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.png)]] |
| | 33 | [[Image(diagram.jpg)]] |