Sunteți pe pagina 1din 27

Universitatea din Bucuresti

Facultatea de Matematica-Informatica
Departamentul de Tehnologii
Specializarea: Tehnologia Informatiei

Proiectarea
bazelor de date

Bucuresti 2011

Cuprins

I.
II.

III.

IV.

V.

VI.

VII.

Introducere in Proiectarea Bazelor de Date


Prezentarea modelului si a regulilor acestuia
.
1. Notiuni generale
2.Prezentarea modelului firmei de inchirieri autovehicule g3o Car
Rental
Diagrama E/R ..................
..
1. Prezentare
2. Reguli pentru proiectarea diagramei Entitate-Relatie (E/R)
3. Algoritmul pentru proiectarea diagramei entitate-relatie
4. Descrierea diagramei entitate-relatie
5. Relatiile intre entitati. Gradul si cardinalitatea unei relatii
Diagrama conceputala....................
..
1. Descriere
2. Cheile primare
3. Cheile externe (straine)
Schema
relationala

Algebra
relationala .........................................................................................
1. Prezentare
2. Operatorul PROJECT
3. Operatorul SELECT
4. Operatorul UNION
5. Operatorul INTERSECT
7. Operatorul PRODUCT
8. Operatorul DIVISION
9. Operatorul JOIN NATURAL JOIN, -JOIN, SEMI-JOIN, OUTERJOIN
Normalizarea
datelor .....................................................................................

I.

Introducere in Proiectarea Bazelor de Date

La inceput, calculatoarele au fost utilizate numai pentru calcule aritmetice. Prin


cresterea vitezei de calcul, prin cresterea de memorare a datelor, prin adaugarea
unor noi componente performante de intrare - iesire, prin dezvoltarea unor limbaje
de programare s-a ajuns acum la prelucrarea intr-un timp scurt a unei mari cantitati
de informatii. Organizarea si gestionarea acestor informatii se face la nivelul bazelor
de date.
O baza de date, uneori numita si "banca de date", contine toate informatiile
necesare despre obiectele ce intervin intr-o multime de aplicatii, relatiile logice intre
aceste informatii si tehnici de prelucrare corespunzatoare. In bazele de date are loc
o integrare a datelor, in sensul ca mai multe fisiere sunt privite in ansamblu,
eliminandu-se pe cat posibil informatiile redundante. De asemenea, se permite
accesul simultan la aceleasi date, situate in acelasi loc sau distribuite spatial, a mai
multor persoane de pregatiri diferite, fiecare cu stilul personal de lucru, cu
posibilitatea regasirii rapide a acestora.
Cel mai raspandit tip de baze de date este cel relational, in care datele sunt
memorate in tabele. Pe langa tabele, o baza de date relationala mai poate contine:
indecsi, proceduri stocate, declansatori, utilizatori si grupuri de utilizatori, tipuri de
date, mecanisme de securitate si de gestiune a tranzactiilor etc.
Sistemul de structurare a datelor care intervine cel mai frecvent este tabelul, iar in
cazul volumelor mari vorbim depre baze de date.
Exemplul tipic, intuitiv si putin mai simplu, este cel al organizarii cartilor intr-o
biblioteca. Asa numitul catalog care ne permite noua sau bibliotecarului sa gasim
cartea dorita, pornind doar de la titlul ei, de la numele autorului sau chiar de la
cateva alte indicii mai marunte.

Proiectarea unei baze de date


Proiectarea bazelor de date presupune fixarea structurii bazei de date si a metodelor
de prelucrare a datelor. Daca in mod obisnuit bazele de date isi schimba frecvent
continutul, structura bazei de date ramane nemodificata pe lungi perioade de timp.

Prin proiectare se determina modul semantic care sa reflecte cat mai fidel posibil
lumea reala, construita astfel :
- se identifica o multime de concepte semantice(entitati, tipuri de entitati,
proprietati ale entitatilor, indicatori, relatii intre entitati) ce dau informatii despre
lumea reala;
- se asociaza obiecte simbolice prin care sunt reprezentate conceptele semantice;
- se defineste o multime de operatori ce pot sa transforme obiectele simbolice.

Etapele construirii unei baze de date :

- studiul de fezabilitate ce consta in cercetarea sistemala existenta si evaluarea


costurilor pe diversele alternative;
- cercetarea sistemului existent (tipuri de date, dimensiuni);
- analiza sistemului si proiectarea sistemului;
- dezvoltarea sistemului;
- implementarea sistemului;
- revizuire si intretinere.

Problemele Proiectarii Bazelor de Date


