PROIECT BAZA DE DATE( PL SQL)

41
ACADEMIA DE STUDII ECONOMICE BUCUREȘTI  Proiect Baze de Date Gestiunea unei galerii de artă Clonda Alexandra,CSIE,seria A,grupa 1023 Ianuarie 2013

description

PROIECT IN PL SQL

Transcript of PROIECT BAZA DE DATE( PL SQL)

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    1/41

    ACADEMIA DE STUDII ECONOMICE BUCURETI

    Proiect Baze de Date

    Gestiunea unei galerii de art

    Clonda Alexandra,CSIE,seria A,grupa 1023

    Ianuarie 2013

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    2/41

    2

    1. Descrierea bazei de date

    Baza de date este format din patru tabele cu legturi ntre ele, pentru a asigura o

    implementare ct mai accesibil i mai potrivit a gestiunii operelor vndute ntr -o galerie deart.

    Cele patru tabele conin date despre expoziii, clieni, opere i artiti, astfel:

    - EXPOZIIE: codul expoziiei, numele expoziiei, data deschiderii, data nchiderii,adresa acesteia;

    - ARTITI: CNP artist, nume artist, adres, telefon, e-mail;- CLIENI: CNP client, nume client, adres, telefon, e-mail;- OPERE: codul operei, expoziia din care face parte, artistul care a realizat-o ,

    clientul care a cumprat-o, preul, data vnzrii.

    Legturile ntre tabele se fac prin intermediul tabelei OPERE, o oper avnd ca atribute

    (cheie strin compus) cnp-ul artistului, cnp-ul autorului i codul expoziiei.

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    3/41

    3

    2. Schema conceptual

    CLIENTI

    Cnp_client

    Nume

    Adresa

    Telefon

    e-mail

    EXPOZITII

    Cod_expozitie

    Data_deschiderii

    Data_inchiderii

    Nume

    Adresa

    OPERE

    Cod_opera

    Nume

    Cod_expozitieCnp_artist

    Cnp_client

    Data_vanzarii

    ARTISTI

    Cnp_artist

    Nume

    Adresa

    Telefon

    e-mail

    n

    nn

    11

    1

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    4/41

    4

    3. Operaii DDL

    3.1. Crearea tabelelor

    create table customers(cnp_client number(13) primary key,nume varchar2(40),adresa

    varchar2(50),telefon number(15),email varchar2(50));

    create table expozitii(cod_expo varchar2(20) primary key,nume varchar2(50),data_deschiderii date,data_inchiderii date,adresa varchar2(50));

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    5/41

    5

    create table artisti(cnp_artist number(13) primary key, nume varchar2(50), adresa varchar2(50),

    telefon number(15), email varchar2(50));

    create table opere(cod_opera number(15) primary key, denumire varchar2(50), pret number(7),

    cod_expo references expozitii(cod_expo), cnp_artist references artisti(cnp_artist), data_vanzarii date);

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    6/41

    6

    3.2. Actualizarea structurii tabelelor

    Schimbarea denumirii tabelei CUSTOMERS cu CLIENTI:alter table customersrename to clienti;

    Adugarea coloanei cnp_client n tabela OPERE:alter table opere add (cnp_client varchar2(50));

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    7/41

    7

    Modificarea tipului coloanei cnp_client din tabela OPERE, fcnd-o de tip numr:

    alter table opere modify(cnp_client number(13));

    Crearea unei legturi ntre tabela OPERE i tabela CLIENI prin intermediul atributulcnp_client (adugarea unei constrngeri de tip foreign key)

    alter table opere add(constraint fk_opere foreign key(cnp_client) references

    clienti(cnp_client));

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    8/41

    8

    Adugarea unei constrngeri care s impun ca preul operelor s fie mai mare dect 10: alter table opere add(constraint ck_pret check(pret>10));

    Setarea constrngerii anterioare (ck_pret) ca DISABLED (modificarea statusului):alter table opere add(constraint ck_pret check(pret>10));

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    9/41

    9

    4. Adugarea de nregistri n tabele

    Pentru tabela ARTITI:

    insert into artisti values('2890423295890','Maria Ionescu','Bucuresti, Bd. Magheru, nr. 50', '0213456798',

    '[email protected]');

    insert into artisti values('1780321678955', 'Ciobotea Andrei', 'Bucuresti, Bd. Regina Elisabeta, nr. 17',

    '0213456889', '[email protected]');

    insert into artisti values('2680312879445','Ionescu Paraschiva','Campina, Str. Alexandru Odobescu, nr. 23',

    '0244336754',null);

    insert into artisti values('1560321564665','Ghiteanu Petre','Ploiesti, Bd. Republicii, nr. 150', '0244556721',

    null);

    insert into artisti values('1600312543446','Vivian Dan','Braila, Str. Pacii, nr. 11', '0733453221',

    '[email protected]');

    insert into artisti values('2680319445343','Irimia Luminita','Targu Jiu, Bd. Constantin Brancusi, nr. 12',

    '0733451221', '[email protected]');

    insert into artisti values('1690423444534','Miclea Dragos','Filipestii de padure,Str. Centrala, nr. 45',

    '0766781234', '[email protected]');

    insert into artisti values('1561123455456','Gurzun Lucian','Bucuresti, Bd. Crangasi, nr. 120', '0213467556',

    '[email protected]');

    insert into artisti values('2750904589032','Papusoiu Mariana','Cluj-Napoca, Bd. Maracinelui, nr. 76',

    '0766543321', '[email protected]');

    insert into artisti values('1650323564454','Dan Cristian','Constanta, Str. Popa Tatu, nr. 554', '0732675342',

    '[email protected]');

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    10/41

    10

    Pentru tabela CLIENTI:

    insert into clienti values('1890423345654','Puricelu Ciprian','Bucuresti, Bd. Magheru, nr.

    540','0216756798',null);

    insert into clienti values('2890327678955','Banu Loredana','Ploiesti, Bd. Republicii, nr.

    172','0244765493','[email protected]');

    insert into clienti values('2870312879445','Ionescu Ioana','Campina, Str. Alexandru Odobescu, nr.

    29','0745221123',[email protected]);

    insert into clienti values('1700321564665','Bucurei Petru','Breaza, Str. Mare, nr. 150',null,null);

    insert into clienti values('1680312543446','Marinescu Dan','Braila, Str. Alexandru Ioan Cuza, nr.

    134','0733953221','[email protected]');

    insert into clienti values('2700319445343','Pioara Diana','Targu Mures, Bd. Constantin cel mare, nr.

    132','0722451221','[email protected]');insert into clienti values('1790423444534','Bucur Marian','Galati ,Str. Toamnei, nr.

    35','0765781234',null);

    insert into clienti values('1901123455456','Badiceanu Lucian','Campina, Str. B.P. Hasdeu, nr.

    10','0722467556','[email protected]');

    insert into clienti values('27509045778032','Popescu Mihaela','Crivina, Bd. Maracinilor, nr.

    796','0723543321',null);

    insert into clienti values('1750323564454','Popovici Cristian','Bucuresti, Str. Ion Agarbiceanu , nr.

    345','0733675342','[email protected]');

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    11/41

    11

    Pentru tabela EXPOZITII:

    insert into expozitii values('expo1','Naturi Statice', to_date('29/01/09 ',' dd/mm/yy'),to_date('25/02/09

    ',' dd/mm/yy'),'Sun Art Studio, Ioan Florescu 13, Bucuresti ');

    insert into expozitii values('expo2','Flori', to_date('12/01/07 ',' dd/mm/yy'),to_date('25/02/07 ','

    dd/mm/yy'),'Sun Art Studio, Ioan Florescu 13, Bucuresti ');

    insert into expozitii values('expo3','Portretul modern', to_date('15/02/09 ','

    dd/mm/yy'),to_date('15/04/09 ',' dd/mm/yy'),'Sun Art Studio, Ioan Florescu 13, Bucuresti ');

    insert into expozitii values('expo4','Parodii si caricaturi', to_date('01/01/09 ','

    dd/mm/yy'),to_date('01/07/09 ',' dd/mm/yy'),'Sun Art Studio, Ioan Florescu 13, Bucuresti ');

    insert into expozitii values('expo5','Feminin', to_date('01/03/08 ',' dd/mm/yy'),to_date('01/04/08 ','

    dd/mm/yy'),'Muzeul national de arta contemporana, Izvor, Bucuresti ');

    insert into expozitii values('expo6','Inaripari', to_date('20/09/08 ',' dd/mm/yy'),to_date('25/11/08 ','dd/mm/yy'), 'Muzeul national de arta contemporana, Izvor, Bucuresti ');

    insert into expozitii values('expo7','Miresme de primavara', to_date('10/03/09 ',' dd/mm/yy'),

    to_date('10/05/09 ',' dd/mm/yy'),'Galeria Veroniki Art, Intrarea Murmurului 2, Bucuresti ');

    insert into expozitii values('expo8','Pastele la romani', to_date('14/03/07 ','

    dd/mm/yy'),to_date('15/05/07 ',' dd/mm/yy'),'Sun Art Studio, Ioan Florescu 13, Bucuresti ');

    insert into expozitii values('expo9','Relativitati', to_date('17/01/09 ',' dd/mm/yy'),to_date('25/08/09 ','

    dd/mm/yy'), 'Muzeul national de arta contemporana, Izvor, Bucuresti ');

    insert into expozitii values('expo10','Pitoresc in peisajele romanesti', to_date('20/07/08 ',' dd/mm/yy'),

    to_date('27/10/08 ',' dd/mm/yy'), 'Galeria Veroniki Art, Intrarea Murmurului 2, Bucuresti ');

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    12/41

    12

    Pentru tabela OPERE:

    insert into opere values ('1', 'Trandafiri',450,'expo1', '2890423295890', to_date ('23/02/09',

    'dd/mm/yy'), '1790423444534');

    insert into opere values ('123', 'Flori de camp',350,'expo1', '2890423295890', to_date ('23/02/09',

    'dd/mm/yy'), '1790423444534');

    insert into opere values ('2', 'Prietenii','500','expo3','2890423295890',to_date('15-03-2009','dd-mm-

    rrrr'),'2700319445343');

    insert into opere values('3', 'Valea Prahovei','1100','expo10',' 1650323564454',to_date('25-08-

    2009','dd-mm-rrrr'),' 1750323564454');

    insert into opere values('4', 'Ioana','650','expo3',' 2750904589032',to_date('03-04-2009','dd-mm-

    rrrr'),' 1750323564454');

    insert into opere values('5', 'Timpul','1500','expo9',' 1561123455456',to_date('21-05-2009','dd-mm-rrrr'),' 1890423345654');

    insert into opere values('6', 'Intrinsec','1050','expo6',' 1690423444534',to_date('30-10-2008','dd-mm-

    rrrr'),' 1890423345654');

    insert into opere values('7', 'Presedintele','590','expo4',' 1780321678955',to_date('10-05-2009','dd-

    mm-rrrr'),' 1901123455456');

    insert into opere values('8', 'Apolitic','670','expo4',' 1560321564665',to_date('04-06-2009','dd-mm-

    rrrr'),'2700319445343');

    insert into opere values('9', 'Iarna pe malul marii','800','expo10',' 1650323564454',to_date('05-09-

    2008','dd-mm-rrrr'),' 1680312543446');

    insert into opere values('10', 'Pomi infloriti in Bucuresti','350','expo7',' 2680312879445',to_date('30-

    03-2009','dd-mm-rrrr'),' 1901123455456');

    insert into opere values('11', 'Invierea','700','expo8',' 2680312879445',to_date('12-04-2007','dd-mm-

    rrrr'),' 1680312543446');

    insert into opere values('12', 'El si ea','900','expo3',' 1560321564665',to_date('16-03-2009','dd-mm-

    rrrr'),' 2890327678955');

    insert into opere values('13', 'Ingerii','760','expo6',' 1650323564454',to_date('14-19-2008','dd-mm-

    rrrr'),' 2750904577832');

    insert into opere values('14', 'Ceahlaul','490','expo10',' 1780321678955',to_date('15-09-2008','dd-mm-

    rrrr'),' 2750904577832');

    insert into opere values('15', 'Pe malul Dunarii','900','expo10',' 2680319445343',to_date('15-08-

    2008','dd-mm-rrrr'),' 1700321564665');

    insert into opere values('16', 'Inlantuiri','1200','expo5',' 1780321678955',to_date('25-03-2008','dd-

    mm-rrrr'),'2700319445343');

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    13/41

    13

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    14/41

    14

    5. Modificarea datelor

    5.1. S se mreasc preul operelor cu 100 pentru operele care au preul mai mic

    de 500 RON

    update opere set pret=pret+100 where pret

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    15/41

    15

    nainte de modificare:

    Dup modificare: (4 rows updated)

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    16/41

    16

    5.2. S se reducpreul operelor din expoziia Pitoresc in peisajele romanesticu

    100.

    update opere

    set pret=pret-100

    where cod_expo=(select cod_expo from expozitii where lower(nume)='pitoresc in peisajele

    romanesti');

    nainte de modificare:

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    17/41

    17

    Dup modificare:

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    18/41

    18

    5.3. Pentru toi artitii care au cmpul email nul, s se adauge adresa de email

    [email protected]

    update artisti

    set email='[email protected]'

    where email is null;

    nainte de modificare:

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    19/41

    19

    Dup modificare:

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    20/41

    20

    5.4. S se modifice data vnzrii operelor din expoziia cu codul expo3,

    nlocuindu-se cu data nchiderii expoziiei respective.

    update opere

    set data_vanzarii=(select data_inchiderii from expozitii where cod_expo='expo3')

    where cod_expo='expo3';

    nainte de modificare:

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    21/41

    21

    Dup modificare:

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    22/41

    22

    5.5. S se modifice telefonul clientului cu cnp-ul egal cu 1901123455456. Noul

    numr de telefon va fi : 0244337491.

    update clienti

    set telefon='0244337491'

    where cnp_client='1901123455456';

    nainte de modificare:

    Dup modificare:

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    23/41

    23

    6. Interogri

    6.1. S se afieze operele care au preul ntre 500 i 1000, excluzndu-le pe cele cu preul

    de 700.

    select cod_opera, denumire, pret from opere

    where pret between 500 and 1000

    minus

    select cod_opera, denumire, pret from opere

    where pret=700;

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    24/41

    24

    6.2. S se afieze numele, adresa i telefonul artitilor care au 2 sau mai multe

    opere n galerie.

    select nume,adresa,telefon from artisti

    where cnp_artist in

    (select cnp_artist from opere

    group by cnp_artist

    having count(cnp_artist)>=2)

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    25/41

    25

    6.3. S se selecteze numele clienilor care au cumprat opere cu o valoare total

    mai mare de 1200.

    select nume from clienti

    where clienti.cnp_client in

    (select cnp_client

    from opere

    group by cnp_client

    having sum(pret)>=1200);

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    26/41

    26

    6.4. S se calculeze discountul pentru clieni n funcie de valoarea total cumprat astfel:

    -ntre 1000 i 1500 RON discountul reprezint 5% din valoarea total cumprat

    -ntre 1500 i 2000 RON discountul reprezint 10% din valoarea total cumprat

    - ntre peste 2000 RONdiscountul reprezint 15% din valoarea total cumprat

    select nume, sum(pret) val_totala, 0.05*sum(pret) discount

    from clienti, opere

    where clienti.cnp_client=opere.cnp_client

    group by nume

    having sum(pret) between 1000 and 1500

    unionselect nume, sum(pret) val_totala, 0.10*sum(pret) discount

    from clienti, opere

    where clienti.cnp_client=opere.cnp_client

    group by nume

    having sum(pret) between 1500 and 2000

    union

    select nume, sum(pret) val_totala, 0.15*sum(pret) discount

    from clienti, opere

    where clienti.cnp_client=opere.cnp_client

    group by nume

    having sum(pret)>=2000;

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    27/41

    27

    Rezolvare:

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    28/41

    28

    6.5. S se afieze artitii care nu au nici o oper momentan n gestiunea galeriei.

    select nume,artisti.cnp_artist

    from opere, artisti

    where opere.cnp_artist(+)=artisti.cnp_artist

    minus

    select nume, artisti.cnp_artist

    from opere, artisti

    where opere.cnp_artist=artisti.cnp_artist;

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    29/41

    29

    6.6. S se afieze numele, data deschiderii, adresa i numrul de expozani pentru

    expoziiile din anul 2009 care au 2 sau mai muli expozani.

    select nume, data_deschiderii, adresa , count(opere.cod_expo) numar_expozanti

    from expozitii,opere

    where expozitii.cod_expo = opere.cod_expo and extract (year from data_deschiderii) =

    '2009'

    group by nume,data_deschiderii,adresa

    having count(opere.cod_expo)>=2;

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    30/41

    30

    6.7. S se afieze artitii care au expuse 3 sau mai multe opere, dar i pe cei care au expuse opere in

    valoare de cel putin 1000 Ron.

    select nume,sum(pret) valoare_opere_expuse, count(cod_opera) numar_opere

    from artisti,opere

    where artisti.cnp_artist=opere.cnp_artist

    group by nume

    having sum(pret)>=1000

    union

    select nume,sum(pret) valoare_opere_expuse, count(cod_opera) numar_opere

    from artisti,opere where artisti.cnp_artist=opere.cnp_artist

    group by nume

    having count(cod_opera)>=3;

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    31/41

    31

    6.8. S se afieze numele, data deschiderii i durata n luni pentru expoziiile la care expune i

    artistul cu cnp-ul egal cu '2890423295890'.

    select nume, data_deschiderii, round(months_between(data_inchiderii,data_deschiderii))

    durata_in_luni

    from expozitii

    where cod_expo in (select cod_expo from opere where cnp_artist='2890423295890')

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    32/41

    32

    6.9. S se afieze din ce fel de reea de telefonie (fix saumobil) fac parte clienii.

    select nume,

    case substr(telefon,1,1)

    when '7' then 'retea mobila'

    else 'retea fixa'

    end tip_retea_telefoniefrom clienti

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    33/41

    33

    6.10. S se afieze numele i categoria din care face parte fiecare artist, lund n considerare

    anul naterii, astfel:

    - dac este nscut dup 1980, este considerat amator

    - dac este nscut ntre 1970 i 1980 este considerat de nivel mediu

    - dac este nscut nainte de 1970 este considerat profesionist

    select nume,

    case

    when to_number(substr(cnp_artist,2,2))>80 then 'artist amator'

    when to_number(substr(cnp_artist,2,2)) between 70 and 80 then 'artist de nivel mediu'

    else 'artist profesionist'

    end categorie_artist

    from artisti

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    34/41

    34

    6.11. S se afieze numele clienilor mpreun cu apelativul nfaa numelui (Domnul sau

    Doamna).

    select

    decode(substr(cnp_client,1,1),'1','Domnul','2','Doamna','neidentificat') apelativ,

    numefrom clienti

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    35/41

    35

    7. Gestiunea altor obiecte ale bazei de date: vederi, indeci, sinonime, secvene

    7.1. Tabele virtuale

    S se creeze o tabel virtual care s conin nregistrri din tabela OPERE care au un pre mai

    mic sau egal cu 500.

    create view tablouri_ieftine

    as select * from opere where pret

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    36/41

    36

    S se afieze valoarea total i numrul tablourilor cu preul mai mic sau egal cu 500 RON ,

    folosindu-se tabela virtual creat anterior.

    select sum(pret) val_tot_tablouri_ieftine,count(cod_opera) numar_tablouri_ieftine

    from tablouri_ieftine

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    37/41

    37

    7.2. Indeci

    S se creeze un index pentru atributul data_deschiderii din tabela EXPOZITII.

    create index datad_idx

    on expozitii(data_deschiderii)

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    38/41

    38

    S se tearg indexul datad_idx creat anterior.

    drop index datad_idx

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    39/41

    39

    7.3. Sinonime

    S se creeze sinonimul AUTORI pentru tabela ARTITI.

    create synonym autori

    for artisti;

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    40/41

    40

    S se selecteze datele din tabela ARTISTI folosind sinonimul AUTORI.

    select * from autori

  • 5/25/2018 PROIECT BAZA DE DATE( PL SQL)

    41/41

    41

    7.4. Secvene

    S se creeze o secven care s permit introducerea de date n tabela expozitii astfel nct codurile

    expozitiilor s ia valori n intervalul (1,1000), consecutiv.

    create sequence secv_expo

    start with 1

    increment by 1

    max value 1000

    no cycle