58
Colegiul National “Ion Maiorescu” Giurgiu Lucrare de atestat Proiectarea unei baze de date ”Cinica medicala” Elev: Ivan Andra-Irina Prof. Coordonator: Chiricioglu Alina An:2012

ATESTAT baze de date

Embed Size (px)

Citation preview

Slide 1

Colegiul National Ion MaiorescuGiurgiu

Lucrare de atestatProiectarea unei baze de dateCinica medicalaElev: Ivan Andra-IrinaProf. Coordonator: Chiricioglu AlinaAn:2012

Presupunere: Intr-un cabinet lucreaza un singur medic.Suntem asociati la o firma de soft. Firma se ocupa cu modelarea si proiectarea bazelor de date si este specializata pentru domeniul sanatatii.Trebuie sa realizam o aplicatie (modelarea si proiectarea bazelor de date) pentru un client care doreste optimizarea activitatii in clinica medicala a carui proprietar este. In aceasta clinica functioneaza mai multe cabinete medicale pe diverse specializari. Pentru specializarile solicitate frecvent pot functiona mai multe cabinete cu acelasi profil. Clinica ofera si servicii de analize medicale precum si tratamente pentru anumite afectiuni (ex. tratamente reumatism, astm bronsic, alergii, etc.). Clinica nu ofera servicii de chirurgie si nu are posibilitatea de a interna pacientii. Fiind o clinica care ofera servicii de calitate, pentru o gama larga de afectiuni, multi dintre pacientii care apeleaza la serviciile acestei clinici, sunt pacienti vechi. Pentru a imbunatati serviciile oferite clientilor, se doreste urmarirea afectiunilor unui pacient precum si a tratamentelor recomandate in timp acestuia.Pentru fiecare pacient se realizeaza, la prima vizita in clinica, o fisa a pacientului in care sunt pastrate informatii despre pacient si antecedentele medicale ale acestuia. Medicii folosesc si completeaza aceasta fisa la fiecare vizita a pacientului. Medicii doresc sa aiba la dispozitie si informatii despre toate medicamentele care se gasesc pe piata cu toate indicatiile si contraindicatiile lor.Modelarea

FISA_PACIENT#cod*data_intocmire*grupa_sangeo alergieo boli avutePACIENT#CNP*nume*prenume*adresa*data_nasterii*nr_telefonSERVICIUL#cod*nume*pret_orientativo procedura

CABINET_MEDICAL*nr_telefonANALIZA_MEDICALAO durata_rezultateTRATAMENTMEDICAMENT#cod*nume*data_aparitie*prospectSPECIALIZARE#cod*numeMEDIC#CNP*nume*prenumeo nr_telefonFirst ERDFISA_PACIENT#cod*data_intocmire*grupa_sangeo alergieo boli avutePROGRAMARE#data_programare*diagnosticPACIENT#CNP*nume*prenume*adresa*data_nasterii*nr_telefonSERVICIUL#cod*nume*pret_orientativo procedura

CABINET_MEDICAL*nr_telefonANALIZA_MEDICALAO durata_rezultateTRATAMENTMEDICAMENT#cod*nume*data_aparitie*prospectSPECIALIZARE#cod*numeMEDIC#CNP*nume*prenumeo nr_telefonFinal ERDDesfiintarea relatiei many-to-manyRelatiile many-to-many pot aparea doar intr-o prima faza a proiectarii bazei de date. Ele nu au voie sa apara in schema finala.Rezolvare unei relatii many-to-many consta in introducerea unei noi entitati, numita entitate de intersectie, pe care o legam de entitatile originale prin cate o relatie one-to-many( piciorul de cioara fiind indrepatat spre entitatea nou creata). In partea dinspre entitatile originale relatiile one-to-many vor pastra optionalitatea relatiei initiale, fiind intotdeauna obligatorii in partea dinspre entitatea de intersectie.In cazul nostru, observam ca relatia many-to-many se stabileste intre entitatea PACIENT si entitatea SERVICIUL. Aceasta relatie este desfiintata prin crearea unei noi entitati, numita PROGRAMARE, ce se va lega de entitatile initiale prin intermediul unor relatii one-to-many, optionalitatea acestora stabilindu-se asa cum am amintit anterior.Deoarece dorim sa cunoastem istoricul medical al fiecarui pacient , UID-ul entitatii PROGRAMARE va fi format din UID-ul entitatilor PACIENT si SERVICIUL precum si dintr-un UID nou intodus data_programare.Cum istoricul pacientului apare pe fisa medicala a acestuia , intre entitatea FISA_PACIENT si entitatea PROGRAMARE se va stabili o relatie one-to-many ( fiecare programare trebuie sa fie trecuta pe fisa iar pe fisa pot fi trecute mai multe programari). MapareaMEDICAMENTETip cheieOptionalitateNume coloanapk*Cod*Nume*Data_aparitiei*Data_ultimei_verificari*prospectMEDICITip cheieOptionalitateNume coloanapk*CNP*Nume*PrenumeoNr_telefonSPECIALIZARITip cheieOptionalitateNume coloanapk*Cod*NumePACIENTITip cheieOptionalitateNume coloanapk*CNP*Nume*Prenume*Adresa*Data_nasteriioNr_telefonfk*Cod_fisaFISE PACIENTITip cheieOptionalitateNume coloanapk*Cod*Data_intocmire*Grupa_sanguinaoAlergieoBoli_avutefkoCNP_pacientTRATAMENTETip cheieOptionalitateNume coloanapk*Cod*NumeoProcedura*PretPROGRAMARITip cheieOptionalitateNume coloanapk*Data_programare*Diagnosticpk,fk*CNP_pacientfk*Cod_fisapk,fk*Cod_serviciuCABINETE MEDICALETip cheieOptionalitateNume coloanapk*Cod*PretoProcedura*Nr_telefonfk*CNP_medicfk*Cod_specializareANALIZE MEDICALETip cheieOptionalitateNume coloanapk*Cod*NumeoProcedura*PretoDurata_rezultateCrearea tabelelorCu ajutorul instructiunii CREATE TABLE

