Sunteți pe pagina 1din 23

Universitatea din Craiova

FEAA

PROIECT
BAZE DE DATE

Studenta:Niculescu-Ramona

Secţia Informatică Economică

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

Se va proiecta baza de date pentru o librarie online. Baza de date contine


informatii despre cartile existente pe stoc, clientii inregistrati pe situl librariei,
precum si informatii despre comenzile si cumpararile efectuate de catre clienti.
Deasemenea, in cadrul librariei online clientii inregistrati pot efectua
comentarii in cadrul fiecarei carti, pot acorda voturi acestora; la fiecare carte
afisata, un client primeste si recomandari din partea sistemului, recomandari ce
includ carti asemanatoare cu cartea vizualizata in acel moment de catre client.

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 Carte Comanda Relatie_carti Evaluare


--------------- ------------ ------------ ---------------- --------------
ID_client ISBN ID_comanda ID ID_client
Nume_login Titlu ID_client ISBN1 ISBN
Parola Autori ISBN ISBN2 Punctaj
Nume An_aparitie Cantitate Similaritate Titlu
Prenume Editura Data Comentariu
Adresa Categorie
Email Cuvinte_cheie
Imagine
Pret
Detalii
Cantitate

 Tabela Client - retine datele despre un client inregistrat in sistem. Structura


tabelei este prezentata in tabelul urmator:

Nume atribut Tip de date Proprietati speciale Descriere


ID_client Integer cheie primara, unica ID-ul unic al unui client
NOT NULL
Nume_login Varchar(50) NOT NULL nickname-ul de
autentificare pentru
client
Parola Varchar(20) NOT NULL parola de autentificare
pentru client
Nume Varchar(50) NOT NULL numele clientului
Prenume Varchar(50) NOT NULL prenumele clientului
Email Varchar(50) - adresa electronica a
clientului

 Tabela Carte - retine datele despre cartile existente in stoc

Nume atribut Tip de date Proprietati speciale Descriere


ISBN Varchar(11) Cheie primara, cod unic de inregistrare
NOT NULL pentru o carte; include
referinte catre
tara,editura,editia de
emitere a cartii
Titlu Varchar(50) - titlul volumului
Autori Varchar(100) - autorii cartii
An_aparitie Integer(4) - anul de aparitie a cartii
Editura Varchar(50) NOT NULL numele editurii emitente
Categorie Varchar(50) - categoria din care face
parte cartea
Cuvinte cheie Varchar(50) - cuvinte cheie care descriu
cartea
Imagine Varchar(200) - hiperlink sau path catre
imaginea cu coperta cartii
Pret Float NOT NULL pretul cartii
Detalii Varchar(250) NOT NULL o descriere mai complexa
a cartii
Cantitate Integer - numarul de bucati
disponibile pe stoc

 Tabela Comanda - retine datele referitoare la comenzile de carti


efectuate de catre clienti

Nume atribut Tip de date Proprietati speciale Descriere


ID_comanda Integer cheie primara, id unic Identificator unic pentru
pentru tabela comanda
NOT NULL
ID_client Integer cheie externa catre Atributul face legatura cu
Client.ID_client tabela Client
ISBN Varchar(11) cheie externa catre Atributul face legatura cu
Carte.ISBN tabela Carte
Cantitate Integer - numarul de bucati
comandate de catre un
client in cadrul unei
comenzi
Data Date - data efectuarii comenzii

 Tabela Relatie_carti - retine indicii de similaritate pentru 2 carti


asemanatoare, necesar sistemului de filtrare colaborativa

Nume atribut Tip de date Proprietati speciale Descriere


ID Integer cheie primara identificator unic al relatiei
NOT NULL
ISBN1 Varchar(11) cheie externa identificator pentru prima carte din
NOT NULL relatie, leaga de tabela Carte
ISBN2 Varchar(11) cheie externa identificator pentru a doua carte din
NOT NULL relatie, leaga de tabela carte
Similaritate Float - retine o valoare reala ce exprima nivelul
de similaritate intre cartile din relatie;
valoarea poate fi calculata pe baza
matricii utilizator-element, in functie (de
exemplu) de voturile acordate de catre
utilizatorii anteriori

 Tabela Evaluare - retine informatiile legate de evaluarile si comentariile


