Changes between Version 1 and Version 2 of Normalization_v2
- Timestamp:
- 08/29/25 13:49:30 (8 days ago)
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-та типа корисници.Трите релации во прашање се: 2 2 * Реализирани линии од возачи 3 3 * Реализирани контроли … … 52 52 **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} 53 53 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 и BCNF54 **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 55 55 56 56 **a_registracija** -> a_seriski_broj, a_broj_sedista … … 58 58 **R1_1**={inl_id, inl_datum_pocetok, inl_datum_kraj, vozac_k_id, a_registracija, li_id, li_ime, li_pravec} 59 59 60 ** R1_2**={ a_registracija, a_seriski_broj, a_broj_sedista} во 3NF и BCNF61 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 и BCNF65 66 ** R1_1_2**={li_id, li_ime, li_pravec} во 3NF и BCNF60 **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 67 67 68 68 = Реализирани контроли = … … 73 73 ==== Функционални зависности ==== 74 74 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_vrab76 77 ** Kontroli_id** -> kontrola_datum, Konduktor_k_id, inl_id78 79 ** Inl_id** -> inl_datum_pocetok, inl_datum_kraj, a_registracija, li_id80 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_id75 **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 86 86 87 87 **kzr_kz_id** -> patnik_k_id … … 106 106 ==== Покривач ==== 107 107 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} 109 109 110 110 ==== Кандидат клуч ==== … … 121 121 ==== Декомпозиција ==== 122 122 123 ** Kontroli_id** -> kontrola_datum, Konduktor_k_id, inl_id123 **kontroli_id** -> kontrola_datum, konduktor_k_id, inl_id 124 124 125 125 **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} 126 126 127 **R2**={kontrol i_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_id130 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_vrab127 **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 148 148 149 149 **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} 150 150 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 152 152 153 153 **kzr_kz_id** -> patnik_k_id … … 159 159 **patnik_k_id** -> patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka 160 160 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 164 164 165 165 **kzn_kz_id** -> kzn_ime, kzn_adresa, kzn_telefon 166 166 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 170 170 171 171 = Реализирани возења од патници = … … 176 176 ==== Функционални зависности ==== 177 177 178 ** Patnik_k_id** -> patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka179 180 ** B_id** -> b_status, b_datum_na_kupuvanje, b_datum_istekuvanje, tb_id, patnik_k_id181 182 ** Tb_id** -> tb_ime, tb_trajnost, tb_cena183 184 ** Vozenje_id** -> vozenje_start, vozenje_end, vozenje_status, b_id, patnik_k_id, pnl_id185 186 ** Pnl_id** -> pnl_reden_broj, li_id, p_id187 188 ** Li_id** -> li_ime, li_pravec189 190 ** P_id** -> p_ime, m_id191 192 ** M_id** -> m_opstina, m_ulica178 **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 193 193 194 194 195 195 ====== Лево ====== 196 196 197 Vozenje_id197 vozenje_id 198 198 199 199 ====== Лево и десно ====== 200 200 201 Patnik_k_id, b_id, pnl_id, li_id, p_id, m_id201 patnik_k_id, b_id, pnl_id, li_id, p_id, m_id 202 202 203 203 ====== Десно ====== … … 208 208 ==== Покривач ==== 209 209 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} 211 211 212 212 … … 225 225 ==== Декомпозиција ==== 226 226 227 ** Patnik_k_id** -> patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka227 **patnik_k_id** -> patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka 228 228 229 229 **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} 230 230 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_id231 **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 234 234 235 235 **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} … … 237 237 **R1_2**={b_id, b_status, b_datum_na_kupuvanje, b_datum_istekuvanje, tb_id, tb_ime, tb_trajnost, tb_cena, patnik_k_id} 238 238 239 ** Tb_id** -> tb_ime, tb_trajnost, tb_cena240 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_id246 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 248 248 249 249 **R1_1_2**={pnl_id, pnl_reden_broj, p_id, p_ime, m_id, m_opstina, m_ulica, li_id, li_ime, li_pravec} 250 250 251 ** Li_id** -> li_ime, li_pravec251 **li_id** -> li_ime, li_pravec 252 252 253 253 **R1_1_2_1**={pnl_id, pnl_reden_broj, p_id, p_ime, m_id, m_opstina, m_ulica, li_id} 254 254 255 ** R1_1_2_2**={li_id, li_ime, li_pravec}256 257 ** P_id** -> p_ime, m_id258 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 260 260 261 261 **R1_1_2_1_2**= {p_id, p_ime, m_id, m_opstina, m_ulica} 262 262 263 ** M_id** -> m_opstina, m_ulica264 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