Version 2 (modified by 21 hours ago) ( diff ) | ,
---|
Нормализација на база и подобрување на дизајн
Функциски зависности и нормализација
Со цел да се постигне функционален и скалабилен дизајн на базата на податоци за веб-апликацијата TravelSage, започнав со обединета релација која ги содржи сите атрибути од моделот. Оваа релација служи како почетна точка за анализа на функционските зависности. Врз основа на таа анализа, се применува нормализација до третата нормална форма (3НФ), при што секој чекор вклучува логичка декомпозиција на релациите со цел да се избегнат вишоци, аномалии при ажурирање и несоодветни зависности. Бидејќи табелата на сите атрибути би била преголема, ја поделив по функционалност на апликацијата:
- Менаџирање на дестинации и тагови
- Менаџирање на корисници и нивни активности (рецензии, преференци)
- Менаџирање на патувања (пакети, активности, резервации)
- Менаџирање на настани, временски услови
1. Менаџирање на дестинации и тагови
Почетна релација: R = { idDest, imeLokacija, opisLokacija, tipoviMesta, preporachanaSezona, prosechnaTemp, geoLokacija, drzhava, popularnost, ime, opis, idTag, tagOznaka }
Функциски зависности:
- idDest → сите атрибути што се однесуваат на една конкретна дестинација
- idTag → tagOznaka (секој таг има уникатна ознака)
Објаснување: Секој ред во оваа релација ја претставува комбинацијата од дестинација и некој нејзин таг. Бидејќи една дестинација може да има повеќе тагови, а еден таг може да се користи кај повеќе дестинации, станува збор за многу-на-многу релација меѓу idDest и idTag.
Декомпозиција:
- R1 = { idDest, imeLokacija, opisLokacija, tipoviMesta, preporachanaSezona, prosechnaTemp, geoLokacija, drzhava, popularnost, ime, opis }
- R2 = { idTag, tagOznaka }
- R3 = { idDest, idTag } → релација DESTINACII_HAS_TAGOVI
2. Менаџирање на корисници и нивни активности
Почетна релација: R = { idKorisnik, ime, prezime, ePoshta, telBr, datumRagjanje, tip, idDest, idRecenzija, idRezervacija, korisnichkoIme, kvalitet, zabeleshka, datumRecenzija, brGlasovi, idPreferenca, tipPreferenca, prioritet }
Функциски зависности:
- idKorisnik → сите лични податоци
- idKorisnik, idDest → рецензии и резервации
- idKorisnik → преференци
Објаснување: Еден корисник може да има повеќе рецензии и преференци, но секоја преференца е поврзана со само еден корисник. Резервациите и рецензиите зависат од комбинацијата на корисник и дестинација.
Декомпозиција:
- R4 = { idKorisnik, ime, prezime, ePoshta, telBr, datumRagjanje, tip }
- R5 = { idKorisnik, idDest, idRecenzija, idRezervacija, korisnichkoIme, kvalitet, zabeleshka, datumRecenzija, brGlasovi }
- R6 = { idPreferenca, idKorisnik, tipPreferenca, prioritet }
3. Менаџирање на патувања, активности и резервации
Почетна релација: R = { idPaket, imePaket, cena, pochetok, kraj, idDest, idAktivnost, imeAktivnost, informacii, kategorija, iznos, idRezervacija, idKorisnik, vremenskaTochka, status, vkupnaCena, idMeteo }
Функциски зависности:
- idPaket → основни податоци за патниот пакет
- idAktivnost → опис на активноста
- idRezervacija → информации за резервацијата
- idAktivnost, idPaket → активности во конкретен пакет
Објаснување: Секој патен пакет може да содржи повеќе активности, а секоја активност може да биде вклучена во повеќе пакети (многу-на-многу). Корисникот прави резервација за конкретен пакет, а понекогаш и за поединечна активност.
Декомпозиција:
- R7 = { idPaket, imePaket, cena, pochetok, kraj, idDest, vkupnaCena, idMeteo }
- R8 = { idAktivnost, imeAktivnost, informacii, kategorija, iznos, idDest }
- R9 = { idPaket, idAktivnost }
- R10 = { idRezervacija, idKorisnik, idPaket, vremenskaTochka, status }
- R11 = { idRezervacija, idAktivnost }
4. Менаџирање на настани и метеоролошки услови
Почетна релација: R = { idNastan, naziv, vidovi, pochetenDatum, kraenDatum, detali, idDest, idMeteo, momentTemp, sostojbaVreme, predupreduvanja, vlazhnost, veter, mesec, datum }
Функциски зависности:
- idNastan → сите податоци за настанот
- idMeteo → временски параметри
Објаснување: Секој настан е поврзан со одредена дестинација и има временски услови регистрирани преку idMeteo. Метео податоците може да се поврзат и со други настани на истата локација, така што е логично да се одвојат.
Декомпозиција:
- R12 = { idNastan, naziv, vidovi, pochetenDatum, kraenDatum, detali, idDest, idMeteo }
- R13 = { idMeteo, momentTemp, sostojbaVreme, predupreduvanja, vlazhnost, veter, mesec, datum, idDest }
Кратко резиме
Примената на функционска декомпозиција и нормализација до третата нормална форма (3НФ) резултира со оптимизирана структура на базата која ги исполнува следниве цели:
- Елиминација на вишоци и дупликации
- Отстранување на аномалии при внесување, бришење или ажурирање
- Подобра логичка организација на податоците
- Јасна поделба според функционалност (модули)
- Можност за идно проширување на моделот без пречки
На овој начин, дизајнот на базата не само што ги задоволува тековните барања на апликацијата TravelSage, туку и обезбедува стабилна основа за нејзина понатамошна еволуција.