altor utilizatori

Nume atribut Tip de date Proprietati speciale Descriere


ID Integer cheie primara identificator unic al
NOT NULL tabelei
ID_client Integer cheie externa leaga de tabela Client
NOT NULL
ISBN Varchar(11) cheie externa identificator pentru
NOT NULL cartea evaluata, leaga de
tabela Carte
Punctaj Integer - o nota acordata de un
utilizator/cumparator in
cadrul unei evaluari
Titlu Varchar(50) - un titlu acordat
evaluarii/comentariului
curent
Comentariu Varchar(250) - textul comentariului
 Proiectarea si normalizarea Bazei de Date

Pentru modelarea datelor s-a folosit reprezentarea prin diagrame ERD


(entity-relationship) de tip Crow’s Feet.
Initial schema cuprinde 5 tabele (cele 5 tabele discutate mai sus), dupa care
acestea vor fi extinse, se vor face modificari asupra campurilor si relatiilor,
ajungandu-se in final la un model ce exprima cat mai bine si intr-un mod cat
mai corect realitatea, ce poate fi usor transformat intr-un model relational si
implementat apoi intr-o baza de date.

 Schema cu necesitatile de baza ale datelor sistemului este reprezentata


mai jos:

Client

PK ID_client

Nume_login
Parola
Nume
Prenume
Evaluare Adresa Comanda
de catre / are are / de catre
Email PK ID_comanda
PK ID

FK1 ID_Client FK1 ID_client


FK2 ISBN FK2 ISBN
Carte Cantitate
Punctaj din / de
Titlu pentru / are Data
PK ISBN
Comentariu
Titlu
Autori
An_aparitie
Editura
Categorie
Cuvinte_cheie
Relatie_carti Imagine
pentru / este in Pret
PK ID
Detalii
pentru / este in Cantitate
FK1 ISBN1
FK2 ISBN2
Similaritate

Tabelele Carte si Client sunt relationate prin alte 2 tabele intermediare,


ce exprima actiuni posibile asupra elementelor lor: tabela Comanda permite
inregistrarea de comenzi asupra cartilor de catre clienti, iar tabela Evaluare
permite adaugarea de informatii (comentarii) despre carti de catre utilizatori
(clienti). Atat tabela Carte cat si tabela Client sunt legate prin relatii de unu-la-
multi de tabelele Evaluare si Comanda, prin chei externe existente in aceste
ultime 2 tabele.

 Pentru evitarea informatiilor redundante si pentru o mai buna organizare


a datelor, se sterge campul Autori din tabela Carte si se construieste un tabel
dedicat Autor_carte. Pentru exprimarea unei relatii de multi-la-multi intre
tabelele Carte si Autori, ne vom folosi de inca un tabel auxiliar, Scriere. Relatia
intre acest din urma tabel si tabelele Carte si Autor_carte este de unu-la-multi.
Cheile externe Scriere.ISBN si Scriere.ID_autor vor referi cheile primare din
tabelele Carte respectiv Autor_carte. Se observa deasemenea si transferul
campului Carte.An_aparitie in Scriere.An:

Client
PK ID_client

Nume_login
Parola
Nume
Prenume
Evaluare Adresa Comanda
de catre / are are / de catre
Email PK ID_comanda
PK ID

FK1 ID_Client FK1 ID_client


FK2 ISBN FK2 ISBN
Punctaj Cantitate
Carte din / de Data
Titlu pentru / are
Comentariu PK ISBN

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

FK1 ID_Client FK1 ID_client


FK2 ISBN FK2 ISBN
Punctaj Cantitate
Carte din / de Data
Titlu pentru / are
Comentariu PK ISBN

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

FK1 ID_Client FK1 ID_client


FK2 ISBN FK2 ISBN
Punctaj Cantitate
Titlu Carte Data
pentru / are
Comentariu
PK,FK2 ISBN
din / de
Titlu
Relatie_carti descrie / contine FK1 ID_Editura Scriere
PK ID Categorie
pentru / este in Imagine de la / are PK ID_sc
FK1 ISBN1 Pret
FK2 ISBN2 pentru / este in Detalii cu / pentru FK1 ISBN
Similaritate Cantitate FK2 ID_autor
An

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

