You are on page 1of 14

PROIECT BAZE DE DATE

Sistem de gestiune a cabinetelor medicale

Bucureti, 2016

Sistem de gestiune a cabinetelor medicale


1. Descrierea temei:
Proiectul descrie un sistem de gestiune al cabinetelor medicale al medicilor de familie dintr-o
zona si reprezinta un sondaj urmarindu-se cate retete prescrise de medicul de familie sunt compensate
si cate nu. Pentru acest sistem sunt prezentate patru tabele: MEDICI, PACIENTI, CONSULTATIE si
RETETA. Un medic de familie poate sa aibe unul sau mai multi pacienti( unu la mai multi), pacienti
care vin pentru o consultatie sau mai multe(unu la mai multi). Doctorul in urma consultatiei ii da
pacientului una sau mai multe retete in functie de diagnosticul acestuia.
Pentru realizarea sondajului sunt necesare informatii :
despre medicii de familie( id_doctor PK, nume_doctor,
prenume_doctor,nr_telefon_cabinet, nr_cabinet si cabinetul );
despre pacientii care vin la acesti medici (cnp-ul PK, id_doctor FK de la care isi face
consultatia, nume_pacient, prenume_pacient, adresa acestuia si numarul de telefon);
despre consultatie ( care contine un cod_consultatie PK unic, cnp_ul pacientului FK
,data la care a fost realizata consultatia, diagnosticul pacientului precum si
observatiile medicului);
despre reteta prescrisa pacientului in urma consultatiei( cod_reteta PK, cnp-ul
pacientului FK, cod_consultatie,medicamentul , cantitatea de medicament, daca
medicamentul este compensate sau nu si cat anume, si nume_doctor) .
Aceste informatii reprezinta tabelele si atributele bazei de date relizate in proiect.

2. Schema conceptuala

3. Construirea bazei de date


Create
Crearea tabelei MEDICI_DE_FAMILIE;
Create table MEDICI_DE_FAMILIE
( id_doctor varchar2(10), constraint medici_de_familie_pk primary key(id_doctor),
nume_doctor varchar2(25),
prenume_doctor varchar2(25),
spital varchar2(25),
nr_telefon_cabinet varchar2(10));
Crearea tabelei PACIENTI;
Create table PACIENTI
(CNP number(13),constraint cnp_pk primary key(cnp),
id_doctor varchar2(10),
nume_pacient varchar2(25),
prenume_pacient varchar2(25),
adresa_pacient varchar2(30),
nr_telefon number(10),
cod_consultatie varchar2(10),
constraint id_doctor_fk foreign key(id_doctor) references
MEDICI_DE_FAMILIE);

Crearea tabelei CONSULTATIE;


Create table CONSULTATIE
( cod_consultatie varchar2(10), constraint cod_consultatie_pk primary key(cod_consultatie),
CNP number(13),
id_doctor varchar2(10),
data date default sysdate,
diagnostic varchar2(25),
observatii varchar2(50),
constraint cnp_fk foreign key(cnp) references PACIENTI,
constraint id_docto_fk foreign key(id_doctor) references MEDICI_DE_FAMILIE);

Crearea tabelei RETETA;


Create table RETETA
( cod_reteta varchar2(10), constraint cod_reteta_pk primary key(cod_reteta),
CNP number(13),
id_doctor varchar2(10),
cod_consultatie varchar2(10),
cantitate varchar2(50),
compensat varchar2(2),
procent varchar2(99));

Alter + ADD
Adaugarea cheii externe pentru tabela reteta;
alter table reteta add
constraint cnp2_fk foreign key(cnp) references PACIENTI;
alter table reteta add
constraint id_doctor2_fk foreign key(id_doctor) references MEDICI_DE_FAMILIE;
alter table reteta add
constraint cod_consultatie2_fk foreign key(cod_consultatie) references CONSULTATIE;

Se adauga coloana nr_cabinet si coloana cabinet la tabela medici_de_familie;