Construirea unei aplicatii care sa manipuleze informatii dintr-o baza de date
presupune atat intelegerea principiilor de organizare a bazelor de date, a limbajului
SQL, dar si observarea atenta a structurii de date in discutie, a cerintelor si a tipului
clientilor, a specificului informatiilor (frecventa de modificare, complexitatea, tipul
frecvent de cautari - selectii, dimensiunea estimata a bazei de date ... cautand
modalitatea de a grupa datele pentru o cat mai eficienta manevrare, dar si pentru a
le asigura o cat mai buna protectie.
Baza de date poate fi organizata ca un singur tabel de mari dimensiuni, sau ca un
set de tabele mici, care sunt legate dupa o schema pe care proiectantul trebuie sa o
aleaga si s-o impuna. Tot o baza de date relationala va rezulta, uneori clientul nici nu
va sesiza diferenta, beneficiarul principal al unei organizari judicioase fiind
administratorul bazei de date.

II.

Prezentarea modelului si a regulilor acestuia

1. Notiuni generale
O baza de date reprezinta un ansamblu de date integrat, anume structurat si
dotat cu o descriere a acestei structuri. Descrierea structurii poarta numele
de dictionar de date sau metadate si creaza o interdependenta intre datele
propriu-zise si programe. Baza de date poate fi privita ca o colectie de fisiere
interconectate care contin nucleul de date necesare unui sistem informatic.
Astfel, poate fi considerata drept un model al unor aspecte ale realitatii unei
unitati economice, modelata prin intermediul datelor. Diferitele obiecte din
cadrul realitatii ce prezinta interes sunt denumite clase sau entitati. Pentru
aceste obiecte sunt achizitionate si memorate date referitoare la diferite
caracteristici (atribute).
Baza de date se constituie ca un ansamblu intercorelat de colectii de date,
prin care se realizeaza reprezentarea unei realitati.

2.
Prezentarea
modelului
autovehicule g3o Car Rental

firmei

de

inchirieri

Exemplul bazei de date prezentat in acest proiect se refera la un model de


gestiune al unei firme de inchirieri autovehicule, intitulata fictiv g3o Car
Rental. Modelul analizat prezinta aspecte privind modul de functionare si
administrare al firmei.
Baza de date are ca scop simplificarea managementului datelor firmei de
inchirieri, oferind un mod centralizat de stocare a datelor si acces rapid la
informatiile dorite. Baza de date cuprinde date despre angajatii sucursalelor,

departementul unde lucreaza acestia in cadrul sucursalei, clienti, rezervarile


si inchirierile acestora si date despre parcul de autovehicule.
Firma are in orasele mari din tara una sau mai multe sucursale (de exemplu
in Bucuresti are 6 sucursale, una in fiecare sector; iar in Timisoara doar una).
Un client, o persoana fizica sau juridicava fi inscrisa la o singura sucursala
(prima la care va face o inchiriere/rezervare). Clientul poate face rezervari
asupra unor vehicule si poate inchiria unul sau mai multe vehicule. Pentru
fiecare serviciu de inchiriere se va emite o factura clientului. Clientul are
dreptul de a face reclamatii asupra serviciilor prestate de sucursala.
Vehiculele apartin sucursalei si vor fi reparate in service-uri cu care sucursala
are contract.
In baza de date vor fi retinute date privind evidenta angajatilor (nume ,
prenume, adresa etc.) si a vehiculelor (numar de inmatriculare, marca,
model, asigurare etc.).

III.

Diagrama Entitate-Relatie (Diagrama E/R)

1. Prezentare
Diagrama E/R reprezinta un model neformalizat pentru reprezentarea unui
sistem din lumea reala. Este um model de date conceptual d enivel inalt,
dezvoltat de Chen (1976), pentru a facilita proiectarea bazelor de date. O
diagrama E/R este reprezentarea grafica a unei colectii de entitati, relatii,
constrangeri, conditionari etc, care descriu complet o baza de date.

2. Reguli pentru proiectarea diagramei Entitate-Relatie (E/R):


Pentru proiectarea diagramei entitate-relatie au fost stabilite anumite reguli:
1). Entitatile sunt reprezentate prin dreptunghiuri;
2). Relatiile dintre entitati sunt reprezentate prin arce neorientate;
3). Atributele care reprezinta chei primare trebuie marcate prin simbolul #,
plasat la sfarsitul numelui acestor atribute;
4). Cardinalitatea minima este indicata in paranteze, iar cea maxima se scrie

rv
reze

t de
rva
e
z
re

reclamata de

fara paranteze;
5). Nu trebuie specificate toate atributele.

3. Algoritmul pentru proiectarea diagramei entitate-relatie:


1).
2).
3).
4).

Identificarea entitatilor din cadrul sistemului analizat;


Identificarea relatiilor dintre entitati si stabilirea cardinalitatii;
Identificarea atributelor aferente entitatilor si asocierilor dintre entitati;
Stabilirea atributelor de identificare a entitatilor (stabilirea cheilor).

Figura 1.1 Diagrama E/R (simpla, doar cu chei primare)

M(1)

rezerva

rezerv

at de

reclamata de

M(1)

Figura 1.2 Diagrama E/R

conduce

4. Descrierea diagramei entitate-relatie:


conduce

Entitatile care intervin in acest model sunt urmatoarele:


a).SUCURSALA(entitate independenta) sucursala caruia ii apartine
angajatul si unde clientii sunt inscrisi la prima inchiriere/rezervare. Atributele
principale sunt: id_sucursala, adresa, telefon, pagina_web. Cheia primara
este atributul id_sucursala.
b).DEPARTAMENT(entitate independenta) departamentul in care lucreaza
angajatul. Atributele principale sunt: id_departament, nume, email. Cheia
primara este atributul id_departament.
c).VEHICUL (entitate independenta) orice vehicul care poate fi inchiriat sau
rezervat. Atributele principale sunt: nr_inmatriculare, marca,
model_v,an_fabricatie, tip_vehicul, nr_locuri, masa_proprie,
masa_maxima_autorizata, combustibil, capacitate_cilindrica, putere. Cheia
primara este atributul nr_inmatriculare.
d).ASIGURARE (entitate dependenta) asigurarea obligatorie pentru orice
vehicul care apartine unei sucursale. Atributele principale sunt:
nr_inmatriculare, cod_asigurare, asigurator, data_emitere_polita_asigurare,
data_expirare_polita_asigurare. Cheia primara compusa din atributele
nr_inmatriculare si cod_asigurare.
e).SERVICE(entitate independenta) service-urile cu care are contract
sucursala si in care se executa reparatiile la vehicule. Atributele principale

sunt: id_service, nume_service, adresa, telefon, email, reprezentanta. Cheia


