| | 6 | |
| | 7 | === Објаснување на нормализацијата === |
| | 8 | |
| | 9 | Нормализацијата беше извршена како анализа на целиот модел составен од 12 табели, при што се разгледуваа зависностите помеѓу табелите, а не само во рамки на секоја одделно. На тој начин се овозможи откривање на заеднички функционални зависности и елиминирање на дуплирани ентитети и атрибути. |
| | 10 | |
| | 11 | Клучни подобрувања: |
| | 12 | - Централизација на статусите преку единствена табела **statuses**, користена и во **subscription** и **notifications**. |
| | 13 | - Централизација на земјите преку табелата **countries**, споделена од **actors** и **locations**. |
| | 14 | - Елиминирање на транзитивни зависности преку атрибути како **role_id**, **country_code**, и **type_code**. |
| | 15 | - Генерација на дополнителни референтни табели како **actor_types**, **roles**, и **statuses** со foreign keys за интегритет. |
| | 16 | |
| | 17 | Со оваа нормализација до 3NF, се подобрува конзистентноста, се намалува дуплирањето на податоци и се поедноставува одржувањето на базата. |
| | 49 | |
| | 50 | === **users**(**user_id**, **first_name**, **last_name**, **email**, **password_hash**, **role_id**, **last_login_date**, **register_date**) === |
| | 51 | |
| | 52 | Функционални зависности: |
| | 53 | **user_id** → **first_name**, **last_name**, **email**, **password_hash**, **role_id**, **last_login_date**, **register_date** |
| | 54 | **role_id** → **role_name** |
| | 55 | |
| | 56 | 1NF: Атомски вредности / |
| | 57 | 2NF: Зависности од целиот клуч / |
| | 58 | 3NF: Транзитивна зависност преку **role_id** |
| | 59 | |
| | 60 | Декомпозиција: |
| | 61 | **users**(**user_id**, **first_name**, **last_name**, **email**, **password_hash**, **role_id**, **last_login_date**, **register_date**) |
| | 62 | **roles**(**role_id**, **role_name**) |
| 83 | | === Нови релации по нормализација === |
| | 92 | === **predictions**(**prediction_id**, **event_id**, **actor_id**, **predicted_date**, **prediction_type**, **confidence_score**) === |
| | 93 | |
| | 94 | Функционални зависности: |
| | 95 | **prediction_id** → **event_id**, **actor_id**, **predicted_date**, **prediction_type**, **confidence_score** |
| | 96 | |
| | 97 | 1NF: Атомски вредности / |
| | 98 | 2NF: Нема составен клуч, сите зависности се од примарниот клуч / |
| | 99 | 3NF: Нема транзитивни зависности |
| | 100 | |
| | 101 | Декомпозиција: / (нема потреба) |
| | 102 | |
| | 103 | === **conflict_risk**(**conflict_id**, **actor1_id**, **actor2_id**, **risk_score**, **predicted_date**, **description**) === |
| | 104 | |
| | 105 | Функционални зависности: |
| | 106 | **conflict_id** → **actor1_id**, **actor2_id**, **risk_score**, **predicted_date**, **description** |
| | 107 | |
| | 108 | 1NF: Атомски вредности / |
| | 109 | 2NF: Сите зависности се од примарниот клуч / |
| | 110 | 3NF: Нема транзитивни зависности |
| | 111 | |
| | 112 | Декомпозиција: / (нема потреба) |
| | 113 | |
| | 114 | === **event_analytics**(**analytics_id**, **actor_id**, **event_id**, **date**, **conflict_coefficient**, **mentions_count**, **avg_tone**, **description**) === |
| | 115 | |
| | 116 | Функционални зависности: |
| | 117 | **analytics_id** → **actor_id**, **event_id**, **date**, **conflict_coefficient**, **mentions_count**, **avg_tone**, **description** |
| | 118 | |
| | 119 | 1NF: Атомски вредности / |
| | 120 | 2NF: Сите зависности се од клучот / |
| | 121 | 3NF: Нема транзитивни зависности |
| | 122 | |
| | 123 | Декомпозиција: / (нема потреба) |
| | 124 | |
| | 125 | === **Нови релации по нормализација** === |
| 99 | | |
| 100 | | === Финален дизајн (за **actors**) === |
| 101 | | |
| 102 | | CREATE TABLE **actors** ( |
| 103 | | **actor_id** SERIAL PRIMARY KEY, |
| 104 | | **actor_code** VARCHAR(10) NOT NULL, |
| 105 | | **actor_name** VARCHAR(100) NOT NULL, |
| 106 | | **country_code** VARCHAR(5), |
| 107 | | **type_code** VARCHAR(10), |
| 108 | | FOREIGN KEY (**country_code**) REFERENCES **countries**(**country_code**), |
| 109 | | FOREIGN KEY (**type_code**) REFERENCES **actor_types**(**type_code**) |
| 110 | | ); |