Documente Academic
Documente Profesional
Documente Cultură
FEAA
PROIECT
BAZE DE DATE
Studenta:Niculescu-Ramona
Anul de studii II
Grupa2
Cerinte
proiectarea unei baze de date relaţionale (BD va conţine minim 3
tabele). Se vor preciza:
o elementele componente ale bazei de date: tabele, relaţii,
restricţii, vizualizări. Structura fiecărei tabele se va prezenta
sub formă de tabel unde se vor menţiona: numele atributelor,
tipul de date, lungimea, alte informaţii relevante.
o etapele parcurse pentru proiectarea BD
o normalizarea BD (primele trei forme normale)
o diagrama entitate-relaţii pentru BD proiectată
implementarea BD în MySQL (se vor exemplifica instrucţiunile SQL
folosite):
o crearea BD
o interogarea BD pe o singură tabelă folosind pseudonime,
criterii de filtrare, sortare, operatori de comparare, logici,
conjunctivi, aritmetici (se vor folosi una sau mai multe
instrucţiuni de interogare care să cuprindă cerinţele de mai
sus)
o interogarea BD pe o singură tabelă folosind funcţii
matematice, pentru caractere, de agregare, clauza Group By
(se vor folosi una sau mai multe instrucţiuni de interogare
care să cuprindă cerinţele de mai sus)
o interogarea BD pe tabele multiple folosind uniuni cu clauza
Join (cel puţin o interogare de tip innerjoin, left outer join şi
right outer join)
o interogarea BD folosind auto-uniuni (dacă este posibil)
o interogarea BD folosind subinterogări
o interogarea BD folosind funcţii SQL avansate (cel puţin 4
funcţii)
o crearea unei vizualizări
o interogarea BD folosind expresia CASE
o actualizarea BD (adăugare, modificare, ştergere).
Rezolvare
O prima analiza asupra cerintelor de date ale unui magazin online de acest gen
duce la urmatoarea schema de date ce vor retine informatiile utile din cadrul
sistemului:
Client
PK ID_client
Nume_login
Parola
Nume
Prenume
Evaluare Adresa Comanda
de catre / are are / de catre
Email PK ID_comanda
PK ID
Client
PK ID_client
Nume_login
Parola
Nume
Prenume
Evaluare Adresa Comanda
de catre / are are / de catre
Email PK ID_comanda
PK ID
Titlu
Editura Scriere
Categorie
Cuvinte_cheie PK ID_sc
Imagine cu / pentru
Relatie_carti Pret FK1 ISBN
pentru / este in Detalii FK2 ID_autor
PK ID
pentru / este in Cantitate An
FK1 ISBN1
FK2 ISBN2
Similaritate a lui / de catre
Autor_carte
PK ID_autor
Nume
Prenume
Titlu_academic
Luam in calcul varianta stergerii campului Editura din tabela Carte si
crearea unei tabele noi Aparitie (ID, ISBN, ID_editura) si a unei tabele
Editura(ID, Nume, Adresa, Webpage). Tabelele Carte si Editura s-ar lega in
acest caz printr-o relatie unu-la-multi de tabela Aparitie. Acest caz nu este
totusi just, deoarece o carte nu poate aparea in ani diferiti cu acelasi ISBN,
pentru aceeasi editura (ISBN este un numar unic de identificare ce specifica
atat tara, cat si editura, nr de editie etc.). Asadar, se va adopta solutia
urmatoare: se creaza doar tabela Editura (ID, Nume, Adresa, Webpage) ca
tabela parinte pentru Carte. Astfel, campul Carte.Editura (de tip varchar)
devine ID_Editura (de tip integer) si reprezinta cheie externa catre tabela
Editura. Se creaza astfel o relatie unu-la-multi intre Editura-Carte, evitandu-se
astfel hardcodarea valorilor pentru Editura in tabela Carte:
Client
PK ID_client
Nume_login
Parola
Nume
Prenume
Evaluare Adresa Comanda
de catre / are are / de catre
Email PK ID_comanda
PK ID
Titlu
FK1 ID_Editura Scriere
Categorie
Cuvinte_cheie PK ID_sc
Imagine cu / pentru
Relatie_carti Pret FK1 ISBN
pentru / este in Detalii FK2 ID_autor
PK ID
pentru / este in Cantitate An
FK1 ISBN1
FK2 ISBN2
Similaritate
a lui / de catre
de la / are
Autor_carte
Editura
PK ID_autor
PK ID_ed
Nume
Nume Prenume
Adresa Titlu_academic
Webpage
Campul Cuvinte_cheie din tabela Carte este compus din multe
elemente atomice - keyword-uri - separate prin virgula. Acest fapt ar ingreuna
extragerea unui anumit keyword, de exemplu pentru efectuarea unei cautari
pe baza lui: ar fi nevoie de extragerea informatiei din camp, apoi parsarea sau
separarea cuvintelor, dupa care extragerea keyword-ului dorit. Pentru evitarea
acestui lucru se poate apela la o noua tabela Keyword (Nume, Vizibilitate) ce
contine date despre fiecare tag utilizat, si inca o tabela Descriere ce face
legatura multi-la-multi intre tabelele Keyword si Carte. Aparent aceasta solutie
complica schema BD, dar de fapt se simplifica mult sarcina de procesare a tag-
urilor pe partea aplicatiei.
Tabela Keyword: campul Vizibilitate ofera posibilitatea unui tag de a fi vizibil
sau ascuns (cenzurat):
Client
PK ID_client
Nume_login
Parola
Nume
Prenume
Evaluare Adresa Comanda
de catre / are are / de catre
Email PK ID_comanda
PK ID
Descriere
Editura
PK ID
PK ID_ed a lui / de catre
este in / contine FK2 Nume_kw
FK1 ISBN Nume
Adresa
Webpage Autor_carte
PK ID_autor
Keyword
Nume
PK Nume
Prenume
Titlu_academic
Vizibilitate
In continuare, campul Cantitate din tabela Carte ar putea fi transferat
intr-o noua tabela, Stoc (ID, ISBN, Cantitate, Ultima_actualiz.), pentru o mai
buna structurare a schemei. Campul ISBN este cheie externa ce leaga de tabela
Carte, iar campul Ultima_actualiz. retine ultima data de modificare in stocul
respectiv:
Client
PK ID_client
Nume_login
Parola
Nume
Prenume
Evaluare Adresa Comanda
de catre / are are / de catre
Email PK ID_comanda
PK ID
Descriere
Editura a lui / de catre
PK ID
descrie / contine
contine / este in PK ID_ed
este in / contine FK2 Nume_kw
FK1 ISBN Nume
Adresa Autor_carte
Webpage PK ID_autor
Vizibilitate ISBN
Cantitate
Ultima_actualiz.
Client
PK ID_client
Nume_login
Parola
Nume
Prenume
Evaluare Adresa Comanda
de catre / are are / de catre
Email PK ID_comanda
PK ID
Descriere Editura
PK ID PK ID_ed
a lui / de catre
descrie / contine
are / pentru contine / este in Nume
este in / contine FK2 Nume_kw
Adresa
FK1 ISBN
Webpage
Autor_carte
PK ID_autor
(18,'bots_world','george','manea','abcfgef','bots_world@yahoo.com','craiova,romania'
);
Interogarea urmatoare selecteaza atat cartile din anul 2008 cat si cele
din 2009, folosind o constructie UNION:
(select carte.*
from carte
where carte.An_aparitie=2007)
union
(select carte.*
from carte
where carte.An_aparitie=2008)
update client
set parola='abcg'
where Nume_login='absa03'
update relatie_carti
set Similaritate=0.7
where Id_rel=15