primara este atributul id_service.
f).ANGAJAT (entitate independenta) orice persoana care lucreaza in cadrul
unui departament dintr-o sucursala. Atributele principale sunt: cnp, nume,
prenume, adresa, telefon, email, functie, salariu, id_sef. Cheia primara este
atributul cnp.
g).CLIENT (entitate independenta) orice persoana fizica sau juridica care
rezerva si/sau inchiriaza un vehicul. Atributele principale sunt: id_client,
adresa, telefon, fax, email. Atributele secundare se impart in functie de tipul
persoanei (fizica sau juridica) astfel:
-pentru o persoana fizicaatributele sunt: nume, prenume, cnp, serie_BI, nr_BI.
-pentru o persoana juridica atributele sunt: denumire, tip_juridic, cod_CUI,
cod_IBAN, pagina_web.
Cheia primara este atributul id_client.
h).FACTURA (entitate independenta) - facturile ce clientul o va primii pentru
serviciul prestat de catre firma. Atributle principale sunt: cod_factura,
data_emitere, valoare_factura, modalitate_plata, procent_TVA. Cheia primara
este atributul cod_factura.

5. Relatiile intre entitati. Gradul si cardinalitatea unei relatii

Im conformitate cu regulile de proiectare a diagramei E/R a modelului,


cardinalitatea minima este indicata in paranteze, iar cardinalitatea maxima
se scrie fara paranteze. Relatiile se clasifica in functie de cardinalitate in:
relatii one to one (1:1), relatii one to many (1:M) si relatii many to many
(M:M). O relatie este descrisa prin 2 atribute, in functie de cum se va citi
relatia respectiva (Ex: ASIGURARE_apartine_VEHICUL sau
VEHICUL_are_ASIGURARE).

Cu privire la relatiile din model se pot face urmatoarele observatii:


Relatia ASIGURARE_apartine_VEHICULeste o relatie one-to-one (1:1) cu
cardinalitatea minima 1-1. Cardinalitatea a fost dedusa astfel: un vehicul are
o singura asigurare; o asigurare apartine unei singure masini.

Relatia CLIENT_inchiriaza_VEHICUL este o relatie many-to-many (M:M) de tip


3 (intre entitatile vehicul, client si factura) cu cardinalitatea minima 1-1.
Relatia CLIENT_rezerva_VEHICUL este o relatie many-to-many (M:M) cu
cardinalitatea minima 1-1. Cardinalitatea a fost dedusa astfel: un client
poate rezerva unul sau mai multe vehicule; un vehicul poate fi rezervat de
unul sau mai multi clienti.
Relatia CLIENT_reclama_SUCURSALA este o relatie many-to-many (M:M) cu
cardinalitatea minima 0-0. Cardinalitatea a fost dedusa astfel: o sucursala
poate avea mai multe reclamatii minim 0; un client poate face mai multe
reclamatii minim 0.
Relatia SUCURSALA_are_CLIENT este o relatie one-to-many (1:M) cu
cardinalitatea minima 1-1. Cardinalitatea a fost dedusa astfel: o sucursala
are unul sau mai multi clienti; un client este inscris la o singura sucursala.
Relatia SUCURSALA_are_VEHICUL este o relatie one-to-many (1:M) cu
cardinalitatea minima 1-1. Cardinalitatea a fost dedusa astfel: o sucursala
are unul sau mai multi vehicule; un vehicul apartine unei singure sucursale.
Relatia SUCURSALA_are_DEPARTAMENT este o relatie one-to-many (1:M) cu
cardinalitatea minima 1-1. Cardinalitatea a fost dedusa astfel: o sucursala
are unul sau mai multe departamente; un departament apartine unei singure
sucursale.

Relatia SUCURSALA_are_contract_cu_SERVICE este o relatie one to many


(1:M) cu cardinalitatea minima 1-1. Cardinalitatea a fost dedusa astfel: o
sucursala are contract cu unul sau mai multe service-uri; un service lucreaza
cu o singura sucursala.
Relatia SERVICE_repara_VEHICUL este o relatie many to many (M:M) cu
cardinalitatea minima 0-0.
Cardinalitatea o fost dedusa astfel: un service
CLIENT
PERSOANA
FIZICA
repara unul sau mai multe
vehicule;
un vehicul reparat intr-unul sau mai
id_client#
nume
multe service-uri. Cardinalitatea minima este 0 cand un vehicul nu sufera
prenume
reparatii.
ASIGURARE
Relatia DEPARTAMENT_are_ANGAJATeste o relatie one to many (1:M) cu
cod_asigurare#
cardinalitatea minimaPERSOANA
1-1. Cardinalitatea
a fost dedusa astfel: o sucursala
nr_inmatriculare#
JURIDICA
tip_juridic
nume

FACTURA
cod_factura#

are unul sau mai multe departamente; un departament unei singure


sucursale.
Relatia ANGAJAT_conduce_ANGAJAT este o relatie recursiva si are
cardinalitatea maxima one to many (1:M) iar cea minima este 1-1.
Cardinalitatea a fost dedusa astfel: un angajat poate fi condus de un angajat,
un angajat conduce unul sau mai multi angajati.

IV.
VEHICUL

Diagrama conceptuala

nr_inmatriculare#

1. Descriere
Diagrama conceptuala pentru proiectarea modelului ales a fost construita din
diagrama E/R prin adaugarea tabelelor asociative si prin marcarea cheilor
externe.
Transformarea relatiilor se face astfel:
Relatiile 1:1 si 1:M devin chei externe. Simbolul X indica plasamentul
cheii externe, iar simbolul X exprima faptul ca aceasta cheie externa
este continuta in cheia primara. Relatia 1:1 plaseaza cheia externa in
tabelul cu mai putine linii.
SUCURSALA
CLIENT
id_sucursala#
Relatia M:M devine
un
tabel
special, numit tabel asociativ, care are
PERSOANA
FIZICA
id_client#
*nume
doua chei externe pentru
cele doua tabele asociate. Cheia primara este
*adresa
*prenume
compunerea acestor
doua chei externe plus eventuale coloane
*telefon
*cnp se deseneaza punctat.
aditionale. Tabelul asociativ
*fax
*serie_BI
ASIGURARE
email
*nr_BI
cod_asigurare#
Relatiile de tip trei devin tabele asociative. Cheia primara este
nr_inmatriculare#
compunerea a trei chei externe plus eventuale coloane aditionale.

