Sunteți pe pagina 1din 4

Exemplu normalizare MySQL

Iata cum suna o tema de aplicatie primita in cadrul un proiect la scoala. Tema aplicatie: Factura telefonica Sa se proiecteze o baza de date pentru un furnizor de servicii telefonice, avand in vedere urmatoarele constrangeri:
o o o o o o

constrangerea de integritate a entitatii constrangerea de integritate referentiala furnizorul are mai multi abonati fiecare abonat poate detine unul sau mai multe numere de telefon de pe fiecare numar de telefon se pot efectua mai multe apeluri telefonice apelul telefonic se taxeaza in functie ora la care a fost efectuat

Normalizarea se va face pe baza primelor 3 forme normale. Dupa proiectare, trebuie realizata schema bazei de date, utilizand aplicatia MySQL Workbench, precum si scriptul SQL care implementeaza baza de date. Sa se dezvolte o aplicatie Web care sa permita introducerea de inregistrari in tabelele bazei de date (datele sunt preluate de la utilizatori folosind formulare Web). Sa se afiseze tabelar toti clientii, precizand ultima factura pentru fiecare numar de telefon (se utilizeaza operatii de tip JOIN). In cele ce urmeaza puteti vedea metoda aleasa pentru implementarea atat a bazei de date cat si a plicatiei web. Aplicatia web sper sa v-o pot prezenta intr-un articol viitor caci nu vreau sa ma extind prea mult acum si in plus sunt alte probleme ce cred ca le voi intampina in a v-o prezenta. 1. Proiectarea bazei de date

1.1 Strucutra de baza Structura de baza a bazei de date este redata de relatia de mai jos: bazaAbonati(idAbonat, numeAbonat, prenumeAbonat, adresaAbonat, idTelefon, nrTelefon, idApel, destinatieApel, durataApel, intervalOrar, tarifApel) 1.2 Normalizare Eliminarea grupurilor repetitive prin aplicarea formei normale 1 (1NF).

Prin aplicarea 1NF vom aveam urmatoarele tabele:


o o

Abonat(idAbonat, numeAbonat, prenumeAbonat, adresaAbonat) Telefoane(idAbonat, idTelefon, nrTelefon, idApel, destinatieApel, durataApel, intervalOrar, tarifApel)

Deasemenea se observa existenta unui grup repetitiv si in cadrul relatiei Telefoane: pentru un numar de telefon putem avea mai multe apeluri efectuate catre diverse destianatii. Vom aplica asadar dinnou forma normala 1 (1NF) asupra relatiei Telefoane si vom obtine urmatoarele 2 tabele: Telefoane, Apeluri.
o o

Telefoane(idAbonat, idTelefon, nrTelefon) Apeluri(idTelefon, idApel, destinatieApel, durataApel)

In urma acestei etape de normalizare deci vom obtine tabelele: Abonat, Telefoane, Apeluri. Observam in continuare inexistenta dependentelor totale fata de cheia primara a relatiei pentru tabelele Telefoane, Apeluri iar in consecinta procedam prin aplicarea 2NF. Vom obtine:
o o o o

Telefoane(idTelefon, nrTelefon) AbonatTelefoane(idAbonat, idTelefon) Apeluri(idApel,destinatieApel, durataApel, intervalOrar, tarifApel) TelefoaneApeluri(idTelefon, idApel)

Se observa in ca o problema in ceea ce priveste redundanta datelor si anume existenta unei relatii de tipul Many : One si anume aceea prezentata de idApel respectiv intervalOrar.Stim ca in functie de intervalul orar avem un anumit tarif pentru apelul efectuat. Astfel pentru eliminarea aceste dependente tranzitive vom proceda prin aplicarea formei normal 3 (3NF):
o o

Apeluri(idApel, destinatieApel, durataApel, intervalOrar este cheie externa TarifareApel(intervalOrar, tarifApel)

intervalOrar)

*unde

1.3 Structura finala a bazei de date In urma pocesului de normalizare a bazei de date initiale au rezultat urmatoarele relatii(tabele) ce definesc structura bazei de date pentru managementul Facturilor telefonice pentru abonati unui furnizor
o o

Abonat(idAbonat, numeAbonat, prenumeAbonat, adresaAbonat) Telefoane(idTelefon, nrTelefon)

o o o o

AbonatTelefoane(idAbonat, idTelefon) Apeluri(idApel,destinatieApel, durataApel, intervalOrar) TelefoaneApeluri(idTelefon, idApel) TarifareApel(intervalOrar, tarifApel)

Figur 1. Implementare MySQL Workbench

Obs: Avem nevoie de tabelul AbonatTelefoane in ideea existentei unei posibilitati ca furnizorul sa redistribuie numere de telefon altor abonati, numere de telefon ce devin libere in eventualitatea rezilierii contractelor cu anumiti abonati. 2. Proiectarea aplicatiei WEB

Pentru proiectarea amplicatie ce permite operarea cu baza de date creata vor fi folosite ca si limbaje de programare urmatoarele:
o o o

HTML pentru crearea interfetei cu utilizatorul PHP pentru managementul continutului dinamic CSS pentru implentarea stilului paginii

2.1. Structura aplicatiei WEB

2.2. Pagini aplicatie Scriptul php este constituit din urmatoare pagini ce pot fi identificate si in structura descrisa mai sus. Mai concret putem vorbi despre urmatoarele pagini:
o

o o

Index.php este pagina de start a aplicatiei. Dupa cum bine stim orice server apache atunci cand nu are specificat in configuratie ca alta pagina de start un alt nume are in configuratia sa ca pagina default index.php. Astfel o aplicatie, un script php este rulat in totdeauna incepand cu pagina index.php , aceasta putand fi considerata echivalentul functiei main in libajul C. Abonati.php aceasta pagina permite afisarea tutoror abonatilor dar si afisarea informatiilor cu privire la un abonat specificat printr-o metoda GET. Factura.php permite afisarea informatiilor cu privire la apelurile efectuate de la un numar de telefon. Dar totodata prin intermediul paginii de facturare se genereaza o factura unde avem specificat costul total al apelurilor efectuate de la numarul respectiv de telefon. Adauga.php pagina ce permite adaugare informatiilor cu privire la un abonat dar si asignarea unui numar de telefon abonatului respectiv. Editeaza.php la fel ca si in cazul pagini adauga si pagina de editare permite modificare acelorasi informatii specificate mai sus