Proiect Baza de Date

download Proiect Baza de Date

of 24

Transcript of Proiect Baza de Date

ACADEMIA DE STUDII ECONOMICEFacultatea de Cibernetic, Statistic i Informatic Economic

Boboescu Dan Alexandru Seria A Grupa 1022

Proiect Baze de date S.C. Vital Home Care S.R.L. Ingrjiri medicale la domiciliu

S.C. Vital Home Care S.R.LPrezentare GeneralaS.C. Vital Home Care S.R.L , societate comerciala ce ofera ingrijiri medicale la domiciliu , colaboreaza cu diferiti medici cu scopul de a strange cat mai multi pacienti doritori de astfel de servicii.Firma are sediul central in Bucuresti si dispune de un numar de 10 angajati din care patru asistenti medicali ( ce se ocupa efectiv cu ingrijirea pacientilor ) , doi specialisti IT , un expert P.R. , un operator de introducere a datelor , un contabil si un manager general.Astfel , am optat sa realizez o baza de date a firmei ce va cuprinde urmatoarele informatii: angajatii , medicii , pacientii , afectiunile acestora cat si tipurile de medicamente.

Schema bazei de dateANGAJATIID_ANGAJATPRENUMENUMEEMAILTELEFONDATA_ANGAJARESALARIULFUNCTIESEX

PACIENTIID_PACIENTNUMEPRENUMEDATA_NASTERIIADRESAID_ANGAJATID_MEDIC

MEDICIID_MEDICNUMEPRENUMEEMAILDATA_NASTERIISPECIALITATESEX

AFECTIUNICOD_AFECDENUMIREDATA_DIAGID_PACIENT

MEDICAMENTECOD_MEDDENUMIREDATA_EXPID_PACIENTPRET

Crearea Tabelelor1. AngajatiCREATE TABLE "ANGAJATI" ("ID_ANGAJAT" NUMBER(6,0) NOT NULL ENABLE, "PRENUME" VARCHAR2(20), "NUME" VARCHAR2(25), "EMAIL" VARCHAR2(25), "TELEFON" VARCHAR2(20), "DATA_ANGAJARE" DATE, "SALARIUL" NUMBER(8,2), "FUNCTIE" VARCHAR2(25), "SEX" VARCHAR2(1), CONSTRAINT "ANG_ID_ANGAJAT_PK" PRIMARY KEY ("ID_ANGAJAT") ENABLE, CONSTRAINT "ANG_EMAIL_UK" UNIQUE ("EMAIL") ENABLE, CONSTRAINT "ANG_DATA_ANG_NN" CHECK ("DATA_ANGAJARE" IS NOT NULL) ENABLE, CONSTRAINT "ANG_EMAIL_NN" CHECK ("EMAIL" IS NOT NULL) ENABLE, CONSTRAINT "ANG_NUME_NN" CHECK ("NUME" IS NOT NULL) ENABLE, CONSTRAINT "ANG_SALARIUL_MIN" CHECK (SALARIUL > 0) ENABLE )

2.MediciCREATE TABLE "MEDICI" ("ID_MEDIC" NUMBER NOT NULL ENABLE, "NUME" VARCHAR2(25), "PRENUME" VARCHAR2(25), "EMAIL" VARCHAR2(25), "DATA_NASTERII" DATE, "SPECIALITATE" VARCHAR2(25), "SEX" VARCHAR2(1), CONSTRAINT "ID_MEDIC_PK" PRIMARY KEY ("ID_MEDIC") ENABLE )/3.PacientiCREATE TABLE "PACIENTI" ("ID_PACIENT" NUMBER, "NUME" VARCHAR2(25), "PRENUME" VARCHAR2(25), "DATA_NASTERII" DATE, "ADRESA" VARCHAR2(50), "ID_ANGAJAT" NUMBER NOT NULL ENABLE, "ID_MEDIC" NUMBER, CONSTRAINT "PACIENTI_PK" PRIMARY KEY ("ID_PACIENT") ENABLE )/ALTER TABLE "PACIENTI" ADD CONSTRAINT "ID_ANGAJAT" FOREIGN KEY ("ID_ANGAJAT") REFERENCES "ANGAJATI" ("ID_ANGAJAT") ENABLE/ALTER TABLE "PACIENTI" ADD CONSTRAINT "ID_MEDIC" FOREIGN KEY ("ID_MEDIC") REFERENCES "MEDICI" ("ID_MEDIC") ENABLE/

4.AfectiuniCREATE TABLE "AFECTIUNI" ("COD_AFEC" NUMBER NOT NULL ENABLE, "DENUMIRE" VARCHAR2(25), "DATA_DIAG" DATE, "ID_PACIENT" NUMBER NOT NULL ENABLE, CONSTRAINT "COD_AFEC_PK" PRIMARY KEY ("COD_AFEC") ENABLE )/ALTER TABLE "AFECTIUNI" ADD CONSTRAINT "ID_PACIENT1" FOREIGN KEY ("ID_PACIENT") REFERENCES "PACIENTI" ("ID_PACIENT") ENABLE/

