Sunteți pe pagina 1din 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

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.

Presupunere: Intr-un cabinet lucreaza un singur medic.

Modelarea

PACIENT
#CNP
*nume
*prenume
*adresa
*data_nasterii
*nr_telefon

SERVICIUL
#cod
*nume
*pret_orientativ
o procedura
CABINET_MEDICAL

*nr_telefon
ANALIZA_MEDICAL
A

MEDICAMEN
T
#cod
*nume
*data_apariti
e
*prospect
SPECIALIZAR
E
#cod
*nume

FISA_PACIENT
#cod
*data_intocmir
e
*grupa_sange
o alergie
o boli avute

durata_rezultate
TRATAMENT

MEDIC
#CNP
*nume
*prenume
o

First ERD

nr_telefon

FISA_PACIEN
T
#cod
*data_intocm
ire
*grupa_sang
e
o alergie
o boli avute
PROGRAMARE
#data_programa
re
*diagnostic

PACIENT
#CNP
*nume
*prenume
*adresa
*data_nasterii
*nr_telefon

Final ERD

SERVICIUL
#cod
*nume
*pret_orientativ
o procedura
CABINET_MEDICA
L

*nr_telefon

MEDICAMENT
#cod
*nume
*data_aparitie
*prospect

SPECIALIZAR
E
#cod
*nume

ANALIZA_MEDICAL
A
O

durata_rezultate
TRATAMENT

MEDIC
#CNP
*nume
*prenume
o nr_telefon

Desfiintarea relatiei many-to-many


Relatiile 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 oneto-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).

Maparea

MEDICAMENTE
Tip cheie

Optionalitate

Nume coloana

pk

Cod

Nume

Data_aparitiei

Data_ultimei_verifica
ri
prospect

MEDICI
Tip cheie

Optionalitate

Nume coloana

pk

CNP

Nume

Prenume

Nr_telefon

SPECIALIZARI
Tip cheie

Optionalitate

Nume coloana

pk

Cod

Nume

PACIENTI
Tip cheie

Optionalitate

Nume coloana

pk

CNP

Nume

Prenume

Adresa

Data_nasterii

Nr_telefon

Cod_fisa

fk

FISE PACIENTI
Tip cheie

Optionalitate

Nume coloana

pk

Cod

Data_intocmire

Grupa_sanguina

Alergie

Boli_avute

CNP_pacient

fk

TRATAMENTE
Tip cheie

Optionalitate

Nume coloana

pk

Cod

Nume

Procedura

Pret

PROGRAMARI
Tip cheie

Optionalitate

Nume coloana

pk

Data_programare

Diagnostic

pk,fk

CNP_pacient

fk

Cod_fisa

pk,fk

Cod_serviciu

CABINETE MEDICALE
Tip cheie

Optionalitate

Nume coloana

pk

Cod

Pret

Procedura

Nr_telefon

fk

CNP_medic

fk

Cod_specializare

ANALIZE MEDICALE
Tip cheie

Optionalitate

Nume coloana

pk

Cod

Nume

Procedura

Pret

Durata_rezultate

Crearea tabelelor

Cu ajutorul instructiunii CREATE TABLE

Crearea tabelelor automat

Instructiuni DML

Insert

Update

Inainte

Dupa

Delete

Inainte

Dupa

Comenzi SQL

SELECT NUME AS "Nume",


PRENUME AS "Prenume"
FROM MEDICI
WHERE PRENUME LIKE 'I%'
ORDER BY NUME ASC

Rezultat 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_REZULTATE
FROM ANALIZE_MEDICALE
WHERE DURATA_REZULTATE='1 zi'
AND NUME LIKE 'E%'
ORDER BY NUME

Rezultat 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_MEDICALE
ORDER BY NUME DESC

Rezultat 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*PRE
T,PRET) AS "MAJORARI
PRET"
FROM ANALIZE_MEDICALE

Rezultat 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(SYSDAT
E,DATA_ULTIMEI_VERIFICARI))
FROM MEDICAMENTE
WHERE PROSPECT LIKE '%raceala%'
ORDER BY NUME

Rezultat 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 M
WHERE C.CNP_MEDIC=M.CNP AND
C.COD_SPECIALIZARE=S.COD

Rezultat urmarit: Afisarea


pentru fiecare cabinet a
medicului sau si a
specializarii sale.

Inainte

Medici

Cabinete_medicale

Specializari

SELECT COD, NUME,


TO_CHAR(DATA_ULTIMEI_VERIFI
CARI,'MONTH DD, YYYY'),
PROSPECT,
NVL2(PROSPECT,NULL,NULL)
FROM MEDICAMENTE
WHERE 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 SPECIALIZARI
WHERE NUME LIKE 'O%'
ORDER BY COD

Rezultat 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_REZULTATE
FROM ANALIZE_MEDICALE
WHERE NUME LIKE M%
ORDER BY NUME DESC

Rezultat 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

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