Changes between Version 5 and Version 6 of normalization


Ignore:
Timestamp:
07/17/25 08:37:08 (13 days ago)
Author:
155036
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • normalization

    v5 v6  
    11== Нормализација и подобрувања на дизајнот ==
    22
    3 Во оваа секција е прикажана нормализацијата на постоечкиот ER модел до трета нормална форма (3NF), за да се отстранат зависностите, се избегне дуплирање на податоци и да се подобри интегритетот.
    4 
     3Во оваа секција е прикажана нормализацијата на целокупниот ER модел до трета нормална форма (3NF), за да се отстранат зависностите, се избегне дуплирање на податоци и да се подобри интегритетот.
    54
    65[attachment:normalized_ddl_schema.sql]
     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, се подобрува конзистентноста, се намалува дуплирањето на податоци и се поедноставува одржувањето на базата.
    718
    819
     
    1425**type_code** → **type_description**
    1526
    16 1NF: Атомски вредности  /
    17 
    18 
    19 2NF: Сите атрибути зависат од клучот  /
    20 
    21  
     271NF: Атомски вредности  / 
     282NF: Сите атрибути зависат од примарниот клуч  / 
    22293NF: Постои транзитивна зависност → **actor_id** → **country_code** → **country_name**
    2330
     
    3340**country_code** → **country_name**
    3441
    35 1NF: Атомски вредности  /
    36 
    37 
    38 2NF: Зависности од целиот клуч  /
    39 
    40 
     421NF: Атомски вредности  / 
     432NF: Сите атрибути зависат од примарниот клуч  / 
    41443NF: Транзитивна зависност преку **country_code**
    4245
     
    4447**locations**(**location_id**, **full_name**, **country_code**, **adm1_code**, **latitude**, **longitude**, **feature_id**) 
    4548**countries**(**country_code**, **country_name**)
     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
     561NF: Атомски вредности / 
     572NF: Зависности од целиот клуч / 
     583NF: Транзитивна зависност преку **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**)
    4663
    4764=== **subscription**(**subscription_id**, **user_id**, **plan_id**, **start_date**, **end_date**, **status**) ===
     
    5168**status** → **status_description**
    5269
    53 1NF: Атомски атрибути  /
    54 
    55 
    56 2NF: Сите атрибути зависат од клучот  /
    57 
    58 
     701NF: Атомски вредности / 
     712NF: Сите зависности од клучот / 
    59723NF: Транзитивна зависност преку **status**
    6073
     
    6982**status** → **status_description**
    7083
    71 1NF: Атомски вредности  /
    72 
    73 
    74 2NF: Зависности од целиот клуч /
    75 
    76  
     841NF: Атомски вредности / 
     852NF: Зависности од целиот клуч / 
    77863NF: Транзитивна зависност преку **status**
    7887
     
    8190**statuses**(**status_code**, **status_description**)
    8291
    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
     971NF: Атомски вредности / 
     982NF: Нема составен клуч, сите зависности се од примарниот клуч / 
     993NF: Нема транзитивни зависности
     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
     1081NF: Атомски вредности / 
     1092NF: Сите зависности се од примарниот клуч / 
     1103NF: Нема транзитивни зависности
     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
     1191NF: Атомски вредности / 
     1202NF: Сите зависности се од клучот / 
     1213NF: Нема транзитивни зависности
     122
     123Декомпозиција: / (нема потреба)
     124
     125=== **Нови релации по нормализација** ===
    84126
    85127CREATE TABLE **countries** ( 
     
    93135);
    94136
     137CREATE TABLE **roles** ( 
     138 **role_id** SERIAL PRIMARY KEY, 
     139 **role_name** VARCHAR(50) NOT NULL 
     140);
     141
    95142CREATE TABLE **statuses** ( 
    96143 **status_code** VARCHAR(20) PRIMARY KEY, 
    97144 **status_description** TEXT 
    98145);
    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 );