You are on page 1of 18

UNIVERSITATEA PETROL GAZE PLOIEŞTI

FACULTATEA DE LITERE ŞI ŞTIINŢE


TEHNOLOGII AVANSATE PENTRU PRELUCRAREA INFORMAŢIEI
GRUPA 41303
BAESCU IONUT COSMIN

BAZE DE DATE MULTIMEDIA:

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

You might also like