*asigurator
PERSOANA JURIDICA
*data_emitere_polita_asigurare
*data_expirare_polita_asigurare
Transformare entitatilor se*denumire
face astfel:

FACTURA

*tip_juridic
cod_IBAN
Entitatile independente
devin
*cod_CUI
pagina_web
contine chei externe.

tabele independente. Cheia primara nu

cod_factura#
*data_emitere
Entitatile dependente devin tabele dependente. Cheia primara a
*valoare_factura
*procent_TVA
entitatilor dependente contine cheia primara a entitatii
de care depinde
ANGAJAT
*modalitate_plata
cnp#

(cheie externa) plus unul sau mai multe atribute aditionale.


Subentitatile devin subtabele. Cheia externa se refera la supertabel, iar
cheia primara este aceasta cheie externa.
VEHICUL
nr_inmatriculare#
Transformarea atributelor se face astfel:
*marca
*model_v
Un atribut singular devine o coloana.
*an_fabricatie
*tip_vehicul
Atributele multiple devin tabele dependendente ce contin cheia
*nr_locuri
*masa_proprie
primara a entitatii si atributul multiplu. Cheia primara este o cheie
*masa_maxima_autorizata
externa, plus una sau mai multe coloane aditionale.
*combustibil
DEPARTAMENT
*capacitate_cilindrica
id_departament#
Entitatile devin tabele, iar atributele lor devin coloane
in aceste tabele.
*putere

Pentru relatii 1:1 si 1:n, atributele relatiilor vor apartine tabelului care
contine cheia externa, iar pentru relatii m:m si de tipul trei, atributele
vor fi plasate in tabelele asociative.
SUCURSALA
id_sucursala#
*adresa
*telefon
*pagina_web

SERVICE
id_service#

ANGAJAT
Figura 2. Diagrama conceptuala (doar cu chei primare
si chei
cnp#
straine)
*nume
*prenume
*adresa
*telefon
email
*functie
*salariu

apartine

DEPARTAMENT
1M(1)
are

id_departament#
*nume
*email

SERVICE

lucreaza la

id_service#
*nume_service
*adresa
*telefon
email
reprezentanta

2. Cheile primare
Cheia primara:
-trebuie sa fie unica si cunoscuta la orice moment;
-trebuie sa fie controlata de administratorul bazei;
-trebuie sa nu contina informatii descriptive, sa fie simpla, fara ambiguitati;
-sa fie stabila;
-sa fie familiara utilizatorului.
1
M(1)
are

apartine

Cu privire la cheile primare dim model se pot face urmatoarele observatii:


1M(1)

TabelulSUCURSALA are ca si cheie primara atributul


areid_sucursala. Acesta are
rolul de a identifica in mod unic fiecare sucursala in parte. Este de tip
numeric intreg de 2 cifre [number(2)].

lucreaza cu

TabelulASIGURARE, fiind un tabel dependent, are cheia primara compusa din


2 atribute: cod_asigurare si nr_inmatriculare. Aceasta cheie compusa are rolul
de a identifica in mod unic o asigurare, ce depinde de un anumitvehicul.
Cod_asigurare este de tip numeric intreg de 8 cifre [number(8)] iar
nr_inmatriculare este de tip sir de caractere cu o lungime maxima de 8
caractere [varchar2(8)].
M(1)
are contract

p
re

lucreaza la

TabelulFACTURA are ca si cheie primara atributul cod_factura. Acesta are rolul


de a identifica in mod unic fiecare factura in parte. Este de tip numeric intreg
de 8 cifre [number(8)].
a
ar

TabelulVEHICUL are ca si cheie primara atributul nr_inmatriculare. Acesta are


