Sunteți pe pagina 1din 4

Ionut Cristian Morar

InfoAcademy
Cisco Networking Academy
www.infoacademy.net
ENUNT PROIECT FINAL SQL/MySQL v2.1
Ati Iost angajat(a) de administratia unei clinici private pentru a pune ordine in evidentele legate de medici,
pacienti si vizitele acestora. Pana acum, evidenta vizitelor a Iost tinuta pe hartie, pentru Iiecare pacient Iiind
notate numele acestuia, numele medicului, data si ora vizitei si cabinetul in care aceasta a avut loc. Se doreste
ca pe viitor evidenta sa Iie inIormatizata si de aceea toate datele deja existente trebuie introduse intr-o baza de
date MySQL, care sa aiba o structura cat mai bine aleasa. In plus, odata inIormatiile introduse, administratia
doreste cateva prime rapoarte de activitate pe baza lor.
Vi se Iurnizeaza urmatoarele Iisiere:
- inIormatiile colectate pe hartie (cele legate de vizitele pacientilor) au Iost introduse in Iormat electronic si vi
se pun la dispozitie sub Iorma unui Iisier intr-un Iormat asemanator cu CSV
- administratia va Iurnizeaza un Iisier separat cu lista medicilor, care contine, pe langa numele si prenumele
medicului, statutul sau de medic primar/specialist si specialitatea sa. Aceasta lista include si cativa medici
proaspat angajati si care inca nu Iigureaza in evidentele legate de vizite.
Cerinte:
1. Se creeaza baza de date pfinal. In cadrul sau se deIineste procedura init() care eIectueaza urmatoarele
operatiuni:
sterge si recreeaza toate tabelele:
Medici cu coloane pentru nume, prenume, statut (care poate Ii doar primar sau specialist) si
specialitate.
Pacienti cu coloane pentru nume, prenume
Cabinete cu coloana pentru denumire
Vizite cu coloane pentru: data si ora (o singura coloana), si chei externe pentru medici, pacienti si
cabinete (vezi mai jos)
o tabela intermediara in care vor Ii importate din Iisier inIormatiile legate de vizite, inainte de a Ii
distribuite in tabelele Iinale. Structura tabelei o alegeti pe baza continutului Iisierului astIel incat
importul sa se deruleze cu succes.
creeaza indecsi
chei primare pentru tabele (se adauga coloane de tip autoincrement)
indecsi unici pentru combinatia (nume,prenume) in tabelele Medici si Pacienti
index unic pentru numele cabinetului in tabela Cabinete
Vor Ii alese tipurile de date cele mai potrivite pentru coloane.
Procedura va putea Ii rulata ulterior ori de cate ori este nevoie de-a lungul dezvoltarii proiectului pentru a
reinitializa rapid baza de date.
2. Se importa datele din Iisierul medici in tabela Medici
3. Se importa inIormatiile legate de vizite in tabela intermediara (din care vor migra mai apoi catre tabelele
principale vezi mai jos).
4. Se distribuie inIormatia din tabela intermediara in tabelele principale deja create, astIel incat sa poata Ii
reconstituite relatiile corecte intre inregistrari:
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de nfoAcademy.
1
Ionut Cristian Morar
InfoAcademy
Cisco Networking Academy
www.infoacademy.net
lista de nume unice de pacienti din tabela intermediara se introduce in Pacienti
lista de nume unice de cabinete din tabela intermediara se introduce in Cabinete
se populeaza tabela Vizite pe baza tabelei intermediara, operatia Iiind echivalenta cu ,inlocuirea
numelor de medici cu id-uri de medici, numelor de pacienti cu id-uri de pacienti etc, astIel incat Iiecare
inregistrare din Vizite sa contina reIerinte la inregistrari din celelalte tabele (Pacienti, Medici si
Cabinete). In acest Iel, orice raport viitor va putea Ii obtinut printr-un join intre doua sau mai multe
tabele.
Acest ultim pas se poate realiza in mai multe moduri. O posibila idee: puteti crea coloane ajutatoare in tabela
intermediara, calculate pe baza celor existente, ale caror valori apoi doar le copiati in tabelele de destinatie (ex:
id-ul pentru medici, care se poate calcula Iacand un join intre tabela intermediara si cea de medici cu conditia ca
numele sa Iie comun)
5. Odata datele structurate corect si distribuite in tabele, se sterge tabela intermediara. Rapoartele ulterioare vor
Ii produse exclusiv pe baza tabelelor principale (Medici, Pacienti, Cabinete, Vizite)
6. Administratia intentioneaza ca pe viitor sa colecteze inIormatii suplimentare despre pacienti si vizite: data de
nastere a pacientului si durata vizitei. In acest scop:
se va adauga coloana Durata in tabela Vizite
se va adauga coloana DataNasterii in tabela Pacienti
Aceste coloane vor Ii populate momentan cu date aleatoare, pentru a putea Ii exersate rapoartele ce le vor
implica. Data nasterii va Ii generata cu cel putin 20 de ani in urma, iar durata intre 5 si 30 de minute.
7. Se creeaza o procedura care produce urmatoarele rapoarte:
extragere de inIormatie dintr-o singura tabela
care sunt cei mai varstnici 20 de pacienti (se va aIisa numele complet al pacientului si varsta
acestuia)
cati pacienti exista pe segmentul de varsta 60-70 de ani
lista specialitatilor medicale disponibile impreuna cu numarul de medici pentru Iiecare dintre ele
(ex: reumatologie 4, cardiologie 2 etc)
extragere de inIormatie din 2 tabele
care este specialitatea la care s-au prezentat cei mai multi bolnavi
care este pacientul cu cele mai multe vizite la clinica
care sunt medicii care au consultat mai putin de 250 de pacienti anul acesta
care sunt medicii care nu Iigureaza in evidente cu nicio vizita
care sunt pacientii care au cel putin 20 de vizite in weekend
istoricul (ordonat cronologic) al vizitelor unui pacient, dandu-se numele acestuia (alegeti voi un
pacient). Se va aIisa doar data si ora vizitei
extragere de inIormatie din 3 tabele
varsta medie a pacientilor pentru Iiecare specialitate in parte in aIara de pediatrie
istoricul (ordonat cronologic) al vizitelor unui anume pacient, dandu-se numele acestuia (alegeti voi
un pacient). Pentru Iiecare vizita se vor aIisa data, ora, numele complet al doctorului si al
pacientului, cabinetul, specialitatea si durata
probleme de gandire pentru avansati (optionale):
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de nfoAcademy.
2
Ionut Cristian Morar
InfoAcademy
Cisco Networking Academy
www.infoacademy.net
primii 3 medici ca numar de vizite pentru Iiecare specialitate in parte in anul 2005
lista de medici impreuna cu numarul de vizite per cabinet al Iiecaruia in perioada 01.05.2006-
01.10.2008. Lista trebuie sa includa toti medicii, chiar daca unii dintre ei nu au vizite deloc in acea
perioada
in ce cabinet a primit cele mai multe vizite Iiecare medic
care sunt pacientii cu numarul maxim de vizite pentru Iiecare specialitate
8. Se realizeaza o a doua implementare a punctului 4, in care popularea tabelelor principale - Vizite, Pacienti si
Cabinete se realizeaza automat cu ajutorul unui trigger, la importarea datelor in tabela intermediara.
Triggerul atasat tabelei intermediara ruleaza automat la introducerea de noi inregistrari si eIectueaza
urmatoarele operatiuni:
apeleaza o Iunctie care Iormateaza corect data (atentie! coloana de data din tabela intermediara trebuie
deIinita ca varchar, in caz contrar NEW.data va Ii 0000-00-00!). Functia va primi ca argument doua
siruri de caractere (data si ora, in Iormatul in care apar ele in Iisier) si va returna o valoare de tip
DATETIME ce reprezinta dataora vizitei asa cum trebuie ea sa apara in tabela Vizite
adauga inregistrarile corespunzatoare in tabelele Pacienti si Cabinete, determinand valoarea cheii
externe din tabela Vizite Iolosind LASTINSERTID() sau SELECT
adauga inregistrarea corespunzatoare in tabela Vizite Iolosindu-se de valorile calculate anterior
Sugestii posibila implementare a triggerului:
se declara variabile in care se care vor memora valorile viitoarelor campuri din Vizite
se declara un handler de tip CONTINUE care se activeaza la incercarea de introducere a unei
inregistrari duplicat. Handlerul seteaza o variabila (un Ilag) ce indica Iaptul ca noua inregistrare nu s-a
introdus, Iiind duplicat. In acest Iel, dupa incercarea de introducere a unei noi inregistrari intr-o tabela,
putem aIla daca operatia s-a incheiat cu succes analizand variabila setata de handler
se apeleaza Iunctia care produce data si ora vizitei Iormatata corect
pentru Iiecare dintre tabelele Pacienti si Cabinete:
se incearca introducerea noii inregistrari pacient/cabinet Iolosind inIormatiile extrase din
inregistrarea curenta a tabelei intermediare. In cazul in care inregistrarea exista deja (pacientul sau
cabinetul este posibil sa Ii Iost adaugate deja ca urmare a unei inregistrari anterioare) handlerul va
semnaliza acest lucru prin intermediul variabilei
se determina valoarea cheii externe in Ielul urmator:
in cazul in care variabila deIinita de handler indica eroare, inseamna ca pacientul/cabinetul exista
deja si atunci valoarea cheii externe este id-ul inregistrarii deja existente, determinabil cu
SELECT
in cazul in care nu a avut loc o eroare, valoarea cheii externe este id-ul generat automat la
introducerea in tabela principala, determinabil cu LASTINSERTID()
se introduce noua inregistrare in tabela vizite, Iormata din data/ora si id-urile calculate anterior
Se testeaza noua implementare prin apelarea procedurii init(), crearea triggerului, importul in tabela
intermediara si apoi apelarea procedurii ce produce rapoartele.
9. Se realizeaza o a treia varianta de implementare a punctului 4, sub Iorma unei proceduri ce Ioloseste un
cursor pentru a parcurge inregistrarile din tabela intermediara. Procedura poate reIolosi Iunctia de la punctul
anterior in scopul Iormatarii datei.
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de nfoAcademy.
3
Ionut Cristian Morar
InfoAcademy
Cisco Networking Academy
www.infoacademy.net
Se testeaza noua implementare prin apelarea procedurii init(), importul in tabela intermediara, crearea
procedurii ce contine cursorul, apelarea acestei proceduri si apoi apelarea procedurii ce produce rapoartele.
Proiectul se va crea sub Iorma unui script SQL cu urmatoarele caracteristici:
se va lucra din MySQL Workbench sau orice alt client graIic care suporta schimbarea delimitatorului (in
scopul deIinirii de rutine si triggere). Data Iiind anvergura proiectului, clientul mvsql reprezinta o solutie
incomoda
scriptul sterge baza de date in caz de existenta si o creeaza de la 0, astIel incat sa poata Ii rulat in mod
repetitiv Iara a genera erori
scriptul nu trebuie sa genereze erori sau warning-uri
datele de importat contin caractere romanesti, de aceea se va Iolosi setul de caractere UTF-8:
in comunicatia cu serverul
pentru baza de date, tabele si coloanele de tip sir de caractere
la importarea datelor in tabele
inaintea Iiecarei operatii majore din Iisier se vor include comentarii care clariIica scopul secventei de
cod urmatoare
se poate lucra cu join-uri sau cu subselect-uri, cum vi se pare mai comod. Trebuie insa ca de-a lungul
scriptului Iiecare dintre cele doua procedee sa Iie Iolosit de minim 2 ori!
NU se permite Iolosirea de tabele temporare intermediare, cu exceptia celei in care se importa
inIormatiile legate de vizite
Studentul poate utiliza prezentul material si informatiile continute in el exclusiv in scopul asimilarii cunostintelor pe care le include, fara a afecta dreptul
de proprietate intelectuala detinut de nfoAcademy.
4

S-ar putea să vă placă și