Sunteți pe pagina 1din 24

Universitatea Tehnic a Moldovei

Catedra Microelectronic i Ingineria Biomedical

Lucrare de curs
la disciplina Baze de date

A efectuat

st.gr. MN-161M
Reu Constanitn

A verificat

conf.dr.
Bettin Mironov

Chisinau 2016

CUPRINS

I.

Noiuni teoretice ................................................................................................. 3

II.

Realizarea unei baze de date ............................................................................ 16

III. Concluzii........................................................................................................... 24
IV. Bibliografie ........................................................................................................25

I. Noiuni teoretice
n sensul larg, o baz de date (database) este o colecie de date corelate din punct de vedere
logic, care reflect un anumit aspect al lumii reale i este destinat unui anumit grup de utilizatori. n
acest sens, bazele de date pot fi create i meninute manual (un exemplu ar fi fiele de eviden a
crilor dintr-o bibliotec, aa cum erau folosite cu ani n urm) sau computerizat aa cum sunt
majoritatea bazelor de date n momentul de fa. O definiie ntr-un sens mai restrns a unei baze de
date este urmtoarea:
O baz de date este o colecie de date centralizate, creati meninut computerizat, n scopul
prelucrrii datelor n contextul unui set de aplicaii. Prelucrarea datelor se refer la operaiile de
introducere, tergere, actualizare i interogare a datelor.
Simple colecii de fie (documente pe hrtie) sau fiiere de date care conin date, dar nu permit
operaii de interogare nu sunt considerate baze de date. De exemplu, datele memorate n fiiere pe
disc ntr-o aplicaie de calcu tabelar (Microsoft Excel) sau documentele memorate de un editor de
texte (ca Microsoft Word) nu sunt considerate baze de date.
Orice baz de date are urmtoarele proprieti implicite:

Baza de date este o colecie logic coerent de date ce are cel puin un neles

Baza de date este destinat, construiti populat de date despre un domeniu bine precizat.
Ea are un grup de utilizatori i se adreseaz unui anumit grup de aplicaii

O baz de date reprezint cteva aspecte ale lumii reale crend orizontul propriu.
Schimbrile orizontului sunt reflectate n baza de date.

Modelul de date relaional (Relational Model) se bazeazpe noiunea de relaie din matematic,
care corespunde unei entiti de acelai tip i are o reprezentare uor de neles i de
manipulat, ce const dintr-un tabel bidimensional, compus din linii i coloane. Fiecare linie din
tabel reprezint o entitate i este compus din mulimea valorilor atributelor entitii respective,
fiecare atribut corespunznd unei coloane a tabelului.
Un sistem de baze de date (Database System) reprezintun ansamblu de componente care
asigur crearea, utilizarea i ntreinerea uneia sau mai multor baze de date. Componentele unui
sistem de baze de date sunt: hardware, software, utilizatori, date persistente.

Hardware.

Calculatoarele pe care sunt instalate de obicei sistemele de baze de date sunt PC standard,
dar i calculatoare multiprocesor foarte puternice. Performanele generale de operare
3

ale calculatorului (numrul i viteza procesoarelor, dimensiunea i viteza de operare a memoriei etc)
influeneaz n mod corespunztor perfomanele sistemului de baze de date. Cea mai important
caracteristic a calculatorului pe care funcioneazsistemul de baze de date este capacitatea
harddisk-ului, utilizatpentru memorarea datelor din baza de date.
Deoarece ntr-un sistem de baze de date este necesar accesul rapid la oricare dintre nregistrrile
de date, pentru memorarea acestora se folosesc discurile magnetice (harddisk- uri). Benzile
magnetice

(care

ofer

acces

secvenial

la

nregistrrile de date) se folosesc pentru

duplicarea (backup), salvarea i restaurarea datelor.

Software

ntre baza de date (colecia de date memorate fizic n fiiere pe harddisk-uri) i utilizatorii
sistemului exist un nivel software, numit sistem de gestiune a bazei de date (SGBD)- (DataBase
Management System). O baz de date computerizat poate fi generati meninut fie cu
ajutorul unui grup de programe de aplicaie specifice acestui scop, fie cu acest SGBD.

Fig.1. Componentele ale sistemului de baze de date


