wiki:Normalization_v2

За цел имаме оптимизација на базата така што ќе се отстранат редундантни податоци, отстранат какви било аномалии при додавање, бришење или ажурирање на податоци ќе го постигнеме со помош на функционални зависности, откривање на соодветен покривач и нормализација каде што ќе целиме до BCNF нормална форма.Анализата ќе биде извршувана на претпоследната верзија(18-та верзија) од базата соодветно со последната ревизија направена од сите три члена на тимот од иницијалниот проект.Бидејќи чуваме многу податоци и тоа би резултирало во преголема почетна релација за да ја отпочнеме нормализацијата ќе биде поделена на 3 помали релации соодветно според 3-те корисници на апликацијата.Исто така изоставен е атрибутот m_grad со оглед на тоа што апликацијата се однесува само за град Скопје, па ја губи смислата исто споменатиот атрибут.Покрај тоа ентитетите Возачи, Кондуктор и Патник ќе станат преклопувачки специјализиарни поткласи за соодветните ентитети Корисник и Вработен.Од пример табелите за секоја од 3-те корисници ќе ги изоставиме колоните кои ги претставуваат атрибутите за самите корисници бидејќи многу место окупираат, а истите се подразбираат со оглед на тоа што главната намена за апликацијата е 3-та типа корисници.Трите релации во прашање се:

  • Реализирани линии од возачи
  • Реализирани контроли
  • Реализирани возења од патници

Реализирани линии од возачи

R={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, inl_id, inl_datum_pocetok, inl_datum_kraj, a_registracija, a_seriski_broj, a_broj_sedista, li_id, li_ime, li_pravec}

Функционални зависности

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

inl_id -> inl_datum_pocetok, inl_datum_kraj, vozac_k_id, a_registracija, li_id

a_registracija -> a_seriski_broj, a_broj_sedista

li_id -> li_ime, li_pravec

Лево

inl_id

Лево и десно

vozac_k_id, a_registracija, li_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, inl_datum_pocetok, inl_datum_kraj, a_seriski_broj, a_broj_sedista, li_ime, li_pravec

Покривач

{inl_id}+={inl_datum_pocetok, inl_datum_kraj, 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 , a_registracija, a_seriski_broj, a_broj_sedista, li_id, li_ime, li_pravec}

Кандидат клуч

inl_id

1NF е задоволена бидејќи немаме мултивредносни атрибути

2NF е задоволена бидејќи немаме парцијални зависности

3NF е нарушена бидејќи имаме транзитивни зависности, па така не е задоволена ни BCNF кон која целиме бидејќи потребно е да е задоволена нормализиацијата која и претходи во случајов 3NF

Декомпозиција

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

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}

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

a_registracija -> a_seriski_broj, a_broj_sedista

R1_1={inl_id, inl_datum_pocetok, inl_datum_kraj, vozac_k_id, a_registracija, li_id, li_ime, li_pravec}

R1_2={ a_registracija, a_seriski_broj, a_broj_sedista} во 3NF и BCNF

li_id -> li_ime, li_pravec

R1_1_1={inl_id, inl_datum_pocetok, inl_datum_kraj, vozac_k_id, a_registracija, li_id} во 3NF и BCNF

R1_1_2={li_id, li_ime, li_pravec} во 3NF и BCNF

Реализирани контроли

R={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, kontroli_datum, inl_id, inl_datum_pocetok, inl_datum_kraj, a_registracija, a_seriski_broj, a_broj_sedista, li_id, li_ime, li_pravec, 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}

Функционални зависности

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 -> kontrola_datum, Konduktor_k_id, inl_id

Inl_id -> inl_datum_pocetok, inl_datum_kraj, a_registracija, li_id

a_registracija -> a_seriski_broj, a_broj_sedista

li_id -> li_ime, li_pravec

Kz_id -> kz_dokument, kz_datum, kz_iznos, kz_plateno, kz_datum_plateno, kontrola_id, konduktor_k_id

kzr_kz_id -> patnik_k_id

kzn_kz_id -> 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

Лево

kz_id

Лево и десно

кonduktor_k_id, kontroli_id, inl_id, a_registracija, li_id, patnik_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_datum_pocetok, inl_datum_kraj, 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

Покривач

{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}

Кандидат клуч

kz_id

1NF е задоволена бидејќи немаме мултивредносни атрибути

2NF е задоволена бидејќи немаме парцијални зависности

3NF е нарушена бидејќи имаме транзитивни зависности, па така не е задоволена ни BCNF кон која целиме бидејќи потребно е да е задоволена нормализиацијата која и претходи во случајов 3NF

Декомпозиција

Kontroli_id -> kontrola_datum, Konduktor_k_id, inl_id

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}

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}

