Changes between Initial Version and Version 1 of Нормализација и подобрувања на дизајнот


Ignore:
Timestamp:
08/25/25 20:27:46 (3 days ago)
Author:
183284
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Нормализација и подобрувања на дизајнот

    v1 v1  
     1== Нормализација и подобрувања на дизајнот ==
     2
     3Во оваа секција е прикажана нормализацијата на целокупниот ER модел до трета нормална форма (3NF), за да се отстранат зависностите, се избегне дуплирање на податоци и да се подобри интегритетот.
     4
     5[attachment:normlizacija_ddl_schema.sql]
     6
     7=== Објаснување на нормализацијата ===
     8
     9ННормализацијата беше извршена како анализа на целиот модел составен од 9 табели, при што се разгледуваа зависностите помеѓу табелите, а не само во рамки на секоја одделно. На тој начин се овозможи откривање на заеднички функционални зависности и елиминирање на можни дуплирани атрибути.
     10
     11Клучни подобрувања:
     12
     13-Централизација на времетраењето на пакетите преку табелата **tip_vremetranje**.
     14-Подобрување на интегритетот на податоците со користење на foreign keys помеѓу **clenstvo**, **clenovi**, **paketi** и **tip_vremetranje**.
     15-Елиминирање на можни транзитивни зависности (пример: **clenovi** → **clenstvo** → **paketi**).
     16-Воведување на поврзувачки табели за многу-на-многу релации (**trenira**, **raboti**).
     17
     18Со оваа нормализација до 3NF, се подобрува конзистентноста, се намалува дуплирањето на податоци и се поедноставува одржувањето на базата.
     19
     20
     21=== Анализа по табела ===
     22**clenovi**(**clenid**, **ime**, **prezime**, **email**, **broj_poseti**)
     23
     24Функционални зависности:
     25
     26clenid → ime, prezime, email, broj_poseti
     27
     28email → clenid (уникатност)
     29
     301NF: Сите вредности се атомски.[[br]]
     312NF: Сите атрибути зависат од примарниот клуч.[[br]]
     323NF: Нема транзитивни зависности.
     33
     34Декомпозиција: / (нема потреба)
     35
     36**paketi**(**paketid**, **ime**, **cena**)
     37
     38Функционални зависности:
     39
     40**paketid** → **ime**, **cena**
     41
     421NF: Атомски вредности.[[br]]
     432NF: Сите зависат од примарниот клуч.[[br]]
     443NF: Нема транзитивни зависности.
     45
     46Декомпозиција: / (нема потреба)
     47
     48**tip_vremetranje**(**vremetraenjeid**, **vremetraenjedenovi**, **ime**)
     49
     50Функционални зависности:
     51
     52**vremetraenjeid** → **vremetraenjedenovi**, **ime**
     53
     541NF: Атомски вредности.[[br]]
     552NF: Сите зависности се од примарниот клуч.[[br]]
     563NF: Нема транзитивни зависности.
     57
     58Декомпозиција: / (нема потреба)
     59
     60**clenstvo**(**clenstvoid**, **clenid**, **paketid**, **vremetraenjeid**, **start_datum**)
     61
     62Функционални зависности:
     63
     64**clenstvoid** → **clenid**, **paketid**, **vremetraenjeid**, **start_datum**
     65
     66**clenid** → **ime**, **prezime**, **email** (транзитивна зависност ако би биле во иста табела)
     67
     681NF: Атомски вредности.[[br]]
     692NF: Сите зависности се од примарниот клуч.[[br]]
     703NF: Со референтни клучеви се елиминира транзитивноста.[[br]]
     71
     72Декомпозиција:
     73
     74**clenstvo**(**clenstvoid**, **clenid**, **paketid**, **vremetraenjeid**, **start_datum**)
     75
     76**clenovi**(**clenid**, **ime**, **prezime**, **email**, **broj_poseti**)
     77
     78**paketi**(**paketid**, **ime**, **cena**)
     79
     80**tip_vremetranje**(**vremetraenjeid**, **vremetraenjedenovi**,**ime**)
     81
     82**lokacii**(**lokacijaid**, **ime**)
     83
     84Функционални зависности:
     85
     86**lokacijaid** → **ime**
     87
     881NF/2NF/3NF: Веќе е во 3NF.
     89
     90**poseti**(**posetaid**, **clenid**, **lokacijaid**, **datum**)
     91
     92Функционални зависности:
     93
     94**posetaid**→ **clenid**, **lokacijaid**, **datum**
     95
     961NF: Атомски вредности.[[br]]
     972NF: Сите зависности од клучот.[[br]]
     983NF: Нема транзитивни зависности.[[br]]
     99
     100**vraboteni**(**vrabotenid**, **ime**, **pozicija**)
     101
     102Функционални зависности:
     103
     104**vrabotenid** → **ime**, **pozicija**
     105
     1061NF/2NF/3NF: Веќе е нормализирана.
     107
     108**trenira**(**clenid**, **vrabotenid**)
     109
     110Функционални зависности:
     111
     112(**clenid**, **vrabotenid**) → { } (само примарен клуч)
     113
     1141NF/2NF/3NF: Релација за многу-на-многу.
     115
     116**raboti**(**vrabotenid**, **lokacijaid**)
     117
     118Функционални зависности:
     119
     120(**vrabotenid**, **lokacijaid**) → { }
     121
     1221NF/2NF/3NF: Веќе е нормализирана.
     123
     124=== **Нови релации по нормализација** ===
     125Во однос на првичниот дизајн, не беше потребно да се воведат дополнителни табели освен оние што веќе постојат (tip_vremetranje за времетраење, trenira и raboti за многу-на-многу врски).
     126
     127CREATE TABLE **tip_vremetranje** (
     128    **vremetraenjeid** SERIAL PRIMARY KEY, [[br]]
     129    **vremetraenjedenovi** INT NOT NULL,  [[br]]
     130    **ime** VARCHAR(50) NOT NULL
     131);
     132
     133
     134Ова овозможува поголема флексибилност и интегритет на податоците.