Sistemul de gestiune al bazei de date (SGBD) este un interpretor de cereri, el recepionnd de la
utilizatori anumite cereri de acces la baza de date, le interpreteaz, executoperaiile respective i
returneaz rezultatul ctre utilizatori.
De fapt, SGBD este un sistem de programe general ce faciliteaz procesul definirii, construciei i
manipulrii datelor pentru diverse aplicaii.

Definirea bazei de date presupune specificarea tipurilor de date ce vor fi stocate n baza
de date, precum i descrierea detaliat a fiecrui tip de dat.

Construcia bazei de date reprezint procesul stocrii datelor nsi prin mediul controlat
prin SGBD.

Prin

manipulare se neleg o serie de funcii ce faciliteazimplementarea cererilor

pentru gsirea datelor specificate, adugarea de noi date ce reflect modificarea

contextului, generearea de rapoarte pe baza coninutului bazei de date. n concluzie, pachetul


software ce asigur manipularea datelor, mpreun cu datele nsi (coninutul bazei de date)
formeaz ceea ce se numete sistemul de baze de date (DataBase System).
Un SGBD ofer utilizatorilor o viziune a datelor stocate n baza de date, nemaifiind necesar
cunoaterea organizrii particulare a sistemului, asigur o protecie a datelor fa de accese
neautorizate i de anumite defecte de funcionare.
Proiectarea unei baze de date const din proiectarea logici fizice a acesteia, pentru a corespunde
cerinelor utilizatorilor pentru un anumit set de aplicaii.
n general, vom considera c proiectarea corect a unei baze de date trebuie s parcurg
urmtoarele etape:

Analiza cererilor i strngerea de informaii referitoare la aplicaie.

Proiectarea conceptual a bazei de date.

Alegerea unui sistem de gestiune al bazelor de date.

Proiectarea logic a bazei de date.

Proiectarea fizic a bazei de date.

Implementarea bazei de date i a aplicaiei.

Modelul entitate-relaieeste cel

mai utilizat model conceptual de nivel nalt,care reprezint

schema conceptual a bazei de date cu ajutorul entitilor i a relaiilor dintre acestea. Acest
model a fost introdus n anul 1976 de P.S.Chen. Elementele de baz folosite n cadrul acestui model
sunt conceptele de entitate i cel de relaie. O entitate este un obiect al lumii reale, cu o
existenindependenti poate reprezenta un obiect fizic, o activitate, un concept. O entitate este
un obiect cu existen fizic , de exemplu: persoan particular, automobil, companie, activitate, curs
universitar. Orice entitate are o serie de proprieti numite atribute, ce descriu entitatea respectiv.
Cu toate c nu reprezint acelai lucru, pentru denumirea de entitate se mai folosete i denumirea
de tabel al bazei de date, iar pentru atribute cmpurile tabelului.
n proiectarea bazelor de date se definesc relaii sau asocieri
entiti

componente,

pentru a reprezenta

anumite

aspecte

ale

ntre mulimile
realitii

de

pe care o

modeleazbaza de date. O relaie este o coresponden ntre entiti din una sau mai multe mulimi
de entiti. Gradul unei relaii este dat de numrul de mulimi de entiti asociate. Relaiile pot fi
binare (ntre 2 mulimi de entiti) sau multiple (ntre mai mult de 2 entiti). Relaiile binare sunt
mprite n trei categorii, dup numrul elementelor
puse

n coresponden de relaia respectiv.

din fiecare din

cele dou mulimi

Relaia unul-la-unul este cel mai simplu tip de relaie. Ea este relaia prin care unui
element din mulimea E1 i corespunde un singur element din mulimea E2 i reciproc.

Fig.2. Relaia unu-la-unu


Aceast relaie unul-la-unul este foarte rar folosit n lumea real. Cel mai des, ea este
folosit pentru a reduce numrul de atribute dintr-o entitate, pentru a nu depi numrul maxim de
cmpuri asociate pentru o tabel, acesta fiind de circa 255. Se mai poate folosi i n cazul n care
dorim desprirea elementelor fixe, a informaiilor care se modific mai rar fa de cele care se
modific destul de des.
Relaia unul-la-multe (1-N sau one to many). Aceast relaie este o relaie prin care unui
element din mulimea E1 i corespund unul sau mai multe elemente din mulimea E2, dar
unui element din mulimea E2 i corespunde un singur element din mulimea E1.