5.MedicamenteCREATE TABLE "MEDICAMENTE" ("COD_MED" NUMBER NOT NULL ENABLE, "DENUMIRE" VARCHAR2(25), "DATA_EXP" DATE, "ID_PACIENT" NUMBER, "PRET" NUMBER, CONSTRAINT "COD_MED_PK" PRIMARY KEY ("COD_MED") ENABLE )/ALTER TABLE "MEDICAMENTE" ADD CONSTRAINT "MEDICAMENTE_CON" FOREIGN KEY ("ID_PACIENT") REFERENCES "PACIENTI" ("ID_PACIENT") ENABLE/

Exemple de exercitiiExemple cu DDL1.S se redenumeasc tabela Afectiuni n Boli.Alter table afectiuni rename to boli

2. S se adauge n tabela Angajati coloana Adresa, avnd tipul VARCHAR2(25).Alter table angajati add (adresa varchar2(25));

3. S se adauge n tabela Angajati coloana AdresaAlter table angajati drop column adresa

Exemple cu DML4.Sa se modifice in tabela medici prenumele medicului cu id 301 in MariaUPDATE medici set prenume='Maria' where id_medic=301

5.Sa se majoreze cu 10% salariile angajatiilor cu functia de asistent medical UPDATE angajati set salariul=salariul*1.1 where functie='Asistent Medical'

6.Sa se schimbe in tabela medicamente denumirea medicamentului in Otirelax pentru pacientul cu id=206

UPDATE medicamente set denumire='Otirelax' where id_pacient=206

7.Sa se stearga din tabela boli, bolile cu denumirea: 'Fractura Picior'DELETE from boli where denumire='Fractura Picior'

8.Sa se adauge in tabela boli un nou rand cu valorile: '401','Fractura Mana Stanga','12/08/2013','210'

INSERT INTO boli values ( '401','Fractura Mana Stanga','12/08/2013','210')9.Sa se modifice in tabela boli ,denumirea carotenodermie cu alopecieUPDATE boli set denumire='Alopecie' where denumire='carotenodermie'

Exemple cu interogari10. Sa se selecteze toti angajitii din tabela AngajatiSELECT * from angajati ORDER BY ID_ANGAJAT

11.Sa se selecteze numele si prenumele pacientilor de la specialitatea neurologieSelect nume , prenume from pacienti where id_medic in ( Select id_medic from medici where specialitate='Neurologie' ) ;

12.Sa se selecteze numele , prenumele si salariul angajatilor cu functia specialist itSELECT nume , prenume , salariul from angajati where functie='Specialist IT' ;

13. Sa se afiseze media salariilor tuturor angajatiilorSelect AVG(salariul) from angajati

14.Sa se afiseze nume prenume si boala tuturor pacientilorSelect a.nume, a.prenume, b.denumirefrom pacienti a , boli b where a.id_pacient=b.id_pacient;

15. Sa se afiseze denumirea medicamentelor care expira in anul 2015Select denumire from medicamente where extract (year from data_exp)=2015;

16.Sa se afisezele numele angajatilor care incep cu N.Select nume from angajati where nume like 'N%';

17. Sa se afiseze numele , prenumele pacientilor care sunt la cardiogieSelect a.nume , a.prenume from pacienti a where a.id_medic in ( select b.id_medic from medici b where specialitate='Cardiologie' )

18. Sa se afiseze pretul maxim, pretul mediu, pretul minim si pretul total al medicamentelorSelect TRUNC(AVG(PRET)) , MAX(PRET) , MIN(PRET) , SUM(PRET) from medicamente;

19. Sa se afiseze vechimea tuturor angajatilorSELECT nume,prenume, ROUND((sysdate-data_angajare)/365) Ani FROM angajati

20. Sa se afiseze nume , prenume si data nasterii tuturor pacientilor. Data se va afia detipul: DD.MM.YYSELECT nume , prenume ,TO_CHAR( data_nasterii, DD.MM.YYYY) from pacienti

21. Sa se scrie pentru pacientul cu id 202 pacient aproape sanatos , pentru pacientul cu id 205 pacient bolnav , iar pentru pacientul cu id 209 pacient in stare criticaSELECT nume , prenumeDECODE ( id_pacient, 202, pacient aproape sanatos, 204, pacient bolnav, 208, pacient in stare critica) Stare_pacientFROM pacienti

22. Sa se afiseze ce persone din angajati si medici sunt de sex masculineSELECT nume , prenume, sex, functie ocupatieFrom angajati where sex='M'UNIONSELECT nume , prenume, sex, specialitateFROM medici where sex='M';

EXEMPLE CU OBIECTE ALE BAZEI DE DATE23. Sa se creeze o tabela virtual cu toti angajatii de sex feminineCREATE VIEW angajati_femei ASSELECT * FROM angajati WHERE SEX='F'

24 Sa se creeze un index pe tabela angajati pe coloana numeCREATE INDEX angajati_nume ON angajati(nume);

25. Sa se vizualizeze indexul creatSELECT * FROM user_indexes;

26. Sa se stearga indexulDROP INDEX angajati_nume;

27. Sa se creeze un sinonim pentru tabela mediciCREATE SYNONyM doctori FOR medici

28. Sa se vizualizeze sinonimeleSELECT * FROM user_synonyms

29. Sa se stearga sinonimul creat anteriorDROP SYNONYM doctori