Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
laboratoare:laborator00b [2015/10/09 07:11] Andrei Roșu-Cojocaru [Activitate de Laborator] |
laboratoare:laborator00b [2015/10/18 19:55] (current) Andrei Roșu-Cojocaru [Activitate de Laborator] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Laborator 00 (partea a II-a) ====== | ====== Laborator 00 (partea a II-a) ====== | ||
| - | ====== Sistemului de Gestiune pentru Baze de Date. MySQL ====== | + | ====== Sisteme de Gestiune pentru Baze de Date. MySQL ====== |
| ===== Obiective ==== | ===== Obiective ==== | ||
| Line 1969: | Line 1969: | ||
| Un client este identificat prin cod numeric personal, nume, prenume, adresa, telefon, email. Presupunând că librăria dispune şi de o platformă on-line pentru achiziţii, pentru fiecare client se vor reţine tipul (administrator / client) și credențialele sub forma unui nume de utilizator și a unei parole. Cu excepţia numărului de telefon, nici un câmp nu poate fi vid. Pentru email trebuie să se respecte formatul ''username@domain.country''. | Un client este identificat prin cod numeric personal, nume, prenume, adresa, telefon, email. Presupunând că librăria dispune şi de o platformă on-line pentru achiziţii, pentru fiecare client se vor reţine tipul (administrator / client) și credențialele sub forma unui nume de utilizator și a unei parole. Cu excepţia numărului de telefon, nici un câmp nu poate fi vid. Pentru email trebuie să se respecte formatul ''username@domain.country''. | ||
| - | **1.** Să se afişeze conţinutul tabelei care conține cărțile comercializate în librărie. Pentru fiecare carte se va afişa identificatorul, titlul şi autorii, denumirea colecției, denumirea editurii, numărul de ediție și anul tipăririi precum și denumirea țării. Întrucât o carte poate avea mai mulţi autori, se va folosi funcţia de grup ''GROUP_CONCAT'', a cărei sintaxă este: <code> GROUP_CONCAT([DISTINCT] expr [,expr ...] | + | O schemă conceptuală a bazei de date descrisă mai sus din punct de vedere funcțional poate fi următoarea: |
| + | |||
| + | {{ :laboratoare:laborator00b:aipi2015-lab00b-conceptualscheme.png?nolink&800 }} | ||
| + | |||
| + | **1.** Să se cloneze în directorul de pe discul local conținutul depozitului la distanță de la [[https://www.github.com/aipi2015/Laborator00|]]. În urma acestei operații, directorul ''Laborator00'' va trebui să conțină subdirectoarele ''samples'' și ''labtasks'', fișierele ''README.md'' și ''LICENSE''. <code> | ||
| + | student@aipi2015:~$ git clone https://www.github.com/aipi2015/Laborator00 | ||
| + | </code> | ||
| + | |||
| + | **2.** Să se ruleze, în ordine, script-urile: | ||
| + | * ''aipi2015-lab00b-DDL.sql'' care conține instrucțiunile necesare pentru definirea bazei de date ''bookstore''; | ||
| + | * ''aipi2015-lab00b-DML.sql'' care conține instrucțiunile necesare pentru popularea tabelelor din baza de date ''bookstore''. | ||
| + | Se poate folosi utilitarul MySQL Workbench sau fișierele se pot încărca cu ajutorul unui client MySQL, fie prin redirectarea intrării, fie prin folosirea comenzilor ''source'' sau ''\.''. | ||
| + | |||
| + | <note important>Operația de populare a bazei de date poate dura o perioadă de timp semnificativă datorită numărului mare de înregistrări.</note> | ||
| + | |||
| + | **3.** Să se afişeze conţinutul tabelei care reține cărțile comercializate în librărie. Pentru fiecare carte se va afişa identificatorul, titlul şi autorii, denumirea colecției, denumirea editurii, numărul de ediție și anul tipăririi precum și denumirea țării. Întrucât o carte poate avea mai mulţi autori, se va folosi funcţia de grup ''GROUP_CONCAT'', a cărei sintaxă este: <code> GROUP_CONCAT([DISTINCT] expr [,expr ...] | ||
| [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] | [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] | ||
| [SEPARATOR str_val]) | [SEPARATOR str_val]) | ||
| </code> | </code> | ||
| - | **2.** Să se majoreze cu 15% preţul cărţilor care sunt disponibile în mai mult de trei formate diferite. Să se afișeze cărțile pentru care s-au majorat prețurile, grupate pe formate. Informațiile care vor fi vizualizate sunt identificatorul cărții, titlul și subtitlul, denumirea formatului, prețul actualizat. | + | **4.** Să se majoreze cu 15% preţul cărţilor care sunt disponibile în mai mult de trei formate diferite. Să se afișeze cărțile pentru care s-au majorat prețurile, grupate pe formate. Informațiile care vor fi vizualizate sunt identificatorul cărții, titlul și subtitlul, denumirea formatului, prețul actualizat. |
| - | **3.** Să se afişeze toate cărţile unui autor, fie că le-a redactat singur, fie că acestea au mai mulţi autori.\\ Să se afișeze, în cadrul aceleiași interogări, numărul de volume elaborate, precizându-se numărul celor la care e unic autor şi al celor pe care le-a realizat colaborând cu alţi autori.\\ Vor fi incluși doar autorii care au elaborat mai mult de 4 titluri din care mai mult de 2 sunt individuale. | + | **5.** Să se afişeze toate cărţile unui autor, fie că le-a redactat singur, fie că acestea au mai mulţi autori.\\ Să se afișeze, în cadrul aceleiași interogări, numărul de volume elaborate, precizându-se numărul celor la care e unic autor şi al celor pe care le-a realizat colaborând cu alţi autori.\\ Vor fi incluși doar autorii care au elaborat mai mult de 4 titluri din care mai mult de 2 sunt individuale. |
| - | **4.** Să se șteargă din baza de date acei scriitori pentru care nu se găsește nici o carte în baza de date. | + | **6.** Să se șteargă din baza de date acei scriitori pentru care nu se găsește nici o carte în baza de date. |
| - | **5.** Să se creeze o rutină stocată pe server (funcție) care determină valoarea unei facturi.\\ Folosind această rutină stocată, să se identifice primii trei clienţi în funcţie de volumul tranzacţiilor din librărie. | + | **7.** Să se creeze o rutină stocată pe server (funcție) care determină valoarea unei facturi.\\ Folosind această rutină stocată, să se identifice primii trei clienţi în funcţie de volumul tranzacţiilor din librărie. |
| - | **6.** Să se creeze o rutină stocată pe server (procedură) care calculează suma tuturor facturilor pentru un client, aceasta fiind întoarsă sub forma unui parametru. | + | **8.** Să se creeze o rutină stocată pe server (procedură) care calculează suma tuturor facturilor pentru un client, aceasta fiind întoarsă sub forma unui parametru. |
| - | **7.** Folosind doar rutina stocată și având acces doar la tabela de utilizatori, să se determine utilizatorul pentru care suma facturilor este cea mai mare. | + | **9.** Folosind doar rutina stocată și având acces doar la tabela de utilizatori, să se determine utilizatorul pentru care suma facturilor este cea mai mare. |
| - | //Indicație//. Este necesar să se folosească un cursor. | + | <spoiler|Indicații de Rezolvare> |
| + | Este necesar să se folosească un cursor. | ||
| + | </spoiler> | ||
| - | **8.** Să se implementeze un trigger la actualizarea tabelei ce conține diferitele formate în care sunt dispuse cărțile, astfel încât atunci când este modificat prețul, dacă acesta depășește media prețurilor celorlalte cărți având același format, să se modifice prețul la valoarea mediei, afișându-se și un mesaj corespunzător. | + | **10.** Să se implementeze un trigger la actualizarea tabelei ce conține diferitele formate în care sunt dispuse cărțile, astfel încât atunci când este modificat prețul, dacă acesta depășește media prețurilor celorlalte cărți având același format, să se modifice prețul la valoarea mediei, afișându-se și un mesaj corespunzător. |
| ===== Resurse ====== | ===== Resurse ====== | ||
| Line 2002: | Line 2019: | ||
| ===== Soluții ===== | ===== Soluții ===== | ||
| - | TODO | + | [[https://github.com/aipi2015/Laborator00/blob/master/solutions/aipi2015-lab00b-solutions.sql|Rezolvări]] |
