| | 634 | = Функции = |
| | 635 | |
| | 636 | |
| | 637 | === Функција 1: Ажурирање на наслов на археолошки предмет (update_object_title) === |
| | 638 | |
| | 639 | 1. **Намена:** |
| | 640 | Функцијата `update_object_title` е наменета за контролирано ажурирање на насловот на археолошки предмет во табелата `Objects`. Нејзината основна цел е да овозможи промена на називот на предметот, но само доколку новиот наслов е валиден и не е празен. |
| | 641 | |
| | 642 | 2. **Случај на употреба:** |
| | 643 | Во системот за управување со културно-археолошко наследство, насловот на предметот претставува еден од најважните идентификациски податоци. При каталогизација или дополнителна научна обработка може да се утврди дека претходниот назив на предметот не е доволно прецизен, па е потребно негово ажурирање. |
| | 644 | |
| | 645 | На пример, предмет кој првично бил внесен како „Фрагмент“ подоцна може да биде прецизно идентификуван како „Керамички фрагмент од амфора“. |
| | 646 | |
| | 647 | 3. **Причина за употреба на функција:** |
| | 648 | Избрана е функција наместо директен `UPDATE` затоа што е потребна дополнителна валидација пред да се изврши промената. Функцијата проверува дали новиот наслов е `NULL` или празен текст. Доколку е празен, операцијата се прекинува. |
| | 649 | |
| | 650 | Со ова се спречува внесување невалидни или бескорисни вредности во едно од клучните полиња на табелата `Objects`. |
| | 651 | |
| | 652 | 4. **Имплементација:** |
| | 653 | |
| | 654 | Функцијата прима два параметри: |
| | 655 | |
| | 656 | * `obj_id` – идентификатор на предметот кој треба да се ажурира |
| | 657 | * `new_title` – новиот наслов на предметот |
| | 658 | |
| | 659 | Валидацијата се врши со: |
| | 660 | |
| | 661 | {{{ |
| | 662 | IF new_title IS NULL OR LENGTH(TRIM(new_title)) = 0 THEN |
| | 663 | RAISE EXCEPTION 'Насловот не смее да биде празен.'; |
| | 664 | END IF; |
| | 665 | }}} |
| | 666 | |
| | 667 | Потоа се извршува ажурирање: |
| | 668 | |
| | 669 | {{{ |
| | 670 | UPDATE Objects |
| | 671 | SET title = new_title |
| | 672 | WHERE object_id = obj_id; |
| | 673 | }}} |
| | 674 | |
| | 675 | Доколку не е пронајден предмет со дадениот ID, функцијата враќа грешка: |
| | 676 | |
| | 677 | {{{ |
| | 678 | RAISE EXCEPTION 'Објект со ID % не е пронајден.', obj_id; |
| | 679 | }}} |
| | 680 | |
| | 681 | 5. **Логика на работа:** |
| | 682 | Функцијата најпрво ја валидира новата вредност, потоа го ажурира предметот и на крај проверува дали навистина бил пронајден запис за ажурирање. На овој начин се покриваат две можни грешки: |
| | 683 | |
| | 684 | * празен или невалиден наслов |
| | 685 | * непостоечки предмет |
| | 686 | |
| | 687 | 6. **Бизнис логика:** |
| | 688 | Оваа функција ја имплементира потребата за точна и контролирана музејска евиденција. Во систем каде предметите се користат во изложби, публикации, конзерваторски проекти и истражувачки пристапи, насловот мора да биде валиден и јасен. |
| | 689 | |
| | 690 | Без оваа функција, би можело да се внесе празен назив, што би довело до проблеми во каталогизацијата, пребарувањето и прикажувањето на предметите во апликацијата. |
| | 691 | |
| | 692 | 7. **Пример на употреба:** |
| | 693 | |
| | 694 | {{{ |
| | 695 | SELECT update_object_title( |
| | 696 | 100, |
| | 697 | 'Ажуриран археолошки предмет' |
| | 698 | ); |
| | 699 | }}} |
| | 700 | |
| | 701 | 8. **Заклучок:** |
| | 702 | `update_object_title` овозможува безбедно и контролирано ажурирање на насловите на археолошките предмети. Таа ја подобрува точноста на податоците и спречува внесување невалидни вредности во основниот каталог на предмети. |
| | 703 | |
| | 704 | |
| | 705 | |
| | 706 | === Функција 2: Додавање нов археолошки локалитет (add_site) === |
| | 707 | |
| | 708 | 1. **Намена:** |
| | 709 | Функцијата `add_site` е наменета за внесување нов археолошки локалитет во табелата `Sites`. Нејзината цел е да овозможи стандардизиран внес на локалитет со сите основни географски, административни и описни информации. |
| | 710 | |
| | 711 | 2. **Случај на употреба:** |
| | 712 | Кога археолозите или институциите откриваат или документираат нов локалитет, потребно е тој да биде внесен во системот со податоци за тип на локалитет, регион, година на откривање, заштитен статус, координати, општина и опис. |
| | 713 | |
| | 714 | Ова е основен чекор во системот, бидејќи предметите и фрагментите понатаму се поврзуваат со конкретен локалитет. |
| | 715 | |
| | 716 | 3. **Причина за употреба на функција:** |
| | 717 | Избрана е функција за да се централизира внесувањето на локалитети и да се избегне директно пишување `INSERT` прашалници во апликацијата. Со тоа се добива појасен и поконтролиран начин на додавање нови археолошки локации. |
| | 718 | |
| | 719 | Дополнително, табелата `Sites` веќе содржи ограничувања за координати, странски клучеви и уникатност, а функцијата го користи тој модел за да внесе само структурирани податоци. |
| | 720 | |
| | 721 | 4. **Имплементација:** |
| | 722 | |
| | 723 | Функцијата прима: |
| | 724 | |
| | 725 | * `p_name` – име на локалитет |
| | 726 | * `p_site_type_id` – тип на локалитет |
| | 727 | * `p_region_id` – регион |
| | 728 | * `p_year` – година на откривање |
| | 729 | * `p_protection_status_id` – заштитен статус |
| | 730 | * `p_latitude` – географска ширина |
| | 731 | * `p_longitude` – географска должина |
| | 732 | * `p_municipality_id` – општина |
| | 733 | * `p_description` – опис на локалитетот |
| | 734 | |
| | 735 | Функцијата внесува запис во `Sites`: |
| | 736 | |
| | 737 | {{{ |
| | 738 | INSERT INTO Sites( |
| | 739 | site_name, |
| | 740 | site_type_id, |
| | 741 | region_id, |
| | 742 | discovery_year, |
| | 743 | protection_status_id, |
| | 744 | latitude, |
| | 745 | longitude, |
| | 746 | municipality_id, |
| | 747 | description |
| | 748 | ) |
| | 749 | VALUES (...); |
| | 750 | }}} |
| | 751 | |
| | 752 | 5. **Логика на работа:** |
| | 753 | Функцијата ги зема параметрите добиени од корисникот или апликацијата и ги внесува во табелата `Sites`. Дополнителните проверки за валидност на регионот, типот, статусот и координатите се обезбедуваат преку constraints дефинирани во самата табела. |
| | 754 | |
| | 755 | 6. **Бизнис логика:** |
| | 756 | Оваа функција ја поддржува основната функционалност за евиденција на археолошки локалитети. Бидејќи секој предмет и фрагмент мора да има археолошки контекст, правилното внесување на локалитети е клучно за целиот систем. |
| | 757 | |
| | 758 | Локалитетот не е само географска точка, туку претставува основа за: |
| | 759 | * поврзување на предмети |
| | 760 | * поврзување на фрагменти |
| | 761 | * анализа по региони |
| | 762 | * следење на заштитени културни добра |
| | 763 | * планирање на идни истражувања |
| | 764 | |
| | 765 | 7. **Пример на употреба:** |
| | 766 | |
| | 767 | {{{ |
| | 768 | SELECT add_site( |
| | 769 | 'Градиште - Нов локалитет', |
| | 770 | 1, |
| | 771 | 1, |
| | 772 | 2024, |
| | 773 | 1, |
| | 774 | 41.995000, |
| | 775 | 21.431000, |
| | 776 | 1, |
| | 777 | 'Нов археолошки локалитет со остатоци од антички период.' |
| | 778 | ); |
| | 779 | }}} |
| | 780 | |
| | 781 | 8. **Заклучок:** |
| | 782 | `add_site` овозможува стандардизиран внес на археолошки локалитети и ја поддржува основната структура на системот. Со неа се обезбедува локалитетите да се внесуваат на контролиран начин и да бидат подготвени за поврзување со предмети, фрагменти и институционални анализи. |
| | 783 | |
| | 784 | |
| | 785 | |
| | 786 | === Функција 3: Проверка дали предмет е достапен за работа (is_object_available) === |
| | 787 | |
| | 788 | 1. **Намена:** |
| | 789 | Функцијата `is_object_available` е наменета за проверка дали одреден археолошки предмет е достапен за конзерваторска или реставраторска работа. |
| | 790 | |
| | 791 | 2. **Случај на употреба:** |
| | 792 | Во системот, предметите можат да имаат различни статуси. Некои предмети можат да бидат изложени, депонирани или веќе да се наоѓаат на конзервација. Пред да се внесе нов третман, потребно е да се провери дали предметот е во состојба која дозволува дополнителна обработка. |
| | 793 | |
| | 794 | Оваа функција директно се користи од процедурата `add_treatment`. |
| | 795 | |
| | 796 | 3. **Причина за употреба на функција:** |
| | 797 | Избрана е функција затоа што проверката дали предметот е достапен може да се користи на повеќе места во системот. Наместо истата логика да се повторува во повеќе процедури или апликациски функции, таа е централизирана во една database функција. |
| | 798 | |
| | 799 | 4. **Имплементација:** |
| | 800 | |
| | 801 | Функцијата прима: |
| | 802 | |
| | 803 | * `p_object_id` – идентификатор на предметот |
| | 804 | |
| | 805 | Најпрво го чита тековниот статус: |
| | 806 | |
| | 807 | {{{ |
| | 808 | SELECT current_status_id |
| | 809 | INTO v_status |
| | 810 | FROM Objects |
| | 811 | WHERE object_id = p_object_id; |
| | 812 | }}} |
| | 813 | |
| | 814 | Ако предметот не постои: |
| | 815 | |
| | 816 | {{{ |
| | 817 | IF NOT FOUND THEN |
| | 818 | RETURN FALSE; |
| | 819 | END IF; |
| | 820 | }}} |
| | 821 | |
| | 822 | Ако статусот е 3: |
| | 823 | |
| | 824 | {{{ |
| | 825 | IF v_status = 3 THEN |
| | 826 | RETURN FALSE; |
| | 827 | END IF; |
| | 828 | }}} |
| | 829 | |
| | 830 | Во спротивно враќа: |
| | 831 | |
| | 832 | {{{ |
| | 833 | RETURN TRUE; |
| | 834 | }}} |
| | 835 | |
| | 836 | 5. **Логика на работа:** |
| | 837 | Функцијата враќа `BOOLEAN` вредност: |
| | 838 | |
| | 839 | * `TRUE` – предметот е достапен за работа |
| | 840 | * `FALSE` – предметот не постои или не е достапен |
| | 841 | |
| | 842 | Статусот `3` во системот се користи за предмети кои се „На конзервација“, односно веќе се во процес на обработка и не треба паралелно да се отвора нов третман. |
| | 843 | |
| | 844 | 6. **Бизнис логика:** |
| | 845 | Оваа функција ја имплементира контролата на конзерваторскиот workflow. Во реален музејски контекст, не смее ист предмет неконтролирано да се обработува повеќепати или да се внесе третман врз предмет кој веќе е во активна конзервација. |
| | 846 | |
| | 847 | Со ова се спречува: |
| | 848 | * дуплирање третмани |
| | 849 | * паралелна обработка на ист предмет |
| | 850 | * неконзистентна документација |
| | 851 | * погрешно планирање на конзерваторски активности |
| | 852 | |
| | 853 | 7. **Пример на употреба:** |
| | 854 | |
| | 855 | {{{ |
| | 856 | SELECT is_object_available(804822); |
| | 857 | }}} |
| | 858 | |
| | 859 | 8. **Заклучок:** |
| | 860 | `is_object_available` е клучна помошна функција за проверка на достапноста на предметите. Таа обезбедува правилна контрола на третманите и ја спречува апликацијата да дозволи невалидни конзерваторски операции. |
| | 861 | |
| | 862 | |
| | 863 | |
| | 864 | === Функција 4: Додавање третман и автоматски лог на извршител (add_treatment) === |
| | 865 | |
| | 866 | 1. **Намена:** |
| | 867 | Функцијата `add_treatment` е наменета за додавање нов конзерваторски третман врз археолошки предмет и автоматско креирање почетен запис во `Treatment_Step_Log`. |
| | 868 | |
| | 869 | 2. **Случај на употреба:** |
| | 870 | Кога конзерватор започнува третман врз предмет, не е доволно само да се внесе запис во `Treatments`. Потребно е и да се документира кој корисник ја започнал интервенцијата и да се креира почетен чекор во дневникот на третманот. |
| | 871 | |
| | 872 | Ова е важно за следење на одговорност, историја на интервенции и професионална документација. |
| | 873 | |
| | 874 | 3. **Причина за употреба на функција:** |
| | 875 | Избрана е функција затоа што операцијата вклучува повеќе чекори: |
| | 876 | |
| | 877 | * проверка дали предметот постои |
| | 878 | * внесување нов третман во `Treatments` |
| | 879 | * земање на новиот `treatment_id` |
| | 880 | * внесување почетен лог во `Treatment_Step_Log` |
| | 881 | |
| | 882 | Ова не може ефикасно и безбедно да се изведе со еден обичен `INSERT`. |
| | 883 | |
| | 884 | 4. **Имплементација:** |
| | 885 | |
| | 886 | Функцијата прима: |
| | 887 | |
| | 888 | * `p_object_id` |
| | 889 | * `p_description` |
| | 890 | * `p_user_id` |
| | 891 | |
| | 892 | Прво проверува дали предметот постои: |
| | 893 | |
| | 894 | {{{ |
| | 895 | IF NOT EXISTS ( |
| | 896 | SELECT 1 FROM Objects WHERE object_id = p_object_id |
| | 897 | ) THEN |
| | 898 | RAISE EXCEPTION 'Објектот не постои'; |
| | 899 | END IF; |
| | 900 | }}} |
| | 901 | |
| | 902 | Потоа внесува третман: |
| | 903 | |
| | 904 | {{{ |
| | 905 | INSERT INTO Treatments(object_id, treatment_date, description) |
| | 906 | VALUES (p_object_id, CURRENT_DATE, p_description) |
| | 907 | RETURNING treatment_id INTO v_treatment_id; |
| | 908 | }}} |
| | 909 | |
| | 910 | Потоа внесува почетен чекор: |
| | 911 | |
| | 912 | {{{ |
| | 913 | INSERT INTO Treatment_Step_Log( |
| | 914 | treatment_id, |
| | 915 | step_number, |
| | 916 | step_description, |
| | 917 | performed_by_user |
| | 918 | ) |
| | 919 | VALUES ( |
| | 920 | v_treatment_id, |
| | 921 | 1, |
| | 922 | 'Initial treatment', |
| | 923 | p_user_id |
| | 924 | ); |
| | 925 | }}} |
| | 926 | |
| | 927 | 5. **Логика на работа:** |
| | 928 | Функцијата работи како автоматизиран workflow за започнување третман. Откако ќе се внесе третманот, веднаш се креира и првиот чекор во дневникот на третманот. |
| | 929 | |
| | 930 | Со ова се обезбедува секој третман да има почетна документација и поврзан корисник. |
| | 931 | |
| | 932 | 6. **Бизнис логика:** |
| | 933 | Во систем за културно наследство, секоја реставраторска интервенција мора да биде документирана. Не е доволно да се знае дека третман постои; мора да се знае и кој го започнал и кога. |
| | 934 | |
| | 935 | Оваа функција обезбедува: |
| | 936 | * трага на одговорност |
| | 937 | * почетна документација за третман |
| | 938 | * поврзување на третманот со корисник |
| | 939 | * намалување на човечки грешки при внесување |
| | 940 | |
| | 941 | 7. **Пример на употреба:** |
| | 942 | |
| | 943 | {{{ |
| | 944 | SELECT add_treatment( |
| | 945 | 804822, |
| | 946 | 'Механичко чистење на површински наслој', |
| | 947 | 10 |
| | 948 | ); |
| | 949 | }}} |
| | 950 | |
| | 951 | 8. **Заклучок:** |
| | 952 | `add_treatment` е важна функција за автоматизирање на конзерваторскиот процес. Таа овозможува третманот и неговиот почетен лог да се креираат заедно, што ја подобрува точноста и комплетноста на документацијата. |
| | 953 | |
| | 954 | |
| | 955 | |
| | 956 | === Функција 5: Проверка на истражувачки пристап (has_access) === |
| | 957 | |
| | 958 | 1. **Намена:** |
| | 959 | Функцијата `has_access` е наменета за проверка дали одреден корисник има одобрен пристап до конкретен археолошки предмет. |
| | 960 | |
| | 961 | 2. **Случај на употреба:** |
| | 962 | Во системот, истражувачите не треба автоматски да имаат пристап до сите предмети. Пристапот се контролира преку табелата `Researcher_Access`, каде за секој корисник, предмет и институција се чува статусот на барањето. |
| | 963 | |
| | 964 | Оваа функција се користи кога апликацијата треба да одлучи дали да му дозволи на корисникот да гледа или обработува информации за конкретен предмет. |
| | 965 | |
| | 966 | 3. **Причина за употреба на функција:** |
| | 967 | Избрана е функција затоа што проверката на пристап е логика која може често да се користи во апликацијата. Наместо секојпат да се пишува ист `SELECT EXISTS`, логиката е централизирана во една функција. |
| | 968 | |
| | 969 | 4. **Имплементација:** |
| | 970 | |
| | 971 | Функцијата прима: |
| | 972 | |
| | 973 | * `p_user_id` |
| | 974 | * `p_object_id` |
| | 975 | |
| | 976 | Проверува дали постои запис во `Researcher_Access` со: |
| | 977 | |
| | 978 | * ист корисник |
| | 979 | * ист предмет |
| | 980 | * статус `access_status_id = 6` |
| | 981 | |
| | 982 | {{{ |
| | 983 | RETURN EXISTS ( |
| | 984 | SELECT 1 |
| | 985 | FROM Researcher_Access |
| | 986 | WHERE user_id = p_user_id |
| | 987 | AND object_id = p_object_id |
| | 988 | AND access_status_id = 6 |
| | 989 | ); |
| | 990 | }}} |
| | 991 | |
| | 992 | 5. **Логика на работа:** |
| | 993 | Функцијата враќа: |
| | 994 | |
| | 995 | * `TRUE` ако корисникот има одобрен пристап |
| | 996 | * `FALSE` ако нема одобрен пристап |
| | 997 | |
| | 998 | Статусот `6` се користи за „Одобрено“. |
| | 999 | |
| | 1000 | 6. **Бизнис логика:** |
| | 1001 | Оваа функција ја имплементира контролата на пристап до чувствителни археолошки информации. Кај културното наследство, податоците за предметите може да бидат ограничени поради научна вредност, безбедност, институционална сопственост или заштитен статус. |
| | 1002 | |
| | 1003 | Со оваа функција системот може лесно да провери дали корисникот има право да работи со предметот. |
| | 1004 | |
| | 1005 | 7. **Пример на употреба:** |
| | 1006 | |
| | 1007 | {{{ |
| | 1008 | SELECT has_access( |
| | 1009 | 10, |
| | 1010 | 804822 |
| | 1011 | ); |
| | 1012 | }}} |
| | 1013 | |
| | 1014 | 8. **Заклучок:** |
| | 1015 | `has_access` претставува важна безбедносна функција која овозможува контролиран пристап до предметите. Таа ја централизира логиката за дозволи и ја поедноставува имплементацијата во апликацијата. |
| | 1016 | |
| | 1017 | |
| | 1018 | |
| | 1019 | === Функција 6: Броење автори по публикација (count_authors) === |
| | 1020 | |
| | 1021 | 1. **Намена:** |
| | 1022 | Функцијата `count_authors` е наменета за пресметување на бројот на автори поврзани со одредена научна публикација. |
| | 1023 | |
| | 1024 | 2. **Случај на употреба:** |
| | 1025 | Во системот, публикациите можат да имаат повеќе автори. Релацијата помеѓу публикации и автори е реализирана преку табелата `Publication_Authors`. |
| | 1026 | |
| | 1027 | При библиографски преглед, извештаи или валидација, може да биде потребно да се знае колку автори има една публикација. |
| | 1028 | |
| | 1029 | 3. **Причина за употреба на функција:** |
| | 1030 | Избрана е функција затоа што ова е едноставна, но често корисна агрегатна операција. Наместо апликацијата постојано да извршува `COUNT(*)` врз junction табелата, логиката се централизира во база. |
| | 1031 | |
| | 1032 | 4. **Имплементација:** |
| | 1033 | |
| | 1034 | Функцијата прима: |
| | 1035 | |
| | 1036 | * `p_publication_id` |
| | 1037 | |
| | 1038 | Потоа го брои бројот на записи: |
| | 1039 | |
| | 1040 | {{{ |
| | 1041 | SELECT COUNT(*) |
| | 1042 | INTO v_count |
| | 1043 | FROM Publication_Authors |
| | 1044 | WHERE publication_id = p_publication_id; |
| | 1045 | }}} |
| | 1046 | |
| | 1047 | и го враќа резултатот. |
| | 1048 | |
| | 1049 | 5. **Логика на работа:** |
| | 1050 | Функцијата пребарува колку автори се поврзани со дадена публикација преку `publication_id`. |
| | 1051 | |
| | 1052 | Резултатот е цел број (`INT`). |
| | 1053 | |
| | 1054 | 6. **Бизнис логика:** |
| | 1055 | Оваа функција ја поддржува научната и библиографската евиденција. Во археолошки контекст, публикациите често се резултат на тимска работа, па бројот на автори е важен за: |
| | 1056 | |
| | 1057 | * библиографски извештаи |
| | 1058 | * проверка на авторство |
| | 1059 | * академска статистика |
| | 1060 | * прикажување детали за публикации |
| | 1061 | |
| | 1062 | 7. **Пример на употреба:** |
| | 1063 | |
| | 1064 | {{{ |
| | 1065 | SELECT count_authors(100); |
| | 1066 | }}} |
| | 1067 | |
| | 1068 | 8. **Заклучок:** |
| | 1069 | `count_authors` овозможува едноставна и централизирана пресметка на бројот на автори за публикација. Таа ја поддржува научната евиденција и ја поедноставува работата со библиографски податоци. |
| | 1070 | |
| | 1071 | |
| | 1072 | |
| | 1073 | === Функција 7: Автоматска проценка на важност на предмет (object_importance) === |
| | 1074 | |
| | 1075 | 1. **Намена:** |
| | 1076 | Функцијата `object_importance` е наменета за автоматска пресметка на индикатор за важност на археолошки предмет. |
| | 1077 | |
| | 1078 | 2. **Случај на употреба:** |
| | 1079 | Во системот, некои предмети имаат поголема институционална или научна важност од други. Предмет кој има повеќе третмани и се појавува во повеќе научни публикации може да се смета за поважен, бидејќи е повеќе истражуван, документиран или конзерваторски значаен. |
| | 1080 | |
| | 1081 | 3. **Причина за употреба на функција:** |
| | 1082 | Избрана е функција затоа што важноста на предметот не е директно поле во табелата `Objects`, туку се пресметува врз основа на поврзани податоци од други табели: |
| | 1083 | |
| | 1084 | * `Treatments` |
| | 1085 | * `Object_Publication` |
| | 1086 | |
| | 1087 | Функцијата овозможува оваа пресметка да се изврши динамички кога е потребно. |
| | 1088 | |
| | 1089 | 4. **Имплементација:** |
| | 1090 | |
| | 1091 | Функцијата прима: |
| | 1092 | |
| | 1093 | * `p_object_id` |
| | 1094 | |
| | 1095 | Прво го брои бројот на третмани: |
| | 1096 | |
| | 1097 | {{{ |
| | 1098 | SELECT COUNT(*) INTO v_treatments |
| | 1099 | FROM Treatments |
| | 1100 | WHERE object_id = p_object_id; |
| | 1101 | }}} |
| | 1102 | |
| | 1103 | Потоа го брои бројот на публикации: |
| | 1104 | |
| | 1105 | {{{ |
| | 1106 | SELECT COUNT(*) INTO v_publications |
| | 1107 | FROM Object_Publication |
| | 1108 | WHERE object_id = p_object_id; |
| | 1109 | }}} |
| | 1110 | |
| | 1111 | На крај враќа пресметана вредност: |
| | 1112 | |
| | 1113 | {{{ |
| | 1114 | RETURN (v_treatments * 2) + (v_publications * 3); |
| | 1115 | }}} |
| | 1116 | |
| | 1117 | 5. **Логика на работа:** |
| | 1118 | Функцијата користи тежинска формула: |
| | 1119 | |
| | 1120 | * секој третман носи 2 поени |
| | 1121 | * секоја публикација носи 3 поени |
| | 1122 | |
| | 1123 | Публикациите имаат поголема тежина бидејќи укажуваат на научна обработка и истражувачка вредност на предметот. |
| | 1124 | |
| | 1125 | 6. **Бизнис логика:** |
| | 1126 | Оваа функција ја имплементира потребата од приоритизација на предмети. Во музејски и археолошки системи, институциите често треба да одлучат кои предмети се поважни за: |
| | 1127 | |
| | 1128 | * понатамошна конзервација |
| | 1129 | * дигитализација |
| | 1130 | * изложување |
| | 1131 | * научна обработка |
| | 1132 | * институционални извештаи |
| | 1133 | |
| | 1134 | Со оваа функција може автоматски да се пресмета релативна важност на предметот според неговата историја на третмани и публикации. |
| | 1135 | |
| | 1136 | 7. **Пример на употреба:** |
| | 1137 | |
| | 1138 | {{{ |
| | 1139 | SELECT object_importance(804822); |
| | 1140 | }}} |
| | 1141 | |
| | 1142 | 8. **Заклучок:** |
| | 1143 | `object_importance` обезбедува едноставен механизам за проценка на значајноста на археолошките предмети. Таа помага при анализа и приоритизација на културното наследство врз основа на реални податоци од системот. |
| | 1144 | |
| | 1145 | |
| | 1146 | |
| | 1147 | === Функција 8: Приказ на основни детали за предмет (find_object_details) === |
| | 1148 | |
| | 1149 | 1. **Намена:** |
| | 1150 | Функцијата `find_object_details` е наменета за враќање основни информации за конкретен археолошки предмет. |
| | 1151 | |
| | 1152 | 2. **Случај на употреба:** |
| | 1153 | Кога корисникот пребарува предмет во системот, често е потребно брзо да се прикажат основните детали: насловот на предметот, кој го пронашол и на кој локалитет е пронајден. |
| | 1154 | |
| | 1155 | Оваа функција овозможува таков краток и структуриран приказ. |
| | 1156 | |
| | 1157 | 3. **Причина за употреба на функција:** |
| | 1158 | Избрана е функција затоа што ги обединува податоците од повеќе табели во еден повик: |
| | 1159 | |
| | 1160 | * `Objects` |
| | 1161 | * `Users` |
| | 1162 | * `Sites` |
| | 1163 | |
| | 1164 | Наместо апликацијата секојпат да пишува `JOIN` прашалник, функцијата обезбедува повторно употреблива логика. |
| | 1165 | |
| | 1166 | 4. **Имплементација:** |
| | 1167 | |
| | 1168 | Функцијата прима: |
| | 1169 | |
| | 1170 | * `p_object_id` |
| | 1171 | |
| | 1172 | Враќа табела со следните полиња: |
| | 1173 | |
| | 1174 | * `object_id` |
| | 1175 | * `title` |
| | 1176 | * `found_by` |
| | 1177 | * `site_name` |
| | 1178 | |
| | 1179 | Имплементацијата користи: |
| | 1180 | |
| | 1181 | {{{ |
| | 1182 | LEFT JOIN Users u ON o.found_by_user_id = u.user_id |
| | 1183 | JOIN Sites s ON o.site_id = s.site_id |
| | 1184 | }}} |
| | 1185 | |
| | 1186 | `LEFT JOIN` со `Users` е важен затоа што предметот може да нема внесен корисник кој го пронашол, но сепак треба да се прикаже. |
| | 1187 | |
| | 1188 | 5. **Логика на работа:** |
| | 1189 | Функцијата пребарува предмет според неговиот `object_id` и враќа комбиниран резултат со информации од поврзаните табели. |
| | 1190 | |
| | 1191 | 6. **Бизнис логика:** |
| | 1192 | Оваа функција ја поддржува основната навигација и пребарување во системот. Во контекст на културно наследство, секој предмет мора да биде разгледуван заедно со неговиот археолошки контекст. |
| | 1193 | |
| | 1194 | Затоа е важно за предметот веднаш да се знае: |
| | 1195 | |
| | 1196 | * кој е предметот |
| | 1197 | * каде е пронајден |
| | 1198 | * кој го евидентирал или пронашол |
| | 1199 | |
| | 1200 | 7. **Пример на употреба:** |
| | 1201 | |
| | 1202 | {{{ |
| | 1203 | SELECT * |
| | 1204 | FROM find_object_details(804822); |
| | 1205 | }}} |
| | 1206 | |
| | 1207 | 8. **Заклучок:** |
| | 1208 | `find_object_details` овозможува брз и јасен приказ на основни информации за археолошки предмет. Таа ја поедноставува апликациската логика и овозможува подобро поврзување на предметите со нивниот локалитет и корисничка евиденција. |