Exemplu normalizare baza de date

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:

  • 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:

  • 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.

  • 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:

  • Telefoane(idTelefon, nrTelefon)
  • AbonatTelefoane(idAbonatidTelefon)
  • 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 idApelrespectiv 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):

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

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

  • Abonat(idAbonat, numeAbonat, prenumeAbonat, adresaAbonat)
  • Telefoane(idTelefon, nrTelefon)
  • AbonatTelefoane(idAbonatidTelefon)
  • Apeluri(idApel,destinatieApel, durataApel, intervalOrar)
  • TelefoaneApeluri(idTelefon, idApel)
  • TarifareApel(intervalOrar, tarifApel)

diagrama-normalizare

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:

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

2.1. Structura aplicatiei WEB

structura_web_aplicatie

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:

  • 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

Cum sa normalizezi o baza de date

Dupa aproape 4 ani revin asupra acestui subiect pentru ca e clar ridica probleme in randul incepatorilor ce au de a face cu bazele de date. Spun incepatori deoarece sincer, eu nu mai folosesc aceasta metoda de mormalizare lucrurile venind de la sine.

Un exemplu de normalizare il gasiti aici: exemplu normalizare baza de date abonati telefonici

Iata scenariul:

Sa se proiecteze o baza de date pentru o organizatie, avand in vedere urmatoarele constrangeri: – constrangerea de integritate a entitatii; – constrangerea de integritate referentiala; – baza de date contine cel putin 6 tabele; – baza de date contine cel putin un tabel referential (entitate referentiala transversala).

Normalizarea se va face pe baza primelor 3 forme normale. Dupa proiectare, trebuie realizata diagrama entitate-asociere utilizand aplicatia MySQL Workbench, precum si scriptul SQL care implementeaza baza de date.

Sa se implementeze o operatie de tip JOIN pe trei tabele, care sa utilizeze cel putin o functie de sumarizare si sa contina cel putin o filtrare. Sa se implememnteze o vizualizare avand la baza o operatie de tip JOIN (diferita de cea precizata la punctul anterior).

Cum gandim si ce facem de aici:
In primul rand trebuie sa plecam de la ideea centrala pentru care dorim normalizarea.

De exemplu pentru o ferma cu animale sa zicem ca vrem sa tinem minte ce vaccinari ii sunt facute unui animal dealungul vietii. Pentru asta in baza de date vom aveam nevoie de date de identificare pentru animal, date de identificare pentru vaccin, date de identificare pentru cel ce a facut vaccinul, nu?

Pasul 1

bazaAnimale(idAnimal, numeAnimal, varstaAnimal, tipAnimal, idMedicIngrijitor, numeMedicIngrijitor, telefonMedicIngrijitor, idVaccin, numeVaccin, dozaVaccin, tarifDoza)

Pasul 2

Aici incepe pur si simplu normalizarea.