Inl_id -> inl_datum_pocetok, inl_datum_kraj, a_registracija, li_id

R2_1={kontroli_id, kontrola_datum, Konduktor_k_id, inl_id}

R2_2={Inl_id, inl_datum_pocetok, inl_datum_kraj, a_registracija, a_seriski_broj, a_broj_sedista, li_id, li_ime, li_pravec}

a_registracija -> a_seriski_broj, a_broj_sedista

R2_1_1={Inl_id, inl_datum_pocetok, inl_datum_kraj, a_registracija, li_id, li_ime, li_pravec}

R2_1_2={a_registracija, a_seriski_broj, a_broj_sedista}

li_id -> li_ime, li_pravec

R2_1_1_1={Inl_id, inl_datum_pocetok, inl_datum_kraj, a_registracija, li_id}

R2_1_1_2={li_id, li_ime, li_pravec}

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

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}

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}

kzr_kz_id -> patnik_k_id

R1_1_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}

R1_1_2={kzr_kz_id, patnik_k_id, patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka}

patnik_k_id -> patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka

R1_1_2_1= {kzr_kz_id, patnik_k_id}

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}

kzn_kz_id -> kzn_ime, kzn_adresa, kzn_telefon

R1_1_1_1={konduktor_k_id, kontroli_id,kz_id, kz_dokument, kz_datum, kz_iznos, kz_plateno, kz_datum_plateno}

R1_1_1_2={kz_id, kzn_ime, kzn_adresa, kzn_telefon}

Реализирани возења од патници

R={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}

Функционални зависности

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, patnik_k_id

Tb_id -> tb_ime, tb_trajnost, tb_cena

Vozenje_id -> vozenje_start, vozenje_end, vozenje_status, b_id, patnik_k_id, pnl_id

Pnl_id -> pnl_reden_broj, li_id, p_id

Li_id -> li_ime, li_pravec

P_id -> p_ime, m_id

M_id -> m_opstina, m_ulica

Лево

Vozenje_id

Лево и десно

Patnik_k_id, b_id, pnl_id, li_id, p_id, m_id

Десно

patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka, b_status, b_datum_na_kupuvanje, b_datum_istekuvanje, tb_ime, tb_trajnost, tb_cena, vozenje_start, vozenje_end, vozenje_status, pnl_reden_broj, li_ime, li_pravec, p_ime, m_opstina, m_ulica

Покривач

{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}

Кандидат клуч

vozenje_id

1NF е задоволена бидејќи немаме мултивредносни атрибути

2NF е задоволена бидејќи немаме парцијални зависности

3NF е нарушена бидејќи имаме транзитивни зависности, па така не е задоволена ни BCNF кон која целиме бидејќи потребно е да е задоволена нормализиацијата која и претходи во случајов 3NF

Декомпозиција

Patnik_k_id -> patnik_k_ime, patnik_k_adresa, patnik_k_email, patnik_k_telefon, patnik_k_is_admin, patnik_k_lozinka

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}

R2={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, patnik_k_id

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}

R1_2={b_id, b_status, b_datum_na_kupuvanje, b_datum_istekuvanje, tb_id, tb_ime, tb_trajnost, tb_cena, patnik_k_id}

Tb_id -> tb_ime, tb_trajnost, tb_cena

R1_2_1={b_id, b_status, b_datum_na_kupuvanje, b_datum_istekuvanje, tb_id, patnik_k_id}

R1_2_2={tb_id, tb_ime, tb_trajnost, tb_cena}

Vozenje_id -> vozenje_start, vozenje_end, vozenje_status, b_id, patnik_k_id, pnl_id

R1_1_1={patnik_k_id, b_id, vozenje_id, vozenje_start, vozenje_end, vozenje_status, pnl_id}

R1_1_2={pnl_id, pnl_reden_broj, p_id, p_ime, m_id, m_opstina, m_ulica, li_id, li_ime, li_pravec}

Li_id -> li_ime, li_pravec

R1_1_2_1={pnl_id, pnl_reden_broj, p_id, p_ime, m_id, m_opstina, m_ulica, li_id}

R1_1_2_2={li_id, li_ime, li_pravec}

P_id -> p_ime, m_id

R1_1_2_1_1={pnl_id, pnl_reden_broj, p_id, li_id}

R1_1_2_1_2= {p_id, p_ime, m_id, m_opstina, m_ulica}

M_id -> m_opstina, m_ulica

R1_1_2_1_2_1= {p_id, p_ime, m_id}

R1_1_2_1_2_2={m_id, m_opstina, m_ulica}

Last modified 2 days ago Last modified on 08/19/25 11:28:26
Note: See TracWiki for help on using the wiki.