rolul de a identifica in mod unic fiecare vehicul in parte. Este de tip sir de
caractere cu o lungime maxima de 8 caractere [varchar2(8)].
TabelulCLIENTeste un supertabel ce are ca si cheie primara atributul id_client.
Acesta are rolul de a identifica in mod unic fiecare client (persoana fizica sau
juridica) in parte. Este de tip numeric intreg de 8 cifre [number(8)].
0)
M(

a
rep

r at

in

are
1
apartine

0)
M(

inchiriaza

TabelulDEPARTAMENT are ca si cheie primara atributul id_departament.


Acesta are rolul de a identifica in mod unic fiecare departament in parte. Este
de tip numeric intreg de 3 cifre [number(3)].

M(1)
1
TabelulANGAJAT are ca si cheie primara
atributul
cnp. Acesta are rolul de a
are
identifica in mod unic fiecare angajat in parte. Este de tip numeric intreg de
13 cifre [number(13)].
apartine
M(1)
are

TabelulSERVICE are ca si cheie primara atributul id_service. Acesta are rolul


M(1)
M(1)
de a identifica in mod unic fiecare service in parte. Este de tip numeric intreg
de 3 cifre [number(3)].
are
1
inscris la

M(0)M(0)
reclama

M(1)

Tabelul REPARATIE este un tabel asociativ ce are ca si cheie primara artiiciala


atributul id_reparatie. Acesta are rolul de a identifica in mod unic fiecare
reparatie in parte. Este de tip numericM(1)
intreg de 6 cifre [number(6)].
Tabelul RECLAMATIE este un tabel asociativ ce are ca si cheie primara
artificiala atributul id_reclamatie. Acesta are rolul de a identifica in mod unic
fiecare reclamatie in parte. Este de tip numeric intreg de 6 cifre
[number(6)].

lucreaza cu

M(1)

M(1)
e contract
ra
pa
re

Tabelul REZERVARE este un tabel asociativ ce are ca si cheie primara


artificiala atributul id_rezervare. Acesta are rolul de a identifica in mod unic
fiecare rezervare in parte. Este de tip numeric intreg de 8 cifre [number(8)].
Tabelul INCHIRIERE este un tabel asociativ ce are ca si cheie primara
artificiala atributul id_inchiriere. Acesta are rolul de a identifica in mod unic
fiecare inchiriere in parte. Este de tip numeric intreg de 8 cifre [number(8)].
0)
M(

ar a
rep

t in

are
1
apartine

0)
M(

inchiriaza

Tabelul PERSOANA_FIZICA este un subtabel ce are cheie primara atributul


id_client. Este de tip numeric intreg de 8 cifre [number(8)].
Tabelul PERSOANA_JURIDICA este un subtabel ce are cheie primara atributul
id_client. Este de tip numeric intreg
de 8 cifre
[number(8)].
M(1)
1
are
apartine

3. Cheile externe (straine)

M(1)
M(0)M(0)
reclama

M(1)

are

1
apartine

Tabelul ASIGURARE fiind tabel dependent, are o cheie straina


(nr_inmatriculare) care face parte din cheia primara. Atributul
nr_inmatriculare este de tip sir de caractere cu o lungime maxima de 8
caractere [varchar2(8)].
M(1)

Tabelul ANGAJAT M(1)


are 2 chei straine care au rolul de a realiza legatura
ANGAJAT-ANGAJAT si legatura DEPARTAMENT-ANGAJAT. Atributul
id_departament este de tip numeric intreg de 3 cifre [number(3)] iar
atributul sef_id este de tip numeric intreg de 13 cifre [number(13)].
Tabelul CLIENT are o cheie straina (id_sucursala) care are rolul de a realiza
legatura SUCURSALA-CLIENT. Atributul id_sucursala este de tip numeric intreg
de 2 cifre [number(2)].
M(1) are o cheie straina (id_sucursala) care are rolul de a
Tabelul DEPARTAMENT
realiza legatura SUCURSALA- DEPARTAMENT. Atributul id_sucursala este de
tip numeric intreg de 2 cifre [number(2)].

Tabelul INCHIRIERE este un tabel asociativ si are 3 chei straine pentru a


indeplinii relatia de tip 3 dintre tabelele VEHICUL , FACTURA si CLIENT.
Atributul id_client este de tip numeric intreg de 8 cifre [number(8)] ,
nr_inmatriculare este de tip sir de caractere cu o lungime maxima de 8
caractere [varchar2(8)] si cod_factura este de tip numeric intreg de 8 cifre
[number(8)].

Tabelul RECLAMATIE este un tabel asociativ si are 2 chei straine pentru a


indeplinii relatia many to many intre tabelele SUCURSALA si CLIENT. Atributul
id_client este de tip numeric intreg de 8 cifre [number(8)] iar id_sucursala
este de tip numeric intreg de 2 cifre [number(2)].
Tabelul REPARATIEeste un tabel asociativ si are 2 chei straine pentru a
indeplinii relatia many to many intre tabelele SERVICE si CLIENT. Atributul
id_service este de tip numeric intreg de 3 cifre [number(3)] si atributul
nr_inmatriculare este de tip sir de caractere cu o lungime maxima de 8
caractere [varchar2(8)].
Tabelul REZERVARE este un tabel asociativ si are 2 chei straine pentru a
indeplinii relatia many to many intre tebelele VEHICUL si VEHICUL. Atributul
id_client este de tip numeric intreg de 8 cifre [number(8)] iar
nr_inmatriculare este de tip sir de caractere cu o lungime maxima de 8
caractere [varchar2(8)].
Tabelul SERVICE are o cheie straina (id_sucursala) care are rolul de a realiza
legatura SUCURSALA-SERVICE. Atributul id_sucursala este de tip numeric
intreg de 2 cifre [number(2)].
Tabelul VEHICUL are o cheie straina (id_sucursala) care are rolul de a realiza
legatura SUCURSALA-VEHICUL. Atributul id_sucursala este de tip numeric
intreg de 2 cifre [number(2)].
Tabelul PERSOANA_FIZICA este un subtabel ce are cheie externa atributul
id_client. Este
de tip numeric intreg de 8 cifre [number(8)].
are
are
face
Tabelul PERSOANA_JURIDICA este un subtabel
ce are cheie externa atributul
id_client. Este de tip numeric intreg de 8 cifre [number(8)].
apartine de

face

V.

Schema relationala
executata de

Schemele relationale includ cheile primare, cheile straine si celelelte atribute


ale fiecarui tabel.
Pentru diagrama conceptuala a modelului ales avem urmatoarele scheme
relationale:
SUCURSALA (id_sucursala#, adresa, telefon, pagina_web)
SERVICE (id_service#, id_sucursala, nume_service, adresa, telefon, email,
reprezentanta)
lucreaza cu
REPARATIE (id_reparatie#, id_service, nr_inmatriculare, tip, valoare,
data_inceperii, data_finalizarii)
VEHICUL (nr_inmatriculare#, id_sucursala, marca, model_v, an_fabricatie,
tip_vehicul, nr_locuri, masa_proprie, masa_maxima_autorizata, combustibil,
capacitate_cilindrica, putere)
ASIGURARE (nr_inmatriculare#, cod_asigurare#, asigurator,
data_emitere_polita_asigurare, data_expirare_polita_asigurare)
INCHIRIERE (id_inchiriere#, nr_inmatriculare, id_client, cod_factura,
data_preluare_vehicul, data_retur_vehicul)
REZERVARE (id_rezervare#, nr_inmatriculare, id_client,
data_incepere_rezervare, data_finalizare_rezervare)
FACTURA (cod_factura#, data_emitere, valoare_factura, modalitate_plata ,
procent_TVA)
ANGAJAT (cnp#, nume, prenume, adresa, telefon, email, functie, salariu,
id_departament, id_sef)
DEPARTAMENT (id_departament#, id_sucursala, nume, email)
RECLAMATIE (id_reclamatie#, id_sucursala, id_client, data_depunere, text)
CLIENT (id_client#, id_sucursala, adresa, telefon, fax, email)
PERSOANA_FIZICA (id_client#, nume, prenume, cnp, serie_BI, numar_BI)
PERSOANA_JURIDICA (id_client#, denumire, tip_juridic, cod_IBAN, cod_CUI,
pagina_web)

conduce

apartine

VI.

Algebra relationala

1. Prezentare
Algebra relationala a fost introdusa de E.F. Codd ca o multime de operatii
formale actionand asupra unor relatii si avand ca rezultat alte relatii. Baza
teoretica pentru limbajele de interogare relationale o constituie operatorii
introdusi de Codd pentru prelucrarea relatiilor.
Scopul fundamental al algebrei relationale este de a permite scrierea
expresiilor relationale. Expresiile servesc ca o reprezentare de nivel superior,
simbolica, a intentiilor utilizatorului.
apartine
Operatorii algebrei relationale sunt:
operatori traditionali pe multimi (UNION, INTERSECT, PRODUCT,
DIFFERENCE);
operatori relationali speciali (PROJECT, SELECT, JOIN, DIVISION).
Echivalenta dintre algebra relationalasi calculul relational a fost demonstrata
de J.D.Ullman. Aceasta echivalenta arata ca orice relatie posibil de definit in
algebra relationala poate fi definitasi in cadrul calcului relational, si reciproc.
Operatorii (unari sau binari) algebrei relationale realizeaza urmatoarele
functii:
SELECT (selectie) extrage tupluri ce satisfac o conditie specificata;
PROJECT (proiectie) extrage atributele specificate;
apartine
DIFFERENCE (diferenta)
extrage tupluri care apar intr-o relatie, dar nu apar
in cealalta;
PRODUCT (produs cartezian) genereaza toate perechile posibile de tupluri,
primul element al perechii fiind luat din prima relatie, iar cel de-al doilea
element din cealalta relatie;
UNION (reuniune) reuneste doua relatii;
INTERSECT (intersectie) extrage tupluri care apar in ambele relatii;
DIVISION (diviziune) extrage valorile atributelor dintr-o relatie, care apar in
toate valorile atributelor din cealalta relatie;
JOIN (compunere) extrage tupluri din mai multe relatii corelate:
NATURAL JOIN (compunere naturala) combina tupluri din doua relatii, cu
conditia ca atributele comune sa aiba valori identice;
SEMI-JOIN (semi-compunere) selecteaza tupluri ce apartin
apartineunei singure
relatii, care sunt corelate cu tupluri din cea de a doua relatie;

Inscris la

ANGAJAT
-JOIN (-compunere) combina tupluri din doua relatii (nu neaparat
#cnp(PK)
corelate), cu conditia ca valorile atributelor specificate sa satisfaca
o anumita
*id_departament(FK)
REPARATIE
conditie;
*id_sef(FK)
#cod_reparatie(PK)
OUTER
JOIN (compunere externa)SERVICE
combina tupluri din doua relatii,
astfel
*id_serviceFK)
#id_service(PK) Tuplurile din orice relatie care nu
incat
conditiile de corelare sa fie satisfacute.
*nr_inmatriculare(FK)
*id_sucursala(FK)
satisfac aceste conditii sunt completate
cu valori null.

apartine

lucreaza la

2. Operatorul PROJECT

DEPARTAMENT
#id_departament(PK)
Proiectia este o operatie unara care elimina anumite atribute ale
unei relatii
*id_sucursala(FK)
producand o submultime pe verticala a acesteia.
SUCURSALA
#id_sucursala(PK)
Prin
proiectie se construieste dintr-o
relatie R, o noua relatie:
VEHICUL
#nr_inmatriculare(PK)
a)stergand din R atributele care nu sunt mentionate in parametrii proiectiei;
*id_sucursala(FK)dublurile care apar dupastergere.
b)eliminand
RECLAMATIE
#cod_reclamatie(PK)
Pentru a reprezenta operatorul proiectie sunt utilizate diferite notatii:
*id_sucursala(FK)
A1, ..., Am (R) PROJECT (R, A1, ..., Am)
*id_client(FK)
R[A1, ..., Am]
unde A1, A2, ..., Am sunt parametrii proiectiei relativ la relatia R.
REZERVARE
#cod_rezervare(PK)
Exemplu. Sa se obtina o
lista ce contine numele, prenumele si telefonul
*id_client(FK)
angajatilor.
apartine
*nr_inmatriculare(FK)
1.Proiectie in algebra relationala:
Rezultat = PROJECT(ANGAJAT, nume, prenume, telefon)
CLIENT
2.Proiectie cu dubluri in SQL:
#id_client(PK)
SELECT nume, prenume, telefon
*id_sucursala(FK)
FROM angajat;
INCHIRIERE
3.Proiectie
fara dubluri in SQL:
#cod_inchiriere(PK)
SELECT DISTINCT
nume, prenume, telefon
*id_client(FK)
PERSOANA FIZICA
FROM
angajat;
*nr_inmatriculare(FK)
*cod_factura(FK)

3. Operatorul SELECT

nume
prenume

Selectia
(restrictia) este o operatie
unara care produce o submultime
pe JURIDICA
PERSOANA
ASIGURARE
FACTURA
orizontala
a unei relatii R. Aceasta
submultime se obtine prin extragerea
#cod_asigurare(PK)
#cod_factura(PK)
tuplurilor
din
R
care
satisfac
o
conditie
specificata.
#nr_inmatriculare(PK&FK)
tip_juridic
Sunt utilizate diferite notatii:
conditie(R) R[conditie]
SELECT(R, conditie) RESTRICT(R, conditie).

denumire

Exemplu. Sa se obtina informatii complete despre vehiculele fabricate in


2010.

1.Selectie in algebra relationala:


Rezultat = SELECT(VEHICUL, an_fabricatie = 2010)
2.Selectie in SQL:
SELECT *
FROM VEHICUL
WHERE an_fabricatie = 2010;

4. Operatorul UNION
Reuniunea a doua relatii R si S este multimea tuplurilor apartinand fie lui R,
fie lui S, fie ambelor relatii.
Sunt utilizate notatiile:
RS
UNION(R, S)
OR(R, S)
APPEND(R, S).
Exemplu. Sa se obtina lista cu adresaangajatilor si a clientilor.
1. Operatorul UNION in algebra relationala:
UNION(PROJECT(ANGAJAT, adresa), PROJECT(CLIENT,adresa))
2.Operatorul UNION in SQL
SELECT adresa
FROM angajat
UNION
SELECT adresa
FROM client;

5. Operatorul DIFFERENCE
Diferenta a doua relatii R si S este multimea tuplurilor care apartin lui R, dar
nu apartin lui S. Diferenta este o operatie binara necomutativa care permite
obtinerea tuplurilor ce apar numai intr-o relatie.
Sunt utilizate diferite notatii:
RS
DIFFERENCE(R, S)
REMOVE(R, S)
MINUS(R, S).

Exemplu. Sa se obtina lista cu numarul de inmatriculare, marca, modelulsi


tipul vehiculului pentru autoturismele care au capacitatea cilindrica mai mica
de 2000 cmcubi.
1.Diferentain algebra relationala:
R=PROJECT(SELECT(VEHICUL, tip_vehicul=autoturism), nr_inmatricuare,
marca, model, tip_vehicul);
S=PROJECT(SELECT(VEHICUL, capacitate_cilindrica<2000), nr_inmatricuare,
marca, model, tip_vehicul);
Rezultat = DIFFERENCE(R, S)
2.Diferenta in SQL:
SELECT nr_inmatricuare, marca, model_v, tip_vehicul
FROM VEHICUL
WHERE tip_vehicul=autoturism
MINUS
SELECT nr_inmatricuare, marca, model_v, tip_vehicul
FROM VEHICUL
WHERE capacitate_cilindrica<2000;
6. Operatorul INTERSECT
Intersectia a doua relatii R si S este multimea tuplurilor care apartin si lui R si
lui S. Operatorul INTERSECT este un operator binar, comutativ, derivat: R S
= R (R S) sau R S = S (S R).
Sunt utilizate diferite notatii:
INTERSECT(R, S)
RS
AND(R, S).
Exemplu. S sa se obtina lista nr_inmatriculare a vehiculelor care sunt
autoturisme, dar care au motorizari diesel.
1.Intersectie in algebra relationala:
R = PROJECT(SELECT(VEHICUL, tip_vehicul=autoturism), nr_inmatriculare);
S = PROJECT(SELECT(VEHICUL, combustibil=diesel), nr_inmatriculare),
Rezultat = INTERSECT(R, S).
2.Intersectie in SQL:
SELECT nr_inmatriculare
FROM vehicul
WHEREtip_vehicul=autoturism
INTERSECT
SELECT nr_inmatriculare
FROM vehicul
WHEREcombustibil=diesel

7. Operatorul PRODUCT
Fie R si S relatii de aritate m, respectiv n. Produsul cartezian al lui R cu S este
multimea tuplurilor de aritate m + n unde primele m componente formeaza
un tuplu in R, iar ultimele n componente formeaza un tuplu in S.
Sunt utilizate diferite notatii:
RS
PRODUCT(R, S)
TIMES(R, S).
Exemplu. Sa se obtina lista tuturor posibilitatilor de alegerea vehiculelorde
catre o persoana juridica.
1.Produs cartezian in algebra relationala:
R = PROJECT(PERSOANA_JURIDICA, denumire);
S = PROJECT(VEHICUL, id_vehicul);
Rezultat = PRODUCT(R, S).
2.Produs cartezian in SQL:
SELECT denumire, nr_inmatriculare
FROM persoana_juridica,vehicul;

8. Operatorul DIVISION
Diviziunea este o operatie binara care defineste o relatie ce contine valorile
atributelor dintr-o relatie care apar in toate valorile atributelor din cealalta
relatie.
Sunt utilizate diferite notatii:
DIVIDE(R, S)
DIVISION(R, S)
Exemplu. Sa se obtina id-urile angajatilor ce lucreaza in departamentelece
apartin sucursalei cu id-ul 1.
1.Diviziune in algebra relationala:
R = PROJECT(ANGAJAT, id_angajat, id_departament);
S = PROJECT(SELECT(DEPARTAMENT, id_sucursala = 1),id_departament);
Rezultat = DIVISION(R, S).
2.Diviziune in SQL:
SELECT UNIQUE cnp
FROM angajat a
WHERE NOT EXISTS

(SELECT *
FROM departament d
WHERE d.id_sucursala=1
AND NOT EXISTS
(SELECT *
FROM angajat b
WHERE d.id_departament=b.id_departament
AND b.cnp=a.cnp));
9. Operatorul JOIN
Operatorul de compunere (uniune) permite regasirea informatiei din mai
multe relatii corelate. Operatorul combina produsul cartezian, selectia si
proiectia.
Operatorul NATURAL JOIN
Operatorul de compunere naturala (NATURAL JOIN) combina tupluri din doua
relatii R si S, cu conditia ca atributele comune sa aiba valori identice.
Algoritmul care realizeaza compunerea naturala este urmatorul:
1.se calculeaza produsul cartezian R S;
2.pentru fiecare atribut comun A care defineste o coloanain R si o
coloanain S, se selecteaza din R S tuplurile ale caror valori coincid in
coloanele R.A si S.A (atributul R.A reprezinta numele coloanei din R S
corespunzatoare coloanei A din R);
3.pentru fiecare astfel de atribut A se proiecteaza coloana S.A, iar coloana
R.A se va numi A.
Exemplu. Sa se obtina informatii complete despre angajati si
departamentele in care lucreaza.
1.Operatorul de compunere naturalain algebra relationala:
Rezultat = JOIN(ANGAJAT, DEPARTAMENT).
2.Operatorul de compunere naturalain SQL:
SELECT *
FROM angajat a, departament d
WHERE a.id_departament = d.id_departament;
Operatorul -JOIN
Operatorul -JOIN combina tupluri din doua relatii (nu neaparat corelate) cu
conditia ca valorile atributelor specificate sa satisfaca o anumita conditie
specificata explicit in cadrul operatiei.
Operatorul -JOIN este un operator derivat, fiind o combinatie de produs
scalar si selectie:
JOIN(R, S, conditie) = conditie (R S)

Exemplu.Sa se obtina informatii despre angajati si despre departamentele


unde lucreaza cu conditia ca sa angajatul sa nu lucreze contabilitate .
1.Operatorul -JOIN in algebra relationala:
R = PROJECT(ANGAJAT, cnp, nume, prenume);
S = PROJECT(DEPARTAMENT, id_departament, email);
Rezultat = JOIN(R, S, DEPARTAMENT.nume<> contabilitate )
2.Opratorul -JOIN in SQL:
SELECT a.cnp, a.nume, a.prenume, d.id_departament,d. email
FROM angajat a, departament d
WHERE d.nume<> contabilitate
Operatorul SEMI-JOIN
Operatorul SEMI-JOIN conserva atributele unei singure relatii participante la
compunere si este utilizat cand nu sunt necesare toate atributele compunerii.
Operatorul este asimetric.
Tupluri ale relatiei R care participain compunerea (naturala sau-JOIN) dintre
relatiile R si S.
SEMI-JOIN este un operator derivat, fiind o combinatie de proiectie si
compunere naturala sau proiectie si -JOIN:
SEMIJOIN(R, S) = M (JOIN(R, S))
SEMIJOIN(R, S, conditie) = M (JOIN(R, S, conditie)),
unde am notat prin M atributele relatiei R.
Exemplu. Sa se obtina informatii referitoare la sucursalale (id_sucursala,
adresa) care au vehicule cu capacitate cilindrica de 1800 sau 1900 cm cubi.
1.Operatorul SEMI-JOIN in algebra relationala:
R = SELECT(VEHICUL, capacitate_cilindrica = 1800 OR capacitate_cilindrica =
1900)
S = JOIN(SUCURSALA, R)
Rezultat = PROJECT(S, id_sucursala, adresa).
2.Operatorul SEMI-JOIN in SQL:
SELECT s.id_sucursala, s.adresa
FROM sucursalas, vehicul v
WHERE s.id_sucursala = v.vehicul
AND (v.capacitate_cilindrica = 1800) OR (capacitate_cilindrica = 1900);

Operatorul OUTER-JOIN

Operatia de compunere externa combina tupluri din doua relatii pentru care
sunt satisfacute conditiile de corelare. In cazul aplicarii operatorului JOIN se
pot pierde tupluri, atunci cand exista un tuplu in una din relatii pentru care nu
exista nici un tuplu in cealalta relatie, astfel incat sa fie satisfacuta relatia de
corelare.
Operatorul elimina acest inconvenient prin atribuirea valorii null valorilor
atributelor care exista intr-un tuplu din una dintre relatiile de intrare, dar care
nu exista si in cea de-a doua relatie.
Practic, se realizeaza compunerea a doua relatii R si S la care se adauga
tupluri din R si S, care nu sunt continute in compunere, completate cu valori
null pentru atributele care lipsesc.
Compunerea externa poate fi: LEFT, RIGHT, FULL.
De exemplu, OUTER JOIN LEFT reprezinta compunerea in care tuplurile din R,
care nu au valori similare in coloanele comune cu relatia S, sunt de
asemenea incluse in relatia rezultat.

VII. Normalizarea datelor

Normalizarea este procesul reversibil de transformare a unei relatii, in relatii


de structura mai simpla. Procesul este reversibil in sensul ca nici o informatie
nu este pierdutain timpul transformarii. O relatie este intr-o forma normala
particulara daca ea satisface o multime specificata de constrangeri.
Normalizarea are drept scop:
suprimarea redundantei logice
evitarea anomaliilor la reactualizare
rezolvarea problemei reconexiunii.
Exista o teorie matematica a normalizarii al carei autor este E.F. Codd.
Solutia: construirea unor tabele standard (forme normale).
Forma normala (FN1)
O relatie este in prima forma normala daca fiecarui atribut care o compune ii
corespunde o valoare indivizibila (atomica).
Forma normala 2 (FN2)
O relatie R este in a doua forma normala dacasi numai daca:
relatia R este in FN1;

fiecare atribut care nu este cheie (nu participa la cheia primara) este
dependent de intreaga cheie primara.
Forma normala 3 (FN3)
Intuitiv, o relatie R este in a treia forma normala dacasi numai daca:
relatia R este in FN2;
fiecare atribut care nu este cheie (nu participa la o cheie) depinde direct de
cheia primara.
Formal, o relatie R este in a treia forma normala dacasi numai daca:
relatia R este in FN2;
fiecare atribut care nu este cheie (nu participa la o cheie) nu este
dependent tranzitiv de nici o cheie a lui R.
O relatie este in FN3 dacasi numai daca fiecare atribut (coloana) care nu este
cheie, depinde de cheie, de intreaga cheie si numai de cheie.

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