Fig.3.Relaia unul-la-multe

Relaia multe-la-multe (M-N sau many to many). Aceast relaie este o relaie prin care unui
element din mulimea E1 i corespund unul sau mai multe elemente din mulimea E2, i reciproc.

Fig.4.Relaia multe-la-multe
Acest tip de relaie este foarte des ntlnit, dar nu poate fi implementat n bazele de date
relaionale. De fapt, pentru modelarea acestei relaii se folosete o relaie suplimentar, de tip unul-lamulte pentru fiecare din relaiile iniiale.
Toate relaiile prezentate anterior sunt relaii binare, avnd cte dou relaii implicate. Relaiile
unare folosesc doar o singurrelaie, aceasta fiind asociat cu ea nsi.

Fig.5.Relaia unar
Exemplul clasic al acestei relaii unare este cazul managerului unei companii, care la rndul
su este tot un angajat al acelei companii.

Constrngerile de integritate sunt reguli care se definesc la proiectarea unei baze de date i care
trebuie s fie respectate de-a lungul existenei acesteia. Entitiile unei baze de date reflect
realitatea modelati de aceea valorile pe care le conin trebuie s respecte anumite reguli, care s
corespund celor din realitate. Vom folosi n continuare pentru termenul de entitate

denumirea

tabel. Constrngerile se pot clasifica astfel:

n cadrul tabelei
sau ntre tabele.

Constrngerile din cadrul unei tabele sunt reguli care se impun n cadrul unei singure tabele i
asigur integritatea datelor acesteia. Ele sunt de 3 categorii:
constrngeri de domeniu.
Aceste constrngeri sunt condiii care se impun valorilor atributelor i asigurintegritatea
domeniilor atributelor.
constngeri de nuplu (de nregistrare din tabel).
Aceste constrngeri sunt condiii care se impun nuplurilor unei entiti (nregistrrilor din tabel)
i asigur identificarea corect a nuplurilor prin intermediul cheilor primare.
constrngeri impuse de dependene de date(dependene funcionale).
Acestea sunt constrngeri prin care valorile unor atribute ale unei entiti (cmpuri ale tabelei)
determin valorile altor atribute ale aceleiai entiti. Constrngerile ntre tabele sunt reguli care se
impun ntre dou sau mai multe relaii. Cele mai importante sunt constrngerile de integritate
referenial, care se realizeaz prin intermediul cheilor strine i asigur asocierea corect a
tabelelor.
Constrngerile de domeniu sunt condiii impuse valorilor atributelor pentru ca acestea s
corespund semnificaiei pe care o au n realitatea modelat. n reprezentarea unei entiti printr-un
tabel, valorile atributelor sunt reprezentate pe coloane. Din aceast cauz aceste constrngeri se
mai numesc i constrngeri de coloan. Vom descrie 3 tipuri de constrngeri de coloan:

Constrngerea NOT NULL. Valoarea NULL este o valoare particular, care nu reprezint
valoarea 0, ci lips de informaie. Aceast valoare NULL poate aprea cnd nu se cunosc
respectivele informaii, ca de exemplu, n aplicaia proiectat de noi, n tabela StudPersonal nu se
cunoate numele tatlui (aceast informaie nu este esenial). Nu orice atribut poate lua
valoarea NULL, ca exemplu, numele unui student, pentru ca nu ar avea sens nregistrarea unui
student al crui nume nu se cunoate. n astfel de situaii la definirea relaiilor se impune
atributului constrngerea NOT NULL, nsemnnd c acest atribut nu poate lua valoare NULL
n orice nregistrare din tabel

Constrngerea DEFAULT. Aceast constrngere este folosit pentru stabilirea unei valori

implicite (DEFAULT) pentru un atribut al entitii. n cazul n care la inserarea

unui nuplu

(nregistrri) nu se specific valoarea unui atribut (cmp), atunci acesta primete valoarea implicit
(dac a fost definit) sau valoarea NULL (dac nu a fost definit o valoare implicit pentru atributul
respectiv, dar sunt admise valori NULL). Dac nu a fost definit o valoare impliciti nici nu sunt
admise valori NULL se genereaz o eroare.

Constrngerea CHECK. Constrngerea CHECK este dupcum i spune i numele o constrngere