FK1 ID_Client FK1 ID_client


FK2 ISBN FK2 ISBN
Punctaj Cantitate
Titlu Data
pentru / are Carte
Comentariu
din / de
PK,FK2 ISBN
Scriere
Relatie_carti Titlu
FK1 ID_Editura PK ID_sc
PK ID de la / are
Categorie cu / pentru
pentru / este in
Imagine FK1 ISBN
FK1 ISBN1 Pret FK2 ID_autor
pentru / este in
FK2 ISBN2 Detalii An
Similaritate

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

Keyword Stoc Nume


Prenume
PK Nume PK ID Titlu_academic

Vizibilitate ISBN
Cantitate
Ultima_actualiz.

 Pentru a adauga persistenta datelor colectiei de produse, se sterge


campul Pret din tabela Carte si se adauga o noua tabela dedicata Preturi.
Tabela Preturi va contine un camp ce va retine o data de inceput si una de
sfarsit (optionala). Data de sfarsit pentru un row din tabela va fi egala cu data
de inceput pentru row-ul urmator. Solutia, desi adauga o nota de complexitate
asupra schemei, va permite efectuarea de cautari intre 2 date introduse,
utilizand operatorul "between", si deasemenea permite versionarea si
mentinerea unui istoric al preturilor:

Client
PK ID_client

Nume_login
Parola
Nume
Prenume
Evaluare Adresa Comanda
de catre / are are / de catre
Email PK ID_comanda
PK ID

FK1 ID_Client FK1 ID_client


FK2 ISBN pentru / are FK2 ISBN
Punctaj Cantitate
Titlu Data
Comentariu Carte
din / de
PK,FK2 ISBN
Relatie_carti Scriere
Titlu
PK ID FK1 ID_Editura de la / are PK ID_sc
pentru / este in Categorie
FK1 ISBN1 Imagine cu / pentru FK1 ISBN
pentru / este in
FK2 ISBN2 Detalii FK2 ID_autor
Similaritate An

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

Keyword Preturi Stoc Nume


Prenume
PK Nume PK ID_pr PK ID
Titlu_academic
Vizibilitate FK1 ISBN ISBN
Data_incep Cantitate
Pret Ultima_actualiz.
Data_sf

 Transformarea modelului ER intr-un model implementabil

Modelul ER prezentat mai sus poate fi usor transformat intr-un model


relational, care mai departe poate fi implementat intr-o baza de date, prin
generarea de cod SQL corespunzator. Mai jos este prezentata schema bazei de
date a sistemului, proiectata cu ajutorul instrumentului online
WWWSQLDesigner .

Codul SQL aferent schemei inainte de normalizare este prezentat in continuare.


 Crearea bazei de date

CREATE DATABASE LIBRARIE_ONLINE;


USE LIBRARIE ONLINE;
 Crearea tabelei Carte

CREATE TABLE carte(


ISBN varchar(11) NOT NULL,
Titlu varchar(50),
Autori varchar(100),
An_aparitie int,
Editura varchar(50) NOT NULL,
Categorie varchar(50),
Cuvinte_cheie varchar(50),
Imagine varchar(50),
Pret float NOT NULL,
Detalii varchar(250),
Cantitate int NOT NULL,
PRIMARY KEY(ISBN)
);

Inserarea de date in tabela Carte

INSERT INTO carte ( ISBN , Titlu , Autori , An_aparitie , Editura , Categorie


, Cuvinte_cheie , Imagine , Pret , Detalii , Cantitate ) VALUES
(1001234011,'Regele Tutankhamon','Zahi Hawass',2008,'Rao
Books','Enciclopedii','faraon,mormant,comori','img1.jpg',170.99,'Un exceptional
album fotografic care prezinta in detaliu fabuloasele comori descoperite in 1922 de
Howard Carter in mormantul faraonului Tutankhamon',5);

INSERT INTO carte ( ISBN , Titlu , Autori , An_aparitie , Editura , Categorie


, Cuvinte_cheie , Imagine , Pret , Detalii , Cantitate ) VALUES
(1014537833,'Vocile raului','John Saul',2008,'Rao
Books','Beletristica','rau,suflete','img2.jpg',34.19,'Exista locuri in care raul se
adaposteste, lucruri in care raul se impregneaza, suflete in care raul salasuieste.
In ce masura reuseste oricare dintre noi, ajuns intamplator in preajma raului, sa se
pastreze necorupt?',10);

INSERT INTO carte ( ISBN , Titlu , Autori , An_aparitie , Editura , Categorie


, Cuvinte_cheie , Imagine , Pret , Detalii , Cantitate ) VALUES
(1025543234,'Maestro','Stelian
Tanase',2007,'Polirom','Beletristica','maestro,scena','img3.jpg',39.99,'Maestro
poate fi asemuit cu o imensa scena. Una pe care se desfasoara un spectacol de multe
ori grotesc, trist si ironic, buf si serios. Autorul isi subintituleaza povestea o
melodrama',8);

INSERT INTO carte ( ISBN , Titlu , Autori , An_aparitie , Editura , Categorie


, Cuvinte_cheie , Imagine , Pret , Detalii , Cantitate ) VALUES
(1031234587,'Alexandru Macedon','A.
Weigall',2005,'Artemis','Istorie','rege,Macedonia','img4.jpg',6.03,'Din cuprins:
Ridicarea casei regale a Macedoniei,Imprejurarile nasterii lui Macedon,Copilaria lui
Alexandru su expansiunea Macedoniei',12);

INSERT INTO carte ( ISBN , Titlu , Autori , An_aparitie , Editura , Categorie


, Cuvinte_cheie , Imagine , Pret , Detalii , Cantitate ) VALUES
(1043472470,'Cine suntem','Dan
Puric',2006,'Platytera','Crestinism','om,gandire,trecut','img5.jpg',16.58,'Antrename
ntul de uitare la care este supus poporul roman, astazi, face ca gandirea si inima
sa se roteasca pe loc si, din aceasta rotire in gol, paradoxal, o data cu trecutul,
dispare si viitorul',4);
INSERT INTO carte ( ISBN , Titlu , Autori , An_aparitie , Editura , Categorie
, Cuvinte_cheie , Imagine , Pret , Detalii , Cantitate ) VALUES
(1054579845,'Managementul proiectelor','Wolfgang
Lessel',2007,'All','Economie','proiect,management','img6.jpg',10.43,'Cartea urmeaza
structura cronologica a unui proiect: de la planificarea prealabila pana la planul
structural al proiectului, adoptarea sa; planificarea in detaliu (a termenelor,
resurselor si a costurilor)',10);

INSERT INTO carte ( ISBN , Titlu , Autori , An_aparitie , Editura , Categorie


, Cuvinte_cheie , Imagine , Pret , Detalii , Cantitate ) VALUES
(1064345334,'Instalatii electrice','Rodica Dromereschi, Victor Gavril, Luigi
Ionescu',2007,'Mast','Stiinta si
Tehnica','electrice,instalatii','img7.jpg',12.75,'Cartea a fost conceputa ca un ghid
si suport informativ si aplicativ destinat tuturor celor care doresc sa realizeze
diverse lucrari electrice, de complexitate mica sau/si medi, in locuitele
personale',5);

INSERT INTO carte ( ISBN , Titlu , Autori , An_aparitie , Editura , Categorie


, Cuvinte_cheie , Imagine , Pret , Detalii , Cantitate ) VALUES
(1075454567,'Aventurile lui Tom Sawyer','Mark Twain',2003,'Steaua Nordului','Carti
pentru copii','tom,sawyer','img8.jpg',6,'Deocamdata nu exista o descriere la aceasta
carte',20);

INSERT INTO carte ( ISBN , Titlu , Autori , An_aparitie , Editura , Categorie


, Cuvinte_cheie , Imagine , Pret , Detalii , Cantitate ) VALUES
(1084543356,'Manual De Stil','Dana
Budeanu',2008,'Nemira','Diverse','budeanu,stil','img9.jpg',39.92,'Manual de stil va
invata cum sa purtati cele mai trasnite t-shirturi si piesele must have ale
sezonului, cum sa combinati piesele vestimentare aparent fara nici o legatura intre
ele',3);

INSERT INTO carte ( ISBN , Titlu , Autori , An_aparitie , Editura , Categorie


, Cuvinte_cheie , Imagine , Pret , Detalii , Cantitate ) VALUES
(1097556644,'Limba engleza fara profesor','Dan Dutescu',2001,'Niculescu','Limbi
straine','engleza,vorbita','img10.jpg',35,'Acopera o buna parte a vocabularului si
structurilor de baza ale limbii engleze vorbite si combina metodele de predare
traditionala, indelung incercate, cu tehnicile bazate pe tendintele recente in
predarea limbii engleze',12);

INSERT INTO carte ( ISBN , Titlu , Autori , An_aparitie , Editura , Categorie


, Cuvinte_cheie , Imagine , Pret , Detalii , Cantitate ) VALUES
(1103445654,'Izolarea termica a locuintelor','Florin
Mateescu',2007,'Mast','Stiinta si
Tehnica','termica,izolare','img11.jpg',8.25,'Volumul va ofera toate datele necesare
pentru a va face singuri calculul coeficientului global de izolare termica a
locuintelor',13);

INSERT INTO carte ( ISBN , Titlu , Autori , An_aparitie , Editura , Categorie


, Cuvinte_cheie , Imagine , Pret , Detalii , Cantitate ) VALUES
(1113445467,'Simbolismul Crucii','Rene
Guenon',2003,'Aion','Crestinism','simbolism,cruce','img12.jpg',20.5,'Simbolismul
metafizic al crucii,Directiile spatiului,Reprezentarea geometrica a stariilor
fiintei',7);

 Crearea tabelei Client


CREATE TABLE Client(
ID_client INTEGER NOT NULL,
Nume_login VARCHAR NOT NULL,
Nume VARCHAR NOT NULL,
Prenume VARCHAR NOT NULL,
Parola VARCHAR NOT NULL,
Email VARCHAR NOT NULL,
Adresa VARCHAR NOT NULL,
PRIMARY KEY (ID_client)
);

Inserarea de date in tabela Client:

INSERT INTO client ( ID_client , Nume_login , Nume , Prenume , Parola , Email


, Adresa ) VALUES
(10,'absa03','Borne','John','aaaa','absa@email.us','USA,California');

INSERT INTO client ( ID_client , Nume_login , Nume , Prenume , Parola , Email


, Adresa ) VALUES
(12,'gfh67','Green','Susan','bbbb','sus67@email.ca','USA,Canada');

INSERT INTO client ( ID_client , Nume_login , Nume , Prenume , Parola , Email


, Adresa ) VALUES
(31,'fred','Bitsen','Frederick','abvg','fred1@yahoo.com','Berlin,Germany');

INSERT INTO client ( ID_client , Nume_login , Nume , Prenume , Parola , Email


, Adresa ) VALUES
(14,'marian11','Cretu','Marian','cret11','cretu11@hotmail.com','Iasi,Romania');

INSERT INTO client ( ID_client , Nume_login , Nume , Prenume , Parola , Email


, Adresa ) VALUES
(15,'markee','Clarckson','Mark','abcv','mark2000@yahoo.co.uk','London,United
Knigdom');

INSERT INTO client ( ID_client , Nume_login , Nume , Prenume , Parola , Email


, Adresa ) VALUES
(16,'francois25','Etaine','Francois','fra25','fra25@hotmail.fr','Paris,France');
INSERT INTO client ( ID_client , Nume_login , Nume , Prenume , Parola , Email
, Adresa ) VALUES
(17,'gigelthebest','Spataru','Gigel','gggg','gigelbest@email.ro','Bucuresti,Romania'
);

INSERT INTO client ( ID_client , Nume_login , Nume , Prenume , Parola , Email


, Adresa ) VALUES

(18,'bots_world','george','manea','abcfgef','bots_world@yahoo.com','craiova,romania'
);

INSERT INTO client ( ID_client , Nume_login , Nume , Prenume , Parola , Email


, Adresa ) VALUES
(19,'billgates','Gates','Bill','bill','bill@gates.ro','Craiova, Romania');

 Crearea tabelei Comanda


CREATE TABLE comanda (
ID_comanda int NOT NULL,
ID_client int,
ISBN varchar(11),
Cantitate int,
Data date,
PRIMARY KEY(ID_comanda)
);
Inserarea de date in tabela Comanda:
INSERT INTO comanda ( ID_comanda , ID_client , ISBN , Cantitate , Data )
VALUES
(11,2,1001234012,3,'2008-12-28');

INSERT INTO comanda ( ID_comanda , ID_client , ISBN , Cantitate , Data )


VALUES
(2,2,1014537834,1,'2009-11-11');

INSERT INTO comanda ( ID_comanda , ID_client , ISBN , Cantitate , Data )


VALUES
(3,1,1025543234,1,'2007-12-18');

INSERT INTO comanda ( ID_comanda , ID_client , ISBN , Cantitate , Data )


VALUES
(4,4,1054579845,2,'2008-10-21');

INSERT INTO comanda ( ID_comanda , ID_client , ISBN , Cantitate , Data )


VALUES
(5,6,1001234012,3,'2009-05-26');

INSERT INTO comanda ( ID_comanda , ID_client , ISBN , Cantitate , Data )


VALUES
(6,6,1097556644,1,'2009-06-14');

INSERT INTO comanda ( ID_comanda , ID_client , ISBN , Cantitate , Data )


VALUES
(7,2,1031234587,1,'2010-03-15');

INSERT INTO comanda ( ID_comanda , ID_client , ISBN , Cantitate , Data )


VALUES
(8,4,1025543234,2,'2010-08-23');

INSERT INTO comanda ( ID_comanda , ID_client , ISBN , Cantitate , Data )


VALUES
(9,3,1014537834,4,'2008-01-17');

 Crearea tabelei Evaluare


CREATE TABLE evaluare(
ID_ev int NOT NULL,
ID_client int NOT NULL,
ISBN varchar(11) NOT NULL,
Punctaj int,
Titlu varchar(50),
Comentariu varchar(250),
PRIMARY KEY(ID_ev)
);

Inserarea de date in tabela Evaluare:


INSERT INTO evaluare (ID_ev,ID_client,ISBN,Punctaj,Titlu,Comentariu)
VALUES(1,1,1103445654,9,'merita','f buna cartea,merita citita');

INSERT INTO evaluare (ID_ev,ID_client,ISBN,Punctaj,Titlu,Comentariu)


VALUES(2,3,1103445654,3,'destul de buna','o recomand cu placere');

INSERT INTO evaluare (ID_ev,ID_client,ISBN,Punctaj,Titlu,Comentariu)


VALUES(3,2,1064345334,1,'ok','e pentru fanii genului');

INSERT INTO evaluare (ID_ev,ID_client,ISBN,Punctaj,Titlu,Comentariu)


VALUES(4,1,1043472470,9,'destul de buna','e ok');

INSERT INTO evaluare (ID_ev,ID_client,ISBN,Punctaj,Titlu,Comentariu)


VALUES(5,6,1043472470,3,'super','buna');

INSERT INTO evaluare (ID_ev,ID_client,ISBN,Punctaj,Titlu,Comentariu)


VALUES(6,1,1103445654,6,'destul de buna','e pentru fanii genului');

INSERT INTO evaluare (ID_ev,ID_client,ISBN,Punctaj,Titlu,Comentariu)


VALUES(7,4,1084543356,7,'misto','foarte tare');

INSERT INTO evaluare (ID_ev,ID_client,ISBN,Punctaj,Titlu,Comentariu)


VALUES(8,4,1103445654,3,'super carte','e pentru fanii genului');

INSERT INTO evaluare (ID_ev,ID_client,ISBN,Punctaj,Titlu,Comentariu)


VALUES(9,5,1064345334,8,'destul de buna','mi-a placut');

INSERT INTO evaluare (ID_ev,ID_client,ISBN,Punctaj,Titlu,Comentariu)


VALUES(10,2,1084543356,3,'slaba','nu o recomand');

 Crearea tabelei Relatie_carti:

CREATE TABLE relatie_carti(


ID_rel int NOT NULL,
ISBN1 varchar(11) NOT NULL,
ISBN2 varchar(11) NOT NULL,
Similaritate float,
PRIMARY KEY(ID_rel)
);

Inserarea de date in tabela Relatie_carti:

INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES


(1,1001234012,1014537834, 0 );

INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES


(2,1001234012,1025543234, 0.5 );

INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES


(3,1001234012,1031234587, 1 );

INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES


(4,1001234012,1043472470, 0.7 );

INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES


(5,1014537834,1025543234, 0 );
INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES
(6,1014537834,1031234587, 1 );
INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES
(7,1014537834,1043472470, 0.5 );

INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES


(8,1014537834,1054579845, 0.7 );

INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES


(9,1025543234,1084543356, 0 );

INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES


(10,1025543234,1064345334, 0.7 );

INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES


(11,1025543234,1043472470, 1 );

INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES


(12,1025543234,1103445654, 0.5 );

INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES


(13,1031234587,1054579845, 0 );

INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES


(14,1031234587,1064345334, 0.5 );

INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES


(15,1031234587,1084543356, 0.5 );

INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES


(16,1031234587,1097556644, 1 );

INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES


(17,1064345334,1113445467, 0 );

INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES


(18,1064345334,1103445654, 0.7);

 Crearea constrangerilor intre tabele:


ALTER TABLE evaluare ADD (CONSTRAINT EVALUARE_BRW_F1 FOREIGN KEY(ISBN) REFERENCES
CARTE(ISBN))

ALTER TABLE evaluare ADD (CONSTRAINT EVALUARE_BRW_F2 FOREIGN KEY(ID_client)


REFERENCES CLIENT(ID_client))

ALTER TABLE comanda ADD (CONSTRAINT COMANDA_BRW_F1 FOREIGN KEY(ISBN) REFERENCES


CARTE(ISBN))

ALTER TABLE comanda ADD (CONSTRAINT COMANDA_BRW_F2 FOREIGN KEY(ID_client) REFERENCES


CLIENT(ID_client))

ALTER TABLE relatie_carti ADD (CONSTRAINT RELATIECARTI_BRW_F1 FOREIGN KEY(ISBN1)


REFERENCES CARTE(ISBN))

ALTER TABLE relatie_carti ADD (CONSTRAINT RELATIECARTI_BRW_F2 FOREIGN KEY(ISBN2)


REFERENCES CARTE(ISBN))
 Efectuarea de interogari asupra bazei de date

 Interogarea urmatoare selecteaza titlul, autorii si pretul cartilor din


categoria Beletristica, care au aparut dupa anul 2005, si la care, daca li se
adauga un cuantum de 100 la pret acesta nu depaseste 2000; sortarea
rezultatelor se face dupa titlul cartii:

select carte.Titlu, carte.Autori, carte.Pret as Pretul_cartii


from carte
where carte.Categorie='Beletristica' and carte.An_aparitie>2005 and
carte.Pret+100<2000
order by carte.Titlu

 Interogarea de mai jos selecteaza totalul de carti in stoc si pretul mediu


pentru cartile care contin cuvantul 'gandire' in cadrul cuvintelor cheie:

select sum(carte.Cantitate) as Total_in_stoc, avg(carte.Pret) as Pret_mediu


from carte
where carte.Cuvinte_cheie like '%gandire%'

 Urmatoarea interogare afiseaza informatiile despre cartile care au fost


comandate dupa luna aprilie 2008, prin join-area tabelelor Carte si Comanda:
select carte.*, comanda.Data
from carte
inner join comanda on carte.ISBN=comanda.ISBN
where comanda.Data > '2008-04-30'

select carte.*, comanda.Data


from carte
left join comanda on carte.ISBN=comanda.ISBN
where comanda.Data > '2008-04-30'

select carte.*, comanda.Data


from carte
right join comanda on carte.ISBN=comanda.ISBN
where comanda.Data > '2008-04-30'

 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)

 Urmatoarea interogare afiseaza titlul cartii cu pretul maxim; se foloseste


o subinterogare pentru obtinerea pretului maxim pentru toate cartile
select carte.Titlu
from carte
where carte.Pret=(select max(carte.Pret) from carte)

 Urmatoarele interogari utilizeaza functii SQL avansate pentru afisarea de


informatii despre carti:

- se selecteaza comenzile efectuate de clienti in anul curent:


select comanda.*
from comanda
where year(comanda.Data)=year(now())

- se selecteaza prin inlocuire caracterul virgula cu caracter spatiu in


campul Cuvinte_cheie din tabela Carte:
select carte.Cuvinte_cheie,
replace(carte.Cuvinte_cheie,',',' ') AS Cuv_cheie
from carte

- selectez numele si prenumele concatenate pentru toti clientii din BD:

SELECT CONCAT_WS(' ', Nume, Prenume ) as 'Clienti'


FROM client
- selectez parola clientilor in forma criptata, astfel incat sa nu poata fi
dezvaluita de catre persoane neautorizate:

select MD5(client.Parola) from client

 Urmatoarea interogare creaza o vedere (view) dupa care efectueaza o


selectie pe datele din ea pentru a afisa nota medie primita de cartile care au
fost votate de clienti:

create view note_carti as


select carte.Titlu, avg(evaluare.Punctaj) as Nota
from carte inner join evaluare on evaluare.ISBN=carte.ISBN
group by carte.Titlu

select * from note_carti

 Interogarea de mai jos afiseaza asemanarea dintre carti folosind o


constructie CASE:
select relatie_carti.ISBN1,relatie_carti.ISBN2,
case relatie_carti.Similaritate
when 0 then 'diferite'
when 1 then 'foarte asemanatoare'
end as Asemanare
from relatie_carti

 Urmatoarele interogari efectueaza actualizari ale Bazei de Date, precum


inserari de noi date, modificari, si stergeri

- Inserarea de date in fiecare tabela este prezentata mai jos:


INSERT INTO carte ( ISBN , Titlu , Autori , An_aparitie , Editura , Categorie
, Cuvinte_cheie , Imagine , Pret , Detalii , Cantitate ) VALUES
(1421234012,'Circuite integrate,'John Kens',2010,'Rao Books','Stiinta si
tehnica','electronica, circuite, integrate','img13.jpg',150.55,'O bogata colectie de
scheme si circuite electronice pentru amatori si profesionisti',20);

INSERT INTO client ( ID_client , Nume_login , Nume , Prenume , Parola , Email


, Adresa ) VALUES
(10,'cli85','Clinton','Jerry','bwed','cli85@email.us','USA');

INSERT INTO comanda ( ID_comanda , ID_client , ISBN , Cantitate , Data )


VALUES
(10,6, 1421234012,4,'2010-12-18');

INSERT INTO evaluare (ID_ev,ID_client,ISBN,Punctaj,Titlu,Comentariu) VALUES(11,4,


1421234012,8,'complexa','e destul de complexa, imi place');
INSERT INTO relatie_carti (ID_rel,ISBN1,ISBN2,Similaritate) VALUES (19,1001234012,
1421234012, 0.5 );

- Modificarea de date din tabele, prin conditionarea unor inregistrari

Urmatoarea interogare modifica pretul pentru cartea cu ISBN-ul 1014537834:


update carte
set pret=36.99
where carte.ISBN='1014537834'

Modificarea parolei pentru un client caruia i se stie nickname-ul (numele de


autentificare):

update client
set parola='abcg'
where Nume_login='absa03'

Modificarea cantitatii (numarului) de carti comandate in cadrul comenzii cu id-


ul 7:
update comanda
set Cantitate=10
where Id_comanda=7

Modificarea punctajului acordat pentru cartii din cadrul evaluarii cu id-ul 1:


update evaluare
set Punctaj=10
where Id_ev=1

Modificarea factorului de similaritate pentru relatia cu id-ul 15:

update relatie_carti
set Similaritate=0.7
where Id_rel=15

- Stergerea de date din cadrul tabelelor

Urmatoarea interogare sterge toate cartile din categoria Beletristica:


delete from carte
where Categorie='Beletristica'
Urmatoarea interogare sterge un cont de client cu un anumit nickname:
delete from client
where Nume_login='markee'

Stergerea tuturor evaluarilor cu punctaj acordat mai mic decat 5:


delete from evaluare
where Punctaj<5

Stergerea comenzilor efectuate inainte de 1 ianuarie 2008:


delete from comanda
where Data<'2008-01-01'

Urmatoarea interogare sterge relatia dintre carti cu id-ul 18:


delete from relatie_carti
where ID_rel=18

S-ar putea să vă placă și