Crearea tabelelor automat

Instructiuni DMLInsert

Update

Inainte Dupa

Delete

Inainte Dupa

Comenzi SQLSELECT NUME AS "Nume", PRENUME AS "Prenume"FROM MEDICIWHERE PRENUME LIKE 'I%'ORDER BY NUME ASCRezultat urmarit: Afisarea in ordine alfabetica, dupa nume, a tuturor medicilor (doar numele si prenumele) al caror prenume incepe cu litera i

Inainte

SELECT COD, initcap(NUME), DURATA_REZULTATEFROM ANALIZE_MEDICALEWHERE DURATA_REZULTATE='1 zi' AND NUME LIKE 'E%'ORDER BY NUMERezultat urmarit: Afisarea in ordine alfabetica a acelor analize medicale care au ca durata de rezultate 1 zi si transformarea. De asemenea, se urmareste afisarea numelui analizei de forma Nume.

Inainte

SELECT COD, upper(NUME), PROCEDURA, NVL2(PROCEDURA,'ARE','NU ARE')FROM ANALIZE_MEDICALEORDER BY NUME DESCRezultat urmarit: Specificarea in cazul fiecarei analize medicale daca are sau nu mentionata procedura.

Inainte

SELECT COD, NUME, PRET,DECODE(PRET,'20',1.10*PRET,'10',1.15*PRET,'25',1.20*PRET,PRET) AS "MAJORARI PRET"FROM ANALIZE_MEDICALERezultat urmarit: majorarea preturilor unor analize medicale. Astfel pretul de 10 RON va fi majorat cu 15%,cel de 20 RON cu 10% iar cel de 25 RON cu 20%

SELECT COD, upper(NUME), DATA_ULTIMEI_VERIFICARI,SYSDATE, PROSPECT, ROUND(MONTHS_BETWEEN(SYSDATE,DATA_ULTIMEI_VERIFICARI))FROM MEDICAMENTEWHERE PROSPECT LIKE '%raceala%'ORDER BY NUMERezultat urmarit: Afisarea numarului aproximativ de luni dintre data ultimei verificari a medicamentului si sysdate pentru toate medicamentele utilizate pentru raceala.

Inainte

SELECT C.COD AS CABINET,S.NUME AS "SPECIALIZARE",M.NUME||' '||M.PRENUME AS "MEDIC"FROM CABINETE_MEDICALE C, SPECIALIZARI S, MEDICI MWHERE C.CNP_MEDIC=M.CNP AND C.COD_SPECIALIZARE=S.CODRezultat urmarit: Afisarea pentru fiecare cabinet a medicului sau si a specializarii sale.

Inainte

MediciSpecializariCabinete_medicaleSELECT COD, NUME, TO_CHAR(DATA_ULTIMEI_VERIFICARI,'MONTH DD, YYYY'), PROSPECT, NVL2(PROSPECT,NULL,NULL)FROM MEDICAMENTEWHERE PROSPECT LIKE '%cap%'Rezultat urmarit: Stergere prospectului medicamentelor utilizate pentru dureri de cap si afisarea datei su forma: luna zi, an.

Inainte

Select COD, LOWER(NUME), PRET, DURATA_REZULTATE,CASE DURATA_REZULTATE WHEN 2 zile' THEN '1 zi' WHEN '1 zi THEN '4 h' ELSE '2 h'END AS "TIMP ASTEPTARE"FROM ANALIZE_MEDICALE

Rezultat urmarit: Modificarea timpului de asteptare a rezultatelor analizelor.

Inainte

SELECT COD, TRIM( TRAILING 'e' FROM NUME)FROM SPECIALIZARIWHERE NUME LIKE 'O%'ORDER BY CODRezultat urmarit: Stergerea literei e de la sfarsitul numelui fiecarei specializari a carei denumire incepe cu litera o. De asemenea, se mai urmarescte ordonarea in ordine crescatoare a specializarilor, dupa codul lor.

Inainte

SELECT NUME, RPAD(PRET, 3, 0), DURATA_REZULTATEFROM ANALIZE_MEDICALEWHERE NUME LIKE M%ORDER BY NUME DESCRezultat urmarit: Modificarea pretului analizelor al caror nume incepe cu litera m. Mai precis, s-a dorit adaugarea unui 0 la sfarsitul pretului analizelor respective

Inainte

Sfarsit