de verificare. n limbajul SQL, care va fi prezentat ntr-un capitol viitor, domeniile n care pot lua
valori atributele se pot stabili ca tipuri de date predefinite. Pentru fiecare atribut se pot aduga
constrngeri de verificare la definirea tabelului.
Dependena funcional definete relaia dintre un atribut sau un grup de atribute ale unui tabel i
un alt atribut sau grup de atribute ale altuia. Dup cum am specificat, atributele se refr la
cmpurie tabelei. Prin urmare trebuie s vedei ce cmpuri depind de alte cmpuri.

n orice

tabel pot exista dou categorii de dependene funcionale:


Dependene funcionale determinate de cheile tabelei; astfel de dependene funcionale nu
produc redundana datelor i nici anomalii de actualizare a relaiei

Dependene funcionale n care atributul determinat nu este o cheie a tabelei; astfel de

dependene funcionale produc redundana datelor i anomalii de actualizare a tabelei.


Constrngerile de cheie sunt constrngeri

implicite,

coninute n definiia relaiei i sunt

verificate i impuse automat de sistemul de gestiune; proiectantul bazei de date nu trebuie


sprevad nimic suplimentar pentru ca aceste constrngeri s fie satisfcute de orice stare a
relaiei. n schimb, dependenele funcionale n care atributul determinant nu este o cheie a
relaiei sunt constrngeri explicite, care nu
gestiune.

sunt verificate i nici impuse de sistemul de

Verificarea i impunerea acestor dependene funcionale se poate face numai

procedural, prin triggere, proceduri stocate sau funcii impuse n programele de aplicaie.
Setul de comenzi SQL
Comanda + Descriere:
SELECT
este comanda cea mai utilizata ; este folosita pentru obtinerea datelor din bazele de date
INSERT
aceste trei comenzi sunt utilizate pentru a introduce noi UBDATE

rinduri,pentru a schimba rindurile existente si stergerea


DELETE
rindurilor nedorite din tabelele bazelor de date respective. (Ele sunt cunoscute in ansamblu ca DML
sau comenzi ale limbajului de manipulare a datelor.)
CREATE
aceste trei comenzi sunt utilizate dinamic pentru a crea ,
ALTER
utiliza si sterge orice structura de date,de exemplu,tabele,
DROP
expuneri ,indecsi.(Ele sunt cunoscute sub numele colectiv DDL sau comenzi ale limbajelor de
definire a datelor).
GRANT
aceste doua comenzi sunt utilizate pentru a da sau a lua
REVOKE
drepturile de acces pentru bazele de date si structurile din Oracle.
N.B. Acestea sunt o parte a comenzilor SQL. Pentru o lista mai completa de comenzi se recomanda
- Manualul de Referinta a Limbajului SQL- .
Scrierea comenzilor SQL
Cand scriem comenzi SQL ,este important sa ne reamintim cateva reguli simple pentru
construirea unor declaratii valide care sunt si usor de citit si de editat:
Comenzile SQL pot fi pe una sau mai multe linii.

Clauzele sunt uzual plasate pe linii separate.

Tabelarea poate fi folosita.

Cuvintele de comanda nu pot fi separate pe mai multe linii.

Comenzile SQL nu sunt 'case sensitive'.

O comanda SQL este introdusa la promptul SQL si liniile subsecventelor sunt numarate.

O singura declaratie poate fi considerata curenta cat timp ea este in buffer si poate fi rulata
intr-un numar de moduri :
plasand un punct si virgula(;) la sfarsitul ultimei clauze.
plasand un punct si virgula /slash la ultima linie in buffer.
plasand un slash(/) la promptul SQL.
scriind un R[UN] (comanda SQL) la promptul SQL.

10

Fiecare din urmatoarele declaratii sunt valide:


SELECT * FROM EMP;
SELECT
*
FROM EMP
;
SELECT *
FROM EMP;
In acest manual comenzile SQL sunt sparte in clauze pentru claritate.
Blocul de interogare de baza
Declaratia SELECT regaseste informatia din baza de date implementand toti operatorii din algebra
relationala.
In cele mai simple forme trebuie sa contina:
1. O clauza SELECT ,care listeaza coloanele pentru afisare astfel incat este esentiala o Proiectie.
2. O clauza FROM care specifica tabela implicata.
Pentru a lista toate numerele departamentelor,numele angajatilor si numarul managerilor in tabela
EMP introduceti urmatoarele:
SELECT DEPTNO,ENAME,MGR
FROM
EMP;
DEPTNO ENAME