alter table medici_de_familie add nr_cabinet number(20);
alter table medici_de_familie add cabinet varchar2(30);
Sa se adauge coloana nume_pacient din tabele Pacienti;
alter table consultatie add nume_pacient varchar2(25);

Constraint
Se adauga restrictie pentru tabela reteta ca procentul din reteta sa nu fie mai mare
decat 99 iar cantitatea de medicamente sa nu depaseasca 50 de bucati;
alter table reteta add constraint cantitate_check check(cantitate<50);
alter table reteta add constraint procent_check check(procent<99);

DROP
Stergere restrictii, chei externe;
alter table reteta drop
constraint cnp2_fk ;
alter table reteta drop
constraint id_doctor2_fk ;
alter table consultatie drop
constraint id_docto_fk;

Sa se elimine coloana cod_consultatie si coloana spital din tabela pacienti;


alter table pacienti drop column cod_consultatie;
alter table medici_de_familie drop column spital;
Sa se schimbe coloana id_doctor cu nume_doctor din tabela Consultatie;
alter table consultatie add nume_doctor varchar2(25);
alter table consultatie drop column id_doctor;

4.INSERT, UPDATE, DELETE, MERGE


INSERT
Sa se populeze tabela Medici_de_familie;

insert into Medici_De_Familie values ('A0001','Babsa','Mircea','0213322721','23','Centrul


medical Adnan');
insert into Medici_De_Familie values ('A0002','Facas','Silvia','0788148234','01','Centrul
medical Amicus Med');
insert into Medici_De_Familie values ('A0003','Alexandrescu','Raluca','0212525552','7','Dr.
Alexandrescu Raluca');

Sa se populeze tabela Pacienti;


insert into Pacienti values ('2940315440033','A0002','LaeSterea','Andreea',
'Sos.Alexandriei, nr 12A,sec5','0769334068');
insert into Pacienti values ('2960818456678','A0002','Dragomir','Catalina',
'Str. Vartejului, nr 2,sec5','0768345678');
insert into Pacienti values ('1880402234567','A0003','Dragomir','Catalina',
'Str.Drumul Sateni,nr.17,sec2','0761801331');
insert into Pacienti values ('1760330123490','A0001','Terteleac','Mihai',
'Str.Neptun,nr.17,sec4','0745672344');
insert into Pacienti values ('2700818678967','A0001','Parva','Mirela',
'Str.Teiului,nr.23A,sec4','0745997374');
insert into Pacienti values ('270902345672','A0001','Ilie','Anca',
'Str.Toamnei,nr.01A,sec4','0762334599');

Sa se populeze tabela Consultatie;


insert into Consultatie values
('12345','270902345672','12.03.2013','Raceala','Babsa','Ilie','Pacientul prezinta si tuse seaca);
insert into Consultatie values
('12346','270902345672','12.03.2013','Amigdalita','Babsa','Ilie','Inflamatie la amigdale');
insert into Consultatie values
('12347','2940315440033','25.03.2013','Luxatie','Facas','LaeSterea','Rani deschise');
insert into Consultatie values ('12348','2960818456678','25.03.2013','Toxiinfectie alimentare',
'Facas','Dragomir','Deshidratare');
insert into Consultatie values
('12349','2960818456678','25.03.2013','Gripa','Facas','Dragomir','-');

Update
Sa se modifice numele si prenumele pacientului cu cnp-ul=1880402234567;
update pacienti p set p.nume_pacient='Stroiescu' where p.cnp='1880402234567';
update pacienti p set p.prenume_pacient='Catalin' where p.cnp='1880402234567';
insert into Consultatie values
('12350','1880402234567','02.04.2013','Salmonella','Alexandrescu','Stroiescu','Deshidratare');
insert into Consultatie values
('12351','1760330123490','03.04.2013','Micoza','Babsa','Terteleac','-');
insert into Consultatie values ('12352','2700818678967','03.04.2013','Boala CreutzfeldtJakob','Babsa','Parva','Pacientul prezinta un inceput de depresie');
insert into Consultatie values
('12353','2700818678967','13.03.2013','Raceala','Babsa','Parva','Pacientul prezinta migrene');

Sa se schimbe atributul id_doctor cu nume_doctor din tabele reteta;


alter table reteta drop column id_doctor;
alter table reteta add nume_doctor varchar2(25);
Sa se adauge atributul medicament in tabela reteta;
alter table reteta add medicament varchar2(30);
Sa se populeze tabela Reteta;
insert into Reteta values ('567812','270902345672','12345','15','nu','0','Babsa','Paracetamol');
insert into Reteta values ('567813','270902345672','12345','7','nu','0','Babsa','Aspirina');
insert into Reteta values ('567856','270902345672','12346','10','da','10','Babsa','Amoxicilina');
insert into Reteta values ('567861','2940315440033','12347','12','da','15','Facas','Algocalmin');
insert into Reteta values ('567862','2940315440033','12347','12','da','15','Facas','Oxacilina');
insert into Reteta values ('568862','2960818456678','12348','2','nu','0','Facas','Ceai de tei');
insert into Reteta values ('568867','2960818456678','12349','10','nu','0','Facas','Nurofen');
insert into Reteta values ('568868','2960818456678','12349','10','nu','0'Facas','Panadol');
insert into Reteta values ('568100','1880402234567','12350','0','nu','0','Alexandrescu','-');
insert into Reteta values ('568105','1760330123490','12351','1','da','10','Babsa','Triderm');
insert into Reteta values ('568107','2700818678967','12352','1','nu','0','Babsa','Calmant');
insert into Reteta values ('568108','2700818678967','12353','10','nu','0','Babsa','Acid acetilic
salicilic');

Delete
Sa se stearga reteta care are cantitatea egala cu 2 din tabele reteta;
delete from reteta where cantitate=2;
Sa se stearga tabela reteta;
delete from reteta ;

5. Interogri

Sa se afiseze retele care au prescrise mai mult de 10 pastile;


select * from reteta where cantitate>10;

Jonctiune interna
Sa se afiseze numele doctorilor care apar si in tabela reteta si in tabela consultative
select * from reteta t , consultatie c
where t.nume_doctor=c.nume_doctor;

Sa se afiseze pacientul care are cnp-ul 2940315440033;


select * from pacienti t where cnp=2940315440033;

Sa se afiseze pacientii care sunt la doctorul cu id_doctor=A0002;


select * from pacienti where id_doctor='A0002';

Union
Sa se realizeze un full join intre tabela reteta si consultatie, comanda ce va reda toti
doctorii comuni celor doua coloane.
select c.nume_doctor, c.nume_pacient, c.cod_consultatie,
r.medicament, r.cantitate, r.compensat,
trunc(data) data_r from consultatie c full join reteta r
on c.nume_doctor=r.nume_doctor;

BETWEEN
Sa se selecteze numai retele care au cantitatea de pastille cuprinsa in intervalul [0,7];
select * from reteta where cantitate between 0 and 7;

And
Order by
Sa se afiseze consultatile efectuate de doctorii Babsa si Alexandrescu care nu au
cod_consultatie 12347 sau 12350 in ordine cronologica;
select * from consultatie t
where t.nume_doctor in ('Babsa','Alexandrescu')
and cod_consultatie not in ('12347','12350')
order by data;

Conversie implicita dat-char


Sa se afiseze consultatiile din data de 12.03.2013;
select * from consultatie t where t.data='12.03.2013';

Sa se afiseze consultatile realizate in luna martie;


select * from consultatie t where to_char(t.data,'mm')='03';

Sysdate
Update
Sa se seteze data curenta la consultatia care are codul 12349;
update consultatie t set t.data=sysdate where t.Cod_Consultatie='12349';

Count
Sa se afiseze numarul retetelor compensate si celor necompensate;
SELECT count(*) Nr_prod from reteta where compensat='da'
union
SELECT count(*) Nr_prod FROM reteta WHERE compensat='nu';

You might also like