| | 1 | = Релационен дизајн = |
| | 2 | |
| | 3 | == Релациона шема == |
| | 4 | |
| | 5 | Релациониот модел е добиен од ЕР моделот v01 со '''парцијална трансформација'''. Сите релации во ЕР моделот се од тип 1:N, па секоја од нив е претставена со надворешен клуч во табелата од страната N. Нема релации од тип N:M, па не се потребни дополнителни табели за релациите. Assignments е посебно множество ентитети во ЕР моделот и затоа е претставено со своја табела. |
| | 6 | |
| | 7 | '''Нотација:''' |
| | 8 | * '''__примарен клуч__''' - задебелен и подвлечен |
| | 9 | * '''задолжителен атрибут''' (NOT NULL) - задебелен |
| | 10 | * надворешен клуч* - означен со * и табелата кон која покажува |
| | 11 | * незадолжителен атрибут - без ознака |
| | 12 | |
| | 13 | '''admins''' ('''__admin_id__''', '''full_name''', '''email''', '''password''') |
| | 14 | |
| | 15 | '''workers''' ('''__worker_id__''', '''full_name''', '''email''', '''password''') |
| | 16 | |
| | 17 | '''citizens''' ('''__citizen_id__''', '''full_name''', '''email''', phone, '''password''') |
| | 18 | |
| | 19 | '''categories''' ('''__category_id__''', '''name''', '''admin_id*''' (admins)) |
| | 20 | |
| | 21 | '''reports''' ('''__report_id__''', '''description''', location_text, latitude, longitude, '''status''', '''priority''', '''created_at''', '''citizen_id*''' (citizens), '''category_id*''' (categories)) |
| | 22 | |
| | 23 | '''photos''' ('''__photo_id__''', '''image_url''', '''report_id*''' (reports)) |
| | 24 | |
| | 25 | '''status_logs''' ('''__log_id__''', '''status''', '''changed_at''', note, '''report_id*''' (reports), worker_id* (workers)) |
| | 26 | |
| | 27 | '''comments''' ('''__comment_id__''', '''content''', '''created_at''', '''report_id*''' (reports), '''worker_id*''' (workers)) |
| | 28 | |
| | 29 | '''assignments''' ('''__assignment_id__''', '''assigned_at''', note, '''admin_id*''' (admins), '''report_id*''' (reports), '''worker_id*''' (workers)) |
| | 30 | |
| | 31 | '''Дополнителни ограничувања:''' |
| | 32 | * email е единствен во admins, workers и citizens; name е единствен во categories. |
| | 33 | * Комбинацијата (report_id, worker_id) во assignments е единствена, бидејќи ист работник не може двапати да биде доделен на иста пријава. |
| | 34 | * status може да биде: submitted, received, in_progress, resolved, rejected. |
| | 35 | * priority може да биде: low, medium, high, urgent. |
| | 36 | * latitude е помеѓу -90 и 90, longitude помеѓу -180 и 180, и двете се внесуваат заедно. |
| | 37 | * Секоја пријава мора да има барем адреса (location_text) или координати. |
| | 38 | * worker_id во status_logs е незадолжителен, бидејќи почетниот статус „submitted“ го креира системот. |
| | 39 | |
| | 40 | == DDL скрипта за креирање на шемата == |
| | 41 | |
| | 42 | [attachment:schema_creation.sql] |
| | 43 | |
| | 44 | Скриптата ја брише постоечката шема project (доколку постои) и ги креира одново сите табели со сите ограничувања, па може да се извршува и на празна база и на база каде шемата веќе постои. |
| | 45 | |
| | 46 | == DML скрипта за полнење на табелите == |
| | 47 | |
| | 48 | [attachment:data_load.sql] |
| | 49 | |
| | 50 | Скриптата ги брише постоечките податоци од сите табели и ги внесува одново. Податоците ги опфаќаат сите ситуации во системот: решени пријави, пријави во тек, одбиени пријави и нови пријави кои сè уште не се доделени на работник. |
| | 51 | |
| | 52 | == Релационен дијаграм == |
| | 53 | |
| | 54 | [[Image(relational_schema.jpg, width=100%)]] |
| | 55 | |
| | 56 | == Користење на вештачка интелигенција == |
| | 57 | |
| | 58 | [wiki:RelationalDesignAIUsage Користење на вештачка интелигенција за релациониот дизајн] |