Procesul de normalizare consta in “spargerea” acestei baza de date in tabele astfel incat informatia gazduita in sistem sa fie minimala. (De ce sa avem un spatiu ocupat de 2Mb cand putem avea 1.5Mb?, nu?)

  • De exemplu mai multe animale pot sa aiba acelasi ingrijitor: nu ar fi mai util ca ingrijitorul la care se face referire sa fie identificat printr-un numar? (nu vom mai avea ceva de genul: animal 1, 10 ani, porc cu ingrijitorul Popescu Ion 0700 000 000 ci vom sti ca ingrijitorul x (x – un numar) este popescu ion si astfel vom rezolva mult mai usor situatiile in care acesta sa zicem is modifica numarul de telefon.
  • Un alt exemplu similar cu cel de sus este faptul ca unui animal ii pot fi facute o serie de vaccinuri. Dintre acestea o parte ii sunt administrate si unui al animal.

Procesul de nomalizare presupune mai multe etape, etape ce face ca Bazei de date normalizate sa ii fie aplicate mai multi algorimti de “simplicare” numiti si FORME NORMALE (NORMAL FORMS).

Continue…

Get Romanian spell-checking in Mac OS X

A SIMPLE STEP-BY-STEP GUIDE

As you may know—all too well—Apple’s Mac OS X doesn’t offer native support for Romanian spell checking. Quite an embarrassment.

However, it is possible to install a Romanian spell-check dictionary (with diacritics and all)—in three fairly easy steps—available to all applications using system spell-checking services, like Mail, Pages, Keynote, Safari, iChat etc.1

Romanian Spellcheck in Apple Mac OS X / Corector ortografic pentru limba română în Apple Mac OS X, © Cristian -Kit- Paul, Bucharest, 2010.

Here is how to add system-wide Romanian spell-check dictionary to Mac OS X—a simple step-by-step guide. Continue…

iOS developing tutorial

Astept sa vad cand se va ajunge la nivelul asta in invatamantul universitar romanesc. Nu uitati acest video este un curs din cadrul Stanford University – categoria “computer science”. Il puteti deasemenea gasi pe iTunes.

[youtube http://www.youtube.com/playlist?list=PLEB86AB8806B23887 ]

Packet Sniffing in LabVIEW

Am gasit in urma cu ceva zile pe site’ul NI (National Instruments) un mic programel ce are drept scop indentificarea pachetelor vehiculate prin placa de retea a unui calculator. Desi destul de rudimentar dupa catva timp pierdut in fata laptopului cred ca ar putea iesi o alternativa buna la soft-uri precum WireSHARK si dece nu chiar X-ARP.

Interfata grafica momentana a programului este urmatoarea:

 

Dupa cum vedeti momentan in “casuta” raw data este prezentata informatia referitoare doar la ultimul pachet receptionat. Iar in ceea ce priveste protocolul, ip’urile, adresele fizice ale calculatoarelor ce intervin in comunicare sunt specificate in celelalte casute.

Ledul din blocul “ip packet” are drept rol semnalizarea starii actuale a transmisiei:

  • daca este aprins semnalizeaza un pachet receptionat
  • daca este stins inseamna ca nici un pachet nu a fost receptionat
Foarte important de retinut este ca aceasta unealta verifica doar pachetele trimise catre adresa de “broadcast” a retelei.
Mai jos aveti atasata o arhiva cu utilitarul despre care va vorbeam:
http://www.mediafire.com/?k9d0232lxz0rdrv

 

Functii PHP

Am aflat si eu acu nu demult, dar totusi destul de tarziu ca o functie php chiar daca nu are in corpul sau comanda sau sintaxa return aceasta returneaza tot timpul o valoare un element , returneaza ceva”.

Am inceput prin a specifica acest lucru pentru a invata voi macar din greselile mele. Iar acum ca am stabilit un punct de plecare sa-i dam drumul si astfel sa discutam despre niste functii in limbajul PHP. Pentru incepul vreau sa va prezint un scurt desfasurator al punctelor de discutie pentru a va ghida mai usor in cadrul articolului:

  • Ce sunt functiile PHP (ce consideram o functie)
  • Sintaxa declararii unei functii
  • imbinare HTML+PHP in realizarea unui script PHP
  • Utilitatea functiilor
  • Concluzii generale
Acestea fiind spuse sa incep si detalierea ar fi o idee.
  • Ce sunt functiile PHP
Functia este o secventa de cod ce poate fi utilizata de mai multe ori in interiorul marilor scripturi si este prezentata in script prin declaratia ei.
Functia chemata (invocata) va contine acelasi numar de argumente ca in declaratie.
In PHP4 o functie poate fi definita oriunde in cadrul script-ului si in interiorul unei functii poate sa apara orice secventa valida de cod care include definirea de alte functii si definitii de clase. Argumentele unei functii trebuie separate prin virgula, si, implicit, acestea sunt transmise prin valoare. Pentru ca functia sa returneze un rezultat se foloseste constructia return care primeste ca parametru o expresie care reprezinta valoarea functiei. In momentul in care este intalnita constructia return, executia functiei se incheie. In exemplul urmator se calculeaza cu ajutorul unei functii PHP, patratul unui numar. Continue…

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:

  • 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). Continue…