Proiect SQL Avansat- Stefan Stan

Embed Size (px)

Citation preview

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    1/29

    Academia de Studii Economice

    Facultatea de Cibernetic, Statistic i Informatic Economic

    SISTEME DE BAZE DE DATEProiect SQL Avansat

    Indrumtor: Lect.Univ. Dr. Anda Belciu

    Student: Stan tefan Antoniu

    Master E-Business

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    2/29

    1. Descrierea bazei de date si schema conceptuala

    Tabelele create formeaz o baz de date care ajut la monitorizarea activitii celor mai mari si

    importante spitale din Bucuresti si din tara. Baza de date este format din treitabele: SPITALE, DOCTORI si

    PACIENTI. Legturile dintre aceste tabele sunt realizate prin mai multe chei externe.

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    3/29

    2- Exerciii cu funcii analitice

    Sa se afiseze numarul total de doctori si suma salariilor acestora, din fiecare spital, pentru doctorii

    care castiga cu +/- 1500 fata de cel current.

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    4/29

    Sa se afiseze numarul total de pacienti care au fost consultati inainte de cel current, pentru fiecare

    spital

    .

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    5/29

    Sa se afiseze salariul minim si maxim al doctorilor din acelasi spital.

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    6/29

    Sa se afiseze salariul minim, respectiv maxim al doctorilor din acelasi spital,

    cu salarii mai mari sau egale cu cel curent.

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    7/29

    Sa se afiseze numarul total de doctori, indiferent de spital, care castiga cu +/-1000 fata de cel current

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    8/29

    Sa se afiseze salariul mediu al doctorilor din acelasi spital intre care exista diferenta de salariu de +/-

    1000 fata de cel curent.

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    9/29

    Sa se afiseze pretul mediu al consultatiei, inaintea celui curent, in cadrul aceluiasi spital

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    10/29

    Sa se afiseze pretul mediu al consultatiei, dupa cel curent, din acelasi spital

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    11/29

    Sa se afiseze salariul mediu din fiecare spital, comparat cu salariul fiecarui doctor

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    12/29

    3.Aplicarea algoritmilor de optimizare a cererilor de regsire

    Sa se afiseze numele, prenumele si salariul doctorilor din fiecare spital.

    Interogarea returneaza de fiecare data 26 de inregistrari.

    a) Interogare fara algoritm

    COST = 2

    TASK COMPLETED = 0.01

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    13/29

    b) Interogare folosind algoritmul Hash

    COST = 5

    TASK COMPLETED = 0.021

    c) Interogare folosind algoritmul Nested Loops

    COST = 2

    TASK COMPLETED = 0.011

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    14/29

    d) Interogare folosind algoritmul Sort Merge Joins

    COST = 3

    TASK COMPLETED = 0.015

    e) Interogari folosind algoritmii Outer JoinE.1 Interogare outer join fara algoritm

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    15/29

    COST = 3

    TASK COMPLETED = 0.015

    E.2 Interogare outer join folosind algoritmul Nested Loops

    COST = 3

    TASK COMPLETED = 0.018

    E.3 Interogare outer join folosind algoritmul Hash

    COST = 5

    TASK COMPLETED = 0.02

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    16/29

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    17/29

    4. Aplicarea tehnicilor de indexare

    Sa se afiseze toti doctorii al caror nume incepe cu litera S.

    Cererea de regasire fara un index :

    Cererea de regasire cu index :

    Se observa faptul ca interogarea fara index genereaza un cost egal cu 2, pe cand cea care utilizeaza un

    index genereaza un cost egal cu 0.

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    18/29

    Sa se afiseze toate informatiile, inclusiv denumirea spitalului in care lucreaza, despre doctorii care au

    salariul intre 2500 si 7000.

    Cerere de regasire fara index :

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    19/29

    Cerere de regasire folosind index :

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    20/29

    5. Aplicarea tehnicilor de partiionare

    Pentru evidentierea tehnicilor de partitionare au fost create trei tabele : DOCTORI_P_1 tabela

    nepartitionata, DOCTORI_P_2 tabela care contine patru partitii in functie de salariul doctorilor si

    DOCTORI_P_3tabela care e partitionata in functie de salariul doctorilor si subpartitionata in functie de

    spitalul in care lucreaza fiecare dintre acestia.

    CREATE TABLE "DOCTORI_P_1"("COD_DOCTOR" NUMBER PRIMARY KEY, "nume"VARCHAR2(40), "prenume" VARCHAR2(60), "salariu" number(5),"cost_consultatie" NUMBER(4), "COD_SPITAL_A" number(4));

    CREATE TABLE "DOCTORI_P_2"("COD_DOCTOR" NUMBER PRIMARY KEY, "nume"VARCHAR2(40),"prenume" VARCHAR2(60), "salariu" number(5),

    "cost_consultatie" NUMBER(4), "COD_SPITAL_A" number(4))

    partition by range ("salariu")

    (partition QT1 values less than (1000),

    partition QT2 values less than (2500),

    partition QT3 values less than (4000),

    partition QT4 values less than (10000));

    CREATE TABLE "DOCTORI_P_3"("COD_DOCTOR" NUMBER PRIMARY KEY, "nume"VARCHAR2(40), "prenume" VARCHAR2(60), "salariu" number(5),"cost_consultatie" NUMBER(4), "COD_SPITAL_A" number(4))

    partition by range ("salariu")

    subpartition by list (cod_spital_a)

    (partition QT1 values less than (1000)

    (subpartition QT1_1 values (1,2,3,4,5),

    subpartition QT1_2 values (6,7,8,9,10)),

    partition QT2 values less than (2500)

    (subpartition QT2_1 values (1,2,3,4,5),

    subpartition QT2_2 values (6,7,8,9,10)),

    partition QT3 values less than (4000)

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    21/29

    (subpartition QT3_1 values (1,2,3,4,5),

    subpartition QT3_2 values (6,7,8,9,10)),

    partition QT4 values less than (10000)

    (subpartition QT4_1 values (1,2,3,4,5),

    subpartition QT4_2 values (6,7,8,9,10)));

    Aceste tabele au fost populate cu inregistrarile din tabela DOCTORI.

    Insert into doctori_p_1 select * from doctori;

    Insert into doctori_p_2 select * from doctori;

    Insert into doctori_p_3 select * from doctori;

    Partitiile din tabelele DOCTORI_P_2 si DOCTORI_P_3 pot fi vizualizate :

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    22/29

    Interogari pe baza partitiilor :

    I) Sa se afiseze toti doctorii care au salariul intre 1500 si 2500. (fara a utiliza partitiile)

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    23/29

    Se observa ca nu exista diferente intre rezultate.

    II) Sa se afiseze toti doctorii care au salariul intre 1500 si 2500. (utilizand partitia QT2)Obs ! Tabela DOCTORI_P_1 nu poate fi verificata pentru ca nu este partitionata.

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    24/29

    III) Sa se afiseze doctorii care au salariul intre 1000 si 2500 si lucreaza in spitalele cu codul 1,3sau 5 (fara partitii - se returneaza 6 inregistrari).

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    25/29

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    26/29

    IV) Sa se afiseze doctorii care au salariul intre 1000 si 2500 si lucreaza in spitalele cu codul 1,3sau 5 (folosind partitia QT2 - se returneaza 6 inregistraritabela DOCTORI_P_1 nu poate fi

    interogata).

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    27/29

    V) Sa se afiseze doctorii care au salariul intre 1000 si 2500 si lucreaza in spitalele cu codul 1,3sau 5 (folosind partitia QT2_1 - se returneaza 6 inregistrari tabelele DOCTORI_P_1 s

    DOCTORI_P_2 nu pot fi interogate).

    Rezultatele obtinute nu sunt cele mai elocvente din cauza dimensiunilor reduse ale bazei de date

    si a numarului redus de inregistrari. Se poate observa totusi faptul ca interogarile sunt mai eficiente pentru

    tabela DOCTORI_P_3 care contine sub-partitii. Aproape la acelasi nivel de eficienta este si tabela

    DOCTORI_P_2 care contine patru partitii si cea mai putin eficienta este tabela DOCTORI_P_1, care nu

    este partitionata.

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    28/29

    6. Aplicarea clusterizrii

    I) Crearea clusterului si a indexului :create cluster clust1 (cod_spital number(4));

    create index idx_cluster on cluster clust1;

    II) Crearea si popularea tabelelor in clustercreate table spitale_cluster (cod_spital number(4) primary key,denumire varchar2(50), oras varchar2(30), nr_angajati number(4),nr_doctori number(4), capacitate_maxima number(4) ) clusterclust1(cod_spital);

    create table doctori_cluster(cod_doctor number(4), "nume"VARCHAR2(40),"prenume" VARCHAR2(60), "salariu" number(5),"cost_consultatie" NUMBER(4), "cod_spital" number(4))clusterclust1("cod_spital");

    alter table doctori_cluster add constraint fk_prod foreignkey("cod_spital") references spitale_cluster(cod_spital);

    Insert into spitale_cluster select * from spitale;Insert into doctori_cluster select * from doctori;

    III) Sa se afiseze numele si prenumele doctorilor, dar si denumirea spitalului unde lucreaza.select s.cod_spital,s.denumire,d."nume",d."prenume"from spitale_cluster s, doctori_cluster dwhere s.cod_spital=d."cod_spital";

    cost = 15timp = 0.083

  • 7/22/2019 Proiect SQL Avansat- Stefan Stan

    29/29