Changes between Version 1 and Version 2 of Normalization_v2


Ignore:
Timestamp:
08/29/25 13:49:30 (8 days ago)
Author:
212028
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Normalization_v2

    v1 v2  
    1 За цел имаме оптимизација на базата така што ќе се отстранат редундантни податоци, отстранат какви било аномалии при додавање, бришење или ажурирање на податоци ќе го постигнеме со помош на функционални зависности, откривање на соодветен покривач и нормализација каде што ќе целиме до BCNF нормална форма.Анализата ќе биде извршувана на претпоследната верзија(18-та верзија) од базата соодветно со последната ревизија направена од сите три члена на тимот од иницијалниот проект.Бидејќи чуваме многу податоци и тоа би резултирало во преголема почетна релација за да ја отпочнеме нормализацијата ќе биде поделена на 3 помали релации соодветно според 3-те корисници на апликацијата.Исто така изоставен е атрибутот m_grad со оглед на тоа што апликацијата се однесува само за град Скопје, па ја губи смислата исто споменатиот атрибут.Покрај тоа ентитетите Возачи, Кондуктор и Патник ќе станат преклопувачки специјализиарни поткласи за соодветните ентитети Корисник и Вработен.Од пример табелите за секоја од 3-те корисници ќе ги изоставиме колоните кои ги претставуваат атрибутите за самите корисници бидејќи многу место окупираат, а истите се подразбираат со оглед на тоа што главната намена за апликацијата е 3-та типа корисници.Трите релации во прашање се:
     1За цел имаме оптимизација на базата така што ќе се отстранат редундантни податоци, отстранат какви било аномалии при додавање, бришење или ажурирање на податоци ќе го постигнеме со помош на функционални зависности, откривање на соодветен покривач и нормализација каде што ќе целиме до BCNF нормална форма.Анализата ќе биде извршувана на претпоследната верзија од базата соодветно со последната ревизија направена од сите три члена на тимот од иницијалниот проект.Бидејќи чуваме многу податоци и тоа би резултирало во преголема почетна релација за да ја отпочнеме нормализацијата ќе биде поделена на 3 помали релации соодветно според 3-те корисници на апликацијата.Исто така изоставен е атрибутот m_grad со оглед на тоа што апликацијата се однесува само за град Скопје, па ја губи смислата исто споменатиот атрибут.Покрај тоа ентитетите Возачи, Кондуктор и Патник ќе станат преклопувачки специјализиарни поткласи за соодветните ентитети Корисник и Вработен.Од пример табелите за секоја од 3-те корисници ќе ги изоставиме колоните кои ги претставуваат атрибутите за самите корисници бидејќи многу место окупираат, а истите се подразбираат со оглед на тоа што главната намена за апликацијата е 3-та типа корисници.Трите релации во прашање се:
    22        * Реализирани линии од возачи
    33        * Реализирани контроли
     
    5252**R1**={inl_id, inl_datum_pocetok, inl_datum_kraj, vozac_k_id, a_registracija, a_seriski_broj, a_broj_sedista, li_id, li_ime, li_pravec}
    5353
    54 **R2**={vozac_k_id, vozac_k_ime, vozac_k_adresa, vozac_k_email, vozac_k_telefon, vozac_k_is_admin, vozac_k_lozinka, vozac_v_plata, vozac_v_datum_vrab, vozac_v_datum_prekin_vrab} во 3NF и BCNF
     54**Vozac**={vozac_k_id, vozac_k_ime, vozac_k_adresa, vozac_k_email, vozac_k_telefon, vozac_k_is_admin, vozac_k_lozinka, vozac_v_plata, vozac_v_datum_vrab, vozac_v_datum_prekin_vrab} во 3NF и BCNF
    5555
    5656**a_registracija** -> a_seriski_broj, a_broj_sedista
     
    5858**R1_1**={inl_id, inl_datum_pocetok, inl_datum_kraj, vozac_k_id, a_registracija, li_id, li_ime, li_pravec}
    5959
    60 **R1_2**={ a_registracija, a_seriski_broj, a_broj_sedista} во 3NF и BCNF
    61 
    62 **li_id** -> li_ime, li_pravec
    63 
    64 **R1_1_1**={inl_id, inl_datum_pocetok, inl_datum_kraj, vozac_k_id, a_registracija, li_id} во 3NF и BCNF
    65 
    66 **R1_1_2**={li_id, li_ime, li_pravec} во 3NF и BCNF
     60**Avtobus**={ a_registracija, a_seriski_broj, a_broj_sedista} во 3NF и BCNF
     61
     62**li_id** -> li_ime, li_pravec
     63
     64**Istanca_Na_Linija**={inl_id, inl_datum_pocetok, inl_datum_kraj, vozac_k_id, a_registracija, li_id} во 3NF и BCNF
     65
     66**Linija**={li_id, li_ime, li_pravec} во 3NF и BCNF
    6767
    6868= Реализирани контроли =
     
    7373==== Функционални зависности ====
    7474
    75 **Konduktor_k_id** -> konduktor_k_ime, konduktor_k_adresa, konduktor_k_email, konduktor_k_telefon, konduktor_k_is_admin, konduktor_k_lozinka, konduktor_v_plata, konduktor_v_datum_vrab,konduktor_v_datum_prekin_vrab
    76 
    77 **Kontroli_id** -> kontrola_datum, Konduktor_k_id, inl_id
    78 
    79 **Inl_id** -> inl_datum_pocetok, inl_datum_kraj, a_registracija, li_id
    80 
    81 **a_registracija** -> a_seriski_broj, a_broj_sedista
    82 
    83 **li_id** -> li_ime, li_pravec
    84 
    85 **Kz_id** -> kz_dokument, kz_datum, kz_iznos, kz_plateno, kz_datum_plateno, kontrola_id, konduktor_k_id
     75**konduktor_k_id** -> konduktor_k_ime, konduktor_k_adresa, konduktor_k_email, konduktor_k_telefon, konduktor_k_is_admin, konduktor_k_lozinka, konduktor_v_plata, konduktor_v_datum_vrab,konduktor_v_datum_prekin_vrab
     76
     77**kontroli_id** -> kontrola_datum, Konduktor_k_id, inl_id
     78
     79**inl_id** -> inl_datum_pocetok, inl_datum_kraj, a_registracija, li_id
     80
     81**a_registracija** -> a_seriski_broj, a_broj_sedista
     82
     83**li_id** -> li_ime, li_pravec
     84
     85**kz_id** -> kz_dokument, kz_datum, kz_iznos, kz_plateno, kz_datum_plateno, kontrola_id, konduktor_k_id
    8686
    8787**kzr_kz_id** -> patnik_k_id
     
    106106==== Покривач ==== 
    107107
    108 **{Kz_id}+**={kz_dokument, kz_datum, kz_iznos, kz_plateno, kz_datum_plateno, patnik_k_id, kontrola_id, konduktor_k_id, konduktor_k_ime, konduktor_k_adresa, konduktor_k_email, konduktor_k_telefon, konduktor_k_is_admin, konduktor_k_lozinka, konduktor_v_plata, konduktor_v_datum_vrab, konduktor_v_datum_prekin_vrab, kontrola_datum, Inl_id, inl_datum_pocetok, inl_datum_kraj, a_registracija, li_id, a_seriski_broj, a_broj_sedista, li_ime, li_pravec, patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka, kz_dokument, kz_datum, kz_iznos, kz_plateno, kz_datum_plateno, kontrola_id, konduktor_k_id, kzn_ime, kzn_adresa, kzn_telefon}
     108**{kz_id}+**={kz_dokument, kz_datum, kz_iznos, kz_plateno, kz_datum_plateno, patnik_k_id, kontrola_id, konduktor_k_id, konduktor_k_ime, konduktor_k_adresa, konduktor_k_email, konduktor_k_telefon, konduktor_k_is_admin, konduktor_k_lozinka, konduktor_v_plata, konduktor_v_datum_vrab, konduktor_v_datum_prekin_vrab, kontrola_datum, Inl_id, inl_datum_pocetok, inl_datum_kraj, a_registracija, li_id, a_seriski_broj, a_broj_sedista, li_ime, li_pravec, patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka, kz_dokument, kz_datum, kz_iznos, kz_plateno, kz_datum_plateno, kontrola_id, konduktor_k_id, kzn_ime, kzn_adresa, kzn_telefon}
    109109
    110110==== Кандидат клуч ====
     
    121121==== Декомпозиција ====
    122122
    123 **Kontroli_id** -> kontrola_datum, Konduktor_k_id, inl_id
     123**kontroli_id** -> kontrola_datum, konduktor_k_id, inl_id
    124124
    125125**R1**={konduktor_k_id, konduktor_k_ime, konduktor_k_adresa, konduktor_k_email, konduktor_k_telefon, konduktor_k_is_admin, konduktor_k_lozinka, konduktor_v_plata, konduktor_v_datum_vrab, konduktor_v_datum_prekin_vrab, kontroli_id, kz_id, kz_dokument, kz_datum, kz_iznos, kz_plateno, kz_datum_plateno, kzn_ime, kzn_adresa, kzn_telefon, patnik_k_id, patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka}
    126126
    127 **R2**={kontroli_id, kontrola_datum, Konduktor_k_id, inl_id, inl_datum_pocetok, inl_datum_kraj, a_registracija, a_seriski_broj, a_broj_sedista, li_id, li_ime, li_pravec}
    128 
    129 **Inl_id** -> inl_datum_pocetok, inl_datum_kraj, a_registracija, li_id
    130 
    131 **R2_1**={kontroli_id, kontrola_datum, Konduktor_k_id, inl_id}
    132 
    133 **R2_2**={Inl_id, inl_datum_pocetok, inl_datum_kraj, a_registracija, a_seriski_broj, a_broj_sedista, li_id, li_ime, li_pravec}
    134 
    135 **a_registracija** -> a_seriski_broj, a_broj_sedista
    136 
    137 **R2_1_1**={Inl_id, inl_datum_pocetok, inl_datum_kraj, a_registracija, li_id, li_ime, li_pravec}
    138 
    139 **R2_1_2**={a_registracija, a_seriski_broj, a_broj_sedista}
    140 
    141 **li_id** -> li_ime, li_pravec
    142 
    143 **R2_1_1_1**={Inl_id, inl_datum_pocetok, inl_datum_kraj, a_registracija, li_id}
    144 
    145 **R2_1_1_2**={li_id, li_ime, li_pravec}
    146 
    147 **Konduktor_k_id** -> konduktor_k_ime, konduktor_k_adresa, konduktor_k_email, konduktor_k_telefon, konduktor_k_is_admin, konduktor_k_lozinka, konduktor_v_plata, konduktor_v_datum_vrab, konduktor_v_datum_prekin_vrab
     127**R2**={kontrola_id, kontrola_datum, konduktor_k_id, inl_id, inl_datum_pocetok, inl_datum_kraj, a_registracija, a_seriski_broj, a_broj_sedista, li_id, li_ime, li_pravec}
     128
     129**inl_id** -> inl_datum_pocetok, inl_datum_kraj, a_registracija, li_id
     130
     131**Kontroli**={kontrola_id, kontrola_datum, konduktor_k_id, inl_id} во 3NF и BCNF
     132
     133**R2_2**={inl_id, inl_datum_pocetok, inl_datum_kraj, a_registracija, a_seriski_broj, a_broj_sedista, li_id, li_ime, li_pravec}
     134
     135**a_registracija** -> a_seriski_broj, a_broj_sedista
     136
     137**R2_2_1**={inl_id, inl_datum_pocetok, inl_datum_kraj, a_registracija, li_id, li_ime, li_pravec}
     138
     139**Avtobus**={a_registracija, a_seriski_broj, a_broj_sedista} во 3NF и BCNF
     140
     141**li_id** -> li_ime, li_pravec
     142
     143**Istanca_Na_Linija**={inl_id, inl_datum_pocetok, inl_datum_kraj, a_registracija, li_id} во 3NF и BCNF
     144
     145**Linija**={li_id, li_ime, li_pravec} во 3NF и BCNF
     146
     147**konduktor_k_id** -> konduktor_k_ime, konduktor_k_adresa, konduktor_k_email, konduktor_k_telefon, konduktor_k_is_admin, konduktor_k_lozinka, konduktor_v_plata, konduktor_v_datum_vrab, konduktor_v_datum_prekin_vrab
    148148
    149149**R1_1**={konduktor_k_id, kontroli_id, kz_id, kz_dokument, kz_datum, kz_iznos, kz_plateno, kz_datum_plateno, kzn_ime, kzn_adresa, kzn_telefon, patnik_k_id, patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka}
    150150
    151 **R1_2**={konduktor_k_id -> konduktor_k_ime, konduktor_k_adresa, konduktor_k_email, konduktor_k_telefon, konduktor_k_is_admin, konduktor_k_lozinka, konduktor_v_plata, konduktor_v_datum_vrab, konduktor_v_datum_prekin_vrab}
     151**Konduktor**={konduktor_k_id -> konduktor_k_ime, konduktor_k_adresa, konduktor_k_email, konduktor_k_telefon, konduktor_k_is_admin, konduktor_k_lozinka, konduktor_v_plata, konduktor_v_datum_vrab, konduktor_v_datum_prekin_vrab} во 3NF и BCNF
    152152
    153153**kzr_kz_id** -> patnik_k_id
     
    159159**patnik_k_id** -> patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka
    160160
    161 **R1_1_2_1**= {kzr_kz_id, patnik_k_id}
    162 
    163 **R1_1_2_2**={patnik_k_id, patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka}
     161**Kazna_Za_Registriran**= {kzr_kz_id, patnik_k_id} во 3NF и BCNF
     162
     163**Patnik**={patnik_k_id, patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka} во 3NF и BCNF
    164164
    165165**kzn_kz_id** -> kzn_ime, kzn_adresa, kzn_telefon
    166166
    167 **R1_1_1_1**={konduktor_k_id, kontroli_id,kz_id, kz_dokument, kz_datum, kz_iznos, kz_plateno, kz_datum_plateno}
    168 
    169 **R1_1_1_2**={kz_id, kzn_ime, kzn_adresa, kzn_telefon}
     167**Kazna**={konduktor_k_id, kontroli_id,kz_id, kz_dokument, kz_datum, kz_iznos, kz_plateno, kz_datum_plateno} во 3NF и BCNF
     168
     169**Kazna_Za_Neregistriran**={kz_id, kzn_ime, kzn_adresa, kzn_telefon} во 3NF и BCNF
    170170
    171171= Реализирани возења од патници =
     
    176176==== Функционални зависности ====
    177177
    178 **Patnik_k_id** -> patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka
    179 
    180 **B_id** -> b_status, b_datum_na_kupuvanje, b_datum_istekuvanje, tb_id, patnik_k_id
    181 
    182 **Tb_id** -> tb_ime, tb_trajnost, tb_cena
    183 
    184 **Vozenje_id** -> vozenje_start, vozenje_end, vozenje_status, b_id, patnik_k_id, pnl_id
    185 
    186 **Pnl_id** -> pnl_reden_broj, li_id, p_id
    187 
    188 **Li_id** -> li_ime, li_pravec
    189 
    190 **P_id** -> p_ime, m_id
    191 
    192 **M_id** -> m_opstina, m_ulica
     178**patnik_k_id** -> patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka
     179
     180**b_id** -> b_status, b_datum_na_kupuvanje, b_datum_istekuvanje, tb_id, patnik_k_id
     181
     182**tb_id** -> tb_ime, tb_trajnost, tb_cena
     183
     184**vozenje_id** -> vozenje_start, vozenje_end, vozenje_status, b_id, patnik_k_id, pnl_id
     185
     186**pnl_id** -> pnl_reden_broj, li_id, p_id
     187
     188**li_id** -> li_ime, li_pravec
     189
     190**p_id** -> p_ime, m_id
     191
     192**m_id** -> m_opstina, m_ulica
    193193
    194194
    195195====== Лево ======
    196196
    197 Vozenje_id
     197vozenje_id
    198198
    199199====== Лево и десно ======
    200200
    201 Patnik_k_id, b_id, pnl_id, li_id, p_id, m_id
     201patnik_k_id, b_id, pnl_id, li_id, p_id, m_id
    202202
    203203====== Десно ======
     
    208208==== Покривач ====
    209209
    210 **{Vozenje_id}+**={patnik_k_id, patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka, b_id, b_status, b_datum_na_kupuvanje, b_datum_istekuvanje, tb_id, tb_ime, tb_trajnost, tb_cena, vozenje_id, vozenje_start, vozenje_end, vozenje_status, pnl_id, pnl_reden_broj, p_id, p_ime, m_id, m_opstina, m_ulica, li_id, li_ime, li_pravec}
     210**{vozenje_id}+**={patnik_k_id, patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka, b_id, b_status, b_datum_na_kupuvanje, b_datum_istekuvanje, tb_id, tb_ime, tb_trajnost, tb_cena, vozenje_id, vozenje_start, vozenje_end, vozenje_status, pnl_id, pnl_reden_broj, p_id, p_ime, m_id, m_opstina, m_ulica, li_id, li_ime, li_pravec}
    211211
    212212
     
    225225==== Декомпозиција ====
    226226
    227 **Patnik_k_id** -> patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka
     227**patnik_k_id** -> patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka
    228228
    229229**R1**={patnik_k_id, b_id, b_status, b_datum_na_kupuvanje, b_datum_istekuvanje, tb_id, tb_ime, tb_trajnost, tb_cena, vozenje_id, vozenje_start, vozenje_end, vozenje_status, pnl_id, pnl_reden_broj, p_id, p_ime, m_id, m_opstina, m_ulica, li_id, li_ime, li_pravec}
    230230
    231 **R2**={patnik_k_id, patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka}
    232 
    233 **B_id** -> b_status, b_datum_na_kupuvanje, b_datum_istekuvanje, tb_id, patnik_k_id
     231**Patnik**={patnik_k_id, patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka} во 3NF и BCNF
     232
     233**b_id** -> b_status, b_datum_na_kupuvanje, b_datum_istekuvanje, tb_id, patnik_k_id
    234234
    235235**R1_1**={patnik_k_id, b_id, vozenje_id, vozenje_start, vozenje_end, vozenje_status, pnl_id, pnl_reden_broj, p_id, p_ime, m_id, m_opstina, m_ulica, li_id, li_ime, li_pravec}
     
    237237**R1_2**={b_id, b_status, b_datum_na_kupuvanje, b_datum_istekuvanje, tb_id, tb_ime, tb_trajnost, tb_cena, patnik_k_id}
    238238
    239 **Tb_id** -> tb_ime, tb_trajnost, tb_cena
    240 
    241 **R1_2_1**={b_id, b_status, b_datum_na_kupuvanje, b_datum_istekuvanje, tb_id, patnik_k_id}
    242 
    243 **R1_2_2**={tb_id, tb_ime, tb_trajnost, tb_cena}
    244 
    245 **Vozenje_id** -> vozenje_start, vozenje_end, vozenje_status, b_id, patnik_k_id, pnl_id
    246 
    247 **R1_1_1**={patnik_k_id, b_id, vozenje_id, vozenje_start, vozenje_end, vozenje_status, pnl_id}
     239**tb_id** -> tb_ime, tb_trajnost, tb_cena
     240
     241**Bilet**={b_id, b_status, b_datum_na_kupuvanje, b_datum_istekuvanje, tb_id, patnik_k_id} во 3NF и BCNF
     242
     243**Tip_Bilet**={tb_id, tb_ime, tb_trajnost, tb_cena} во 3NF и BCNF
     244
     245**vozenje_id** -> vozenje_start, vozenje_end, vozenje_status, b_id, patnik_k_id, pnl_id
     246
     247**Vozenje**={patnik_k_id, b_id, vozenje_id, vozenje_start, vozenje_end, vozenje_status, pnl_id, inl_id} во 3NF и BCNF
    248248
    249249**R1_1_2**={pnl_id, pnl_reden_broj, p_id, p_ime, m_id, m_opstina, m_ulica, li_id, li_ime, li_pravec}
    250250
    251 **Li_id** -> li_ime, li_pravec
     251**li_id** -> li_ime, li_pravec
    252252
    253253**R1_1_2_1**={pnl_id, pnl_reden_broj, p_id, p_ime, m_id, m_opstina, m_ulica, li_id}
    254254
    255 **R1_1_2_2**={li_id, li_ime, li_pravec}
    256 
    257 **P_id** -> p_ime, m_id
    258 
    259 **R1_1_2_1_1**={pnl_id, pnl_reden_broj, p_id, li_id}
     255**Linija**={li_id, li_ime, li_pravec} во 3NF и BCNF
     256
     257**p_id** -> p_ime, m_id
     258
     259**Postojka_Na_Linija**={pnl_id, pnl_reden_broj, p_id, li_id} во 3NF и BCNF
    260260
    261261**R1_1_2_1_2**= {p_id, p_ime, m_id, m_opstina, m_ulica}
    262262
    263 **M_id** -> m_opstina, m_ulica
    264 
    265 **R1_1_2_1_2_1**= {p_id, p_ime, m_id}
    266 
    267 **R1_1_2_1_2_2**={m_id, m_opstina, m_ulica}
     263**m_id** -> m_opstina, m_ulica
     264
     265**Postojka**= {p_id, p_ime, m_id} во 3NF и BCNF
     266
     267**Mesto**={m_id, m_opstina, m_ulica} во 3NF и BCNF