MGR

------ ---------- ----20 SMITH

7902

30 ALLEN

7698

30 WARD

7698

20 JONES
30 MARTIN

7839
7698

30 BLAKE

7839

10 CLARK

7839

11

12

20 SCOTT

7566

10 KING
30 TURNER

7698

20 ADAMS

7788

30 JAMES

7698

20 FORD

7566

10 MILLER

7782

De remarcat ca numele coloanelor sunt separate prin spatiu. Este posibil sa selectam toate coloanele
din tabela prin specificarea unui asterix ('*') dupa cuvantul SELECT.
FROM

EMP;

EMPNO ENAME

JOB

MGR HIREDATE

SAL

COMM DEPTNO

----- ------- ------- ---- --------- --------- ------- -----7369 SMITH CLERK

7902 13-JUL-83

800.00

20

7499 ALLEN SALESMAN 7698 15-AUG-83 1,600.00 300.00

30

7521 WARD

30

7566 JONES

SALESMAN 7698 26-MAR-84 1,250.00 500.00


MANAGER 7839 31-OCT-83 2,975.00

20

7654 MARTIN SALESMAN 7698 05-DEC-83 1,250.00 1.400.00


SELECT

7698 BLAKE

MANAGER 7839 11-JUN-84 2,850.00

7782 CLARK

MANAGER 7839 14-MAY-84 2,450.00

7788 SCOTT

ANALYST 7566 05-MAR-84 3,000.00

13

30
10
20

30

7839 KING

PRESIDENT

09-JUL-84 5,000.00

10

7844 TURNER SALESMAN 7698 04-JUN-84 1,500.00

.00 30

7876 ADAMS

20

CLERK

7788 04-JUN-84 1,100.00

7900 JAMES

CLERK 7698 23-JUL-84

950.00

7902 FORD

ANALYST 7566 05-DEC-83 3,000.00

30
20

Alte elemente in clauza SELECT


Este posibil sa se includa si alte elemente in clauza SELECT.

Expresii aritmetice
Alias-uri de coloane
Coloane concatenate
Literali

Toate aceste optiuni ajuta utilizatorul sa ceara date si sa le manipuleze in functie de scopurile
interogarii; de exemplu, executia calculelor, legarea coloanelor impreuna,sau afisarea sirurilor de litere
din text.
Expresii aritmetice
O expresie este o combinatie de una sau mai multe valori, operatori si functii care sa evalueaza la
o valoare. Expresiile aritmetice pot contine nume de coloane, valori numerice constante si operatori
aritmetici: Operatori Descriere
----------------+
*
/

adunare
scadere
inmultire
impartire

SELECT ENAME, SAL*12, COMM


FROM

EMP;

Daca expresia aritmetica contine mai mult decat un operator, prioritatile sunt *,/,la inceput,apoi
+,- (de la stanga la dreapta pentru operatorii de aceeasi prioritate).

14

In urmatorul exemplu,inmultirea (250*12) este evaluata prima;apoi valoarea salariului este adunata la
rezultatul multiplicarii(3000). Astfel pentru randul lui SMITH avem :800+3000=3800.
SELECT ENAME,SAL + 250 * 12
FROM EMP;
Parantezele pot fi utilizate pntru specificarea ordinii de executie a operatorilor ,daca,de
exemplu, adunarea e dorita inainte de inmultire:
SELECT ENAME,(SAL + 250) * 12
FROM

EMP;

Aliasuri de coloana
Cand se afiseaza rezultatul unei interogari,SQL*Plus in mod normal utilizeaza numele coloanelor
selectate ca titlu.In multe cazuri acest nume poate fi criptic sau fara inteles. Puteti schimba un titlu de
coloana utilizand un 'ALIAS'. Un alias de coloana da unei coloane un nume de titlu alternativ la
iesire. Specificati aliasul dupa coloana in lista selectata.Prin default, titlurile alias vor fi fortate la
litere mari si nu pot contine blankuri,numai daca aliasul este inclus intre ghilimele(" "). Pentru a afisa
titlul de coloana ANNSAL pentru salariul anual insemnand SAL*12,utilizati un alias de coloana:
SELECT ENAME,SAL*12 ANNSAL,COMM
FROM

EMP;

Odata definit un alias poate fi utilizat de comenzile SQL care sunt tratate in capitolele 10 si 11.
Nota:
Intr-o declaratie SQL ,un alis de coloana poate fi utilizat numai in clauza SELECT.

15

II. Realizarea unei baze de date


S se proiecteze modelul bazei de date relaionale, corespunztoare ntreprinderii sau seciei
la care lucrai. n timpul proiectrii s se utilizeze procedurile:
-

crearea unui model al afacerii, exemple: o baz de date pentru un magazin, o baz de date
pentru un spital, o baz de date pentru o farmacie, o baz de date pentru evidena
locatarilor, o baz de date pentru biblioteca naional etc.

crearea unui model al datelor;

crearea unui proiect de baz de date;

crearea definiiei unui tabel;

crearea unei baze de date relaionale;

Modelul trebuie s conin.


1. 4 5 tabele cu cte 3 6 coloane fiecare.
2. Tipuri de date char, varchar2, number, date.
3. Numrul de tupluri n fiecare tabel trebuie s fie nu mai mic de 8.
4. S se prevad restriciile de tip Not Null, Primary key, Check.

Pe baza modelului creat s se demonstreze procedurile de:


- afiare a coloanelor tabelelor;
- selectare a datelor din tabele;
- ntreinere a datelor;
- folosire a funciilor;
- creare de reuniuni i vederi.

Fig.6. Crearea primului tabel components

Fig.7. Crearea tabelului Diode

Fig.8.Crearea tabelului Transistors

17

Fig.9.Crearea tabelului Resistance

Fig.10. Umplerea cu date a tabelului Components

18

Fig.11. Umplerea cu date a tabelului Diode

Fig.12.Umplerea cu date a tabelului Transistors.


19

Fig.13.Umplerea cu date a tabelului Resistors

Fig.14.Afisarea a unei singure coloane NAME din tabelul Transitors

Fig.15. Afisarea rezistorilor numele cruia se ncepe cu litera W.

20

Fig.15. Afisarea datelor din coloana Polarity din tabelul Diode.

Fig.16. Modificarea Symbolului din tabela Resistors din R n W.

Fig.17.Crearea unei uniuni a valorilor din coloana Name din tabelele Diodes i Transistors

21

Fig.18. Crearea unei vederi cu numele vedere

22

III.

Concluzii

n aceast lucrare de curs s-a efectuat o baz de date a diferitor obiecte electronice cum ar fi
tranzistor, dioda, rezistena. Prima tabel este creat pentru cataloga toate obiectele electronice.
Tabela Components conine urmtoarele coloane:
1)
2)
3)
4)

ID conine ID-ul componentei


Name conine componentei
Symbol simbolul componentei
Polarity - polaritatea

Pe parcursul elaborrii bazei de date, au fost utilizate diferite aspect cheie a limbajului SQLPlus.
Au fost utilizate constrngeri de tip NOT NULL sau PRIMARY KEY. Au fost mplementate funcii
MAX, MIN, SUM asupra datelor din tabele. Deasemenea sau fost create reuniuni i vederi ai
tabelelor.

23

IV.

Bibliografie

1. G.Gardarin. Matriser les Bases De Donnes. EYROLLES


2. Tom Luers. Oracle 7. Versiunea 7.2. Teora. Bucuresti, 2000
3. Abdelaziz Abdellatif, Mohamed Limame, Abdelmalek Zeroual. Oracle 7. Langages Architecture - Administration. EYROLLES
4. S. Miranda. A. Ruols. Client-Serveur. EYROLLES
5. G.Gardarin. Bases De Donnes. EYROLLES
6. P. Marcenac. SGBD relationnelles. . EYROLLES
7. R.Elmasri. S. B. Fundamental of Database Systems. The Benjamin Publising company, inc.
8. C. Batini, S. Ceri, Sh. Navathe Conceptual Database design. The Benjamin Publising
company, inc.
9. P. Atzeni. V. Antonelis. Relational Database Theory. The Benjamin Publising company, inc.
10. C. Pascu, A. Pascu. Totul despre SQL. Ed Tehnic Bucuresti, 1994.
11. SQL server 6.5. Bob Branchec, Peter Haslenhurst e.a.. Le Macmillan. Paris.

24

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