UNIVERSITATEA PETROL GAZE PLOIEŞTI FACULTATEA DE LITERE ŞI ŞTIINŢE TEHNOLOGII AVANSATE PENTRU PRELUCRAREA INFORMAŢIEI
GRUPA 41303 BAESCU IONUT COSMIN
BAZE DE DA DATE TE MUL MULTIME TIMEDIA: DIA:
COSMETICE - DISTRIBUITOR ORIFLAME
PROFESOR COORDONATOR : MONICA VLADOIU 1
I.
Descrierea problemei propuse (a scenariului aplicaţ iei)
Aplicaţia care face obiectul acestui proiect se numeşte " . cosmetice - distribuitor gen AVON ". Aceasta aplicaţie îşi propune să gestioneze o bază de date care să memoreze informaţii despre clienţii si distribuitorii firmei Oriflame, care se ocupă cu distribuirea de produse cosmetice, dar şi despre produsele pe care firma le are către vânzare. Tipuri de obiecte multimedia relevante domeniului ales:
Obiecte tip text. În acest tip de obiecte se vor găsi informații precum:denumirea si descrierea produselor.
Obiecte tip imagine. În acest tip de obiecte se vor găsi imagini ale produselor cosmetice.(si distribuitori)
Obiecte tip multimedia.
Obiecte tip audio.
Baza de date va conţine cel puţin cinci obiecte multimedia simple (imagine, video şi
sunet) şi cinci obiecte multimedia compuse (text cu imagini încorporate) - descriere – împreună cu metadatele ce le caracterizează. II.
Modelarea conceptuală a bazei de date
O formă a viitoarei scheme corespunzătoare bazei de date, va conţine mulţimile entitate:clienti, distribuitori, produse, descriere, oferte, imagini, video, audio, categorii, subcategorii. Între aceste mulţimi entitate există diverse asocieri. Se vor preciza de
asemenea conectivităţile acestor legături:
Distribuitorii vand produse catre client, iar clientul poate cumpara de la unul sau mai multi distribuitori (m,m)
Produsele sunt grupate in subcategorii(m,1), iar subcategoriile sunt grupate in categorii(m,1)
Produsele pot avea oferte(1,m)
Produsul este descris de imagini(1,m) ,de audio (1,m) , de video (1,m)
Produsele sunt prezentate in descriere (1,1)
2
DIAGRAMA ENTITATE LEGATURA
III.
Implementarea bazei de date multimedia
Pasul următor constă în transformarea diagramei entitate-legătură prezentate anterior, în schema bazei de date relaţionale. Schema relaţională a bazei de date ce conţine informaţii despre cosmetice, include următoarele relaţii : o
Produse : COD_prod,Nume,Disponibil, Pret(ron),Volum ;
o
Distribuitori : ID_distr, Nume, Telefon, Email, Oras, Zona;
o
Clienti : ID_client, Nume, Data_nasterii, Adresa, Oras, Telefon, Email, Prod_cumparate, ID_distribuitor;
o
Descriere : ID_descriere, format, Cod_produs, Descriere;
o
Oferte : ID_oferta, Nume, Data_start, Data_end, Pentru, Reducere(%), Bonus, Pret_redus;
o
Subcategorii : ID_subcateg, Nume, COD_produs;
o
Categorii : ID_cat, Nume, ID_subcateg;
o
Audio : ID_audio, Nume, Durata, Format, Audio,ID_prod;
3
o
Imagini : ID_imag, Nume, Tip_imag, COD_prod, Imagine, RezolutieX, RezolutieY;
o
-
Video : ID_video, Nume, Durata(sec), Format, Video, COD_prod; Pentru : se refera la codul produsului
În continuare va fi prezentat codul PostgreSQL corespunzător fiecărei scheme în parte, împreună cu print screen-uri ale acestora după ce au fost introduse o serie de date de intrare.
Crearea bazei de date “oriflame”
CREATE DATABASE oriflame WITH OWNER = postgres ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'English_United States.1252' LC_CTYPE = 'English_United States.1252' CONNECTION LIMIT = -1;
Crearea mulţimii entitate “Produse”:
CREATE TABLE "Produse" ( "COD_prod" serial NOT NULL, "Nume" character(300),
4
"Disponibil" boolean, "Pret(ron)" numeric, "Volum" text, CONSTRAINT prod_pk PRIMARY KEY ("COD_prod" ), CONSTRAINT "p-sb" FOREIGN KEY ("COD_prod") REFERENCES "Subcategorii" ("ID_subcateg") MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE ) WITH ( OIDS=FALSE ); ALTER TABLE "Produse" OWNER TO postgres; CREATE INDEX "fki_p-sb" ON "Produse" USING btree ("COD_prod" );
Crearea mulţimii entitate “Distribuitori”:
CREATE TABLE "Distribuitori" ( "ID_distr" serial NOT NULL, "Nume" character(200), "Telefon" numeric(10,0), "Email" text, "Oras" character(200), "Zona" text, "Poza" oid, CONSTRAINT distr_pk PRIMARY KEY ("ID_distr" )
5
) WITH ( OIDS=FALSE ); ALTER TABLE "Distribuitori" OWNER TO postgres; CREATE INDEX "fki_d-c" ON "Distribuitori" USING btree ("ID_distr" );
Crearea mulţimii entitate “Clienti”:
CREATE TABLE "Clienti" ( "ID_client" serial NOT NULL, "Nume" character(200), "Data_nasterii" date, "Adresa" text, "Oras" character(200), "Telefon" numeric(10,0), "Email" text, "Pro_cumparate" integer, "ID_distribuitor" integer, CONSTRAINT client_pk PRIMARY KEY ("ID_client" ), CONSTRAINT "c-d" FOREIGN KEY ("ID_client") REFERENCES "Distribuitori" ("ID_distr") MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE ) WITH (
6
OIDS=FALSE ); ALTER TABLE "Clienti" OWNER TO postgres; CREATE INDEX "fki_c-d" ON "Clienti" USING btree ("ID_client" );
Crearea mulţimii entitate “Oferte”:
CREATE TABLE "Oferte" ( "ID_oferta" serial NOT NULL, "Nume" text, "Data_start" date, "Data_end" date, "Pentru" text, "Reducere(%)" numeric, "Bonus" text, "Pret_redus" numeric, CONSTRAINT "oferta_PK" PRIMARY KEY ("ID_oferta" ), CONSTRAINT "o-p" FOREIGN KEY ("ID_oferta") REFERENCES "Produse" ("COD_prod") MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE ) WITH ( OIDS=FALSE ); ALTER TABLE "Oferte" OWNER TO postgres; CREATE INDEX "fki_o-p" ON "Oferte" USING btree ("ID_oferta" );
7
Crearea mulţimii entitate “Subcategorii”:
CREATE TABLE "Subcategorii" ( "ID_subcateg" serial NOT NULL, "Nume" text, "COD_produs" integer, CONSTRAINT subcateg_pk PRIMARY KEY ("ID_subcateg" ) ) WITH ( OIDS=FALSE ); ALTER TABLE "Subcategorii" OWNER TO postgres; CREATE INDEX "fki_sb-p" ON "Subcategorii" USING btree ("ID_subcateg" );
8
Crearea mulţimii entitate “Categorii”:
CREATE TABLE "Categorii" ( "ID_cat" serial NOT NULL, "Nume" text, "ID_subcategorie" integer, CONSTRAINT cat_pk PRIMARY KEY ("ID_cat" ), CONSTRAINT "cat-sb" FOREIGN KEY ("ID_cat") REFERENCES "Subcategorii" ("ID_subcateg") MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE ) WITH ( OIDS=FALSE ); ALTER TABLE "Categorii" OWNER TO postgres; CREATE INDEX "fki_c-sb" ON "Categorii" USING btree ("ID_cat" ); CREATE INDEX "fki_cat-sb" ON "Categorii" USING btree ("ID_cat" );
Crearea mulţimii entitate “Descriere”:
CREATE TABLE "Descriere" (
9
"ID_descriere" serial NOT NULL, format character(5), "COD_prod" serial NOT NULL, "Descriere" oid, CONSTRAINT "descriere_PK" PRIMARY KEY ("ID_descriere" ), CONSTRAINT "d-p" FOREIGN KEY ("ID_descriere") REFERENCES "Produse" ("COD_prod") MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE ) WITH ( OIDS=FALSE ); ALTER TABLE "Descriere" OWNER TO postgres; CREATE INDEX "fki_d-p" ON "Descriere" USING btree ("ID_descriere" );
Inserarea propiu-zisă a documentului text în câmpul Descriere de tip oid , s-a facut la
urmă, după introducerea tuturor metadatelor caracteristice, cu o comandă de tipul celei de mai jos, pentru fiecare intrare a tabelului: UPDATE "Descriere" SET "Descriere"=lo_import('C:\baza mea de date\Document.docx’) WHERE "ID_descriere" =1;
10
Crearea mulţimii entitate “Imagini”:
CREATE TABLE "Imagini" ( "ID_imag" serial NOT NULL, "Nume" text, "Tip_imag" text, "COD_prod" serial NOT NULL, "Imagine" oid, "RezolutieX" numeric, "RezolutieY" numeric, CONSTRAINT imag_pk PRIMARY KEY ("ID_imag" ), CONSTRAINT "i-p" FOREIGN KEY ("ID_imag") REFERENCES "Produse" ("COD_prod") MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE ) WITH ( OIDS=FALSE ); ALTER TABLE "Imagini" OWNER TO postgres; CREATE INDEX "fki_i-p" ON "Imagini" USING btree ("ID_imag" );
11
Crearea mulţimii entitate “Audio”:
CREATE TABLE "Audio" ( "ID_audio" serial NOT NULL, "Nume" text, "Durata(sec)" integer, "Format" text, "Audio" oid, "COD_prod" integer, CONSTRAINT audio_pk PRIMARY KEY ("ID_audio" ), CONSTRAINT "a-p" FOREIGN KEY ("ID_audio") REFERENCES "Produse" ("COD_prod") MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE ) WITH ( OIDS=FALSE ); ALTER TABLE "Audio" OWNER TO postgres; CREATE INDEX "fki_a-p" ON "Audio" USING btree ("ID_audio" );
Inserarea propiu-zisă a fișierului audio în câmpul audio de tip oid , s-a facut la urmă,
după introducerea tuturor metadatelor caracteristice, cu o comandă de tipul celei de mai jos, pentru fiecare intrare a tabelului: UPDATE "Audio" SET Audio=lo_import('C:\baza mea de date\oriflame3.mp4 ') WHERE ID_audio=1;
Crearea mulţimii entitate “video”:
CREATE TABLE "Video"
12
( "ID_video" serial NOT NULL, "Nume" text, "Durata(sec)" integer, "Format" text, "Video" oid, "COD_prod" integer, CONSTRAINT video_pk PRIMARY KEY ("ID_video" ), CONSTRAINT "v-p" FOREIGN KEY ("ID_video") REFERENCES "Produse" ("COD_prod") MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE ) WITH ( OIDS=FALSE ); ALTER TABLE "Video" OWNER TO postgres; CREATE INDEX "fki_v-p" ON "Video" USING btree ("ID_video" );
IV.
Implementarea interogarilor
În încheiere se vor implementa un set de operaţii asupra datelor menite să exemplifice următoarele tipuri de interogări: text, imagine, audio şi video. Pentru fiecare interogare în parte, se va afişa răspunsul primit : 1. Să se exporte în folderul "C:\BAZA", sub denumirea de " poza" imaginea cu id-ul 4 şi să se afişeze numele și codul produsului căruia îi corespunde imaginea. 13
SELECT "Produse"."Nume", "Produse"."COD_prod", lo_export ("Imagine",'C:\BAZA\poza.jpg') FROM public."Produse", public."Imagini" WHERE "Imagini"."ID_imag" = 4 AND "Imagini"."COD_prod" = "Produse"."COD_prod";
2. Să se exporte în folderul "C:\BAZA", sub denumirea de "descriere" descrierea produsului cu pretul mai mic sau egal de 30 ron şi să se afişeze numele,descrierea(oid),formatul descrierii si pretul produsului SELECT "Produse"."Nume", "Descriere"."Descriere", "Descriere".format, "Produse"."Pret(ron)", lo_export ("Descriere",'C:\BAZA\descriere.docx') FROM public."Produse", public."Descriere" WHERE
14
"Descriere"."COD_prod" = "Produse"."COD_prod" AND "Produse"."Pret(ron)" <= 30;
3. Să se afişeze numele produsului si videoclipului, durata video, video(oid), numele clientului si distribuitorului,orasul pentru :distribuitorul sa fie din acelasi oras precum clientul. SELECT "Produse"."Nume", "Video"."Nume", "Video"."Video", "Video"."Durata(sec)", "Clienti"."Nume", "Distribuitori"."Nume", "Distribuitori"."Oras" FROM public."Video",
15
public."Produse", public."Clienti", public."Distribuitori" WHERE "Clienti"."ID_distribuitor" = "Distribuitori"."ID_distr" AND "Distribuitori"."Oras" = "Clienti"."Oras" AND "Produse"."COD_prod" = "Video"."COD_prod";
4. Sa se afiseze audio(oid),formatul audio si numele produslui pentru Cod_produs <=16 SELECT "Produse"."Nume", "Audio"."Audio", "Audio"."Format" FROM public."Produse", public."Audio" WHERE "Produse"."COD_prod" <= 16 AND
16
"Audio"."COD_prod" = "Produse"."COD_prod";
5. Să se afişeze numele produsului si categoriei din care face parte, imagine(oid)si formatul imaginii pentru produsele la care exista imagini in baza de date. SELECT "Produse"."Nume", "Categorii"."Nume", "Imagini"."Imagine", "Imagini"."Tip_imag" FROM public."Subcategorii", public."Categorii", public."Produse", public."Imagini" WHERE "Imagini"."COD_prod" = "Produse"."COD_prod" AND "Produse"."COD_prod" = "Subcategorii"."COD_produs" AND "Subcategorii"."ID_subcateg" = "Categorii"."ID_subcategorie"
17
18