Baze de Date
Baze de Date
Baze de Date
Titular curs,
Lector inf. drd. Gheorghe PANFILOIU
GalaŃi - 2009
Note de curs – Baze de date
1
Andy Oppel, SQL fără mistere, Editura Rosetti EducaŃional, Bucureşti, 2006
2
Note de curs – Baze de date
Figura 1
3
Note de curs – Baze de date
Scheme externe
Datele ce apar în schemele externe pot fi luate ca atare nivelele logic şi fizic sau
pot fi deduse din aceste pe baza unor calcule. Un exemplu, clasic să spunem, îl constituie
4
Note de curs – Baze de date
vârsta unei persoane, care ca atribut într-o vedere nu trebuie să existe ca atare la nivelul
logic sau fizic, din cauza schimbării conŃinutului său. La nivelul logic, atributul
data_naşterii este cel indicat a fi reŃinut. Printr-un calcul simplu, scăderea acestei date din
data_curentă, furnizată de sistemul de calcul, se poate afla vârsta persoanei în orice
moment.
NoŃiunile cele mai des utilizate ce intervin în vederi sunt: entitate, relaŃie, atribut,
cheie, funcŃionalitate, diagramă.
Entitatea este o noŃiune primară, care nu se poate defini formal. Totuşi, o definiŃie
a acestei noŃiuni ar putea fi: mai multe elemente de acelaşi tip. Câteva exemple pot să
conducă la înŃelegerea acestei noŃiuni: student, persoană, automobil, conturi, etc.
Fiecare entitate este descrisă de o mulŃime de proprietăŃi de interes pentru
problema ce se doreşte a fi rezolvată, numite atribute, care, pentru diferitele elemente ale
entităŃii, pot să primească valori din anumite mulŃimi numite domeniul atributului
respectiv. Aceste domenii pot fi submulŃimi ale diferitelor mulŃimi de numere: reale,
naturale, etc., sau submulŃimi ale mulŃimii şirurilor de caractere, de exemplu culori, mărci
sau modele( de exemplu, dacă ne referim la automobile).
Un atribut sau o mulŃime de atribute pentru care valorile asociate determină în
mod unic orice element al entităŃii se numeşte cheie. De obicei, orice entitate admite cel
puŃin o cheie, implicit se consideră că toate elementele unui entităŃi sunt distincte. În
cazul în care există elemente care să aibă aceleaşi valori pentru toate atributele, se ia
drept cheie un atribut suplimentar reprezentat de numărul asociat elementului în entitatea
respectivă(numărul de ordine), care defineşte în mod unic elementul.
Se numeşte relaŃie între entităŃile E1, E2, ..., En orice submulŃime a produsului
cartezian al mulŃimilor elementelor celor n entităŃi, adică mulŃimi de elemente de forma
(e1, e2, ..., en), unde e1 este un element din E1, unde e2 este un element din E2 ş.a.m.d. O
astfel de relaŃie se notează cu REL(E1, E2, ..., En), unde REL este numele asociat relaŃiei,
iar n reprezintă aritatea acesteia. Pentru n = 2 se poate vorbi de relaŃii binare. În cadrul
acestora se poate face o clasificare a lor în funcŃie de câte elemente corespund fiecărui
element dintr-o entitate în cealaltă entitate, astfel:
- relaŃie unu-la-unu (notată 1:1), în cazul în care fiecărui element din prima
entitate îi corespunde cel mult un element din a doua entitate şi invers;
- relaŃie unu-la-mai-mulŃi (notată cu 1:N), în care fiecărui element al primei
entităŃi îi pot corespunde mai multe elemente din a cea de-a doua entitate, dar
fiecărui element din a doua entitate îi corespunde cel mult un element din
prima entitate;
- relaŃie mai-mulŃi-la-mai-mulŃi (notată M:N), în cazul în care fiecărui element
al primei entităŃi îi pot corespunde mai multe elemente din cea de-a doua
entitate şi invers.
InformaŃiile privind structura unei vederi pot fi sintetizate grafic în ceea ce se
numeşte diagramă entitate-relaŃie, care pune în evidenŃă entităŃile ce intervin
reprezentate prin dreptunghiuri, atributele asociate lor reprezentate prin elipse şi diferitele
relaŃii dintre entităŃi reprezentate prin săgeŃi(cu vârf dublu către entitatea pentru care pot
apărea mai multe elemente în relaŃie cu un element din cealaltă entitate).
Scheme conceptuale
5
Note de curs – Baze de date
Scheme interne
6
Note de curs – Baze de date
Cea mai importantă parte în construirea unei baze de date o constituie studiul
sistemului ce urmează a fi reflectat în aceasta. Stabilirea informaŃiilor relevante pentru
sistem şi a relaŃiilor dintre ele este un lucru esenŃial pentru etapele de construire a bazei
de date şi a aplicaŃiei pe care aceasta se bazează, de aceea prima etapă în construirea unei
baze de date o constituie o apreciere generală a sistemului. Se va alcătui astfel o schiŃă
preliminară, care cuprinde, printre alte informaŃii, şi modul în care sistemul este văzut de
diferitele persoane implicate în sistemul respectiv. Se creează, astfel, un model
informaŃional în care sunt cuprinse principalele funcŃiuni şi fluxul de informaŃii din
sistem. Sistemul trebuie privit unitar şi nu ca o alăturare a componentelor sale. În acest
sens trebuie avut în vedere că multe părŃi sunt folosite în comun de diferitele componente
ale sistemului.
Modelul cel mai frecvent utilizat, aşa cum s-a specificat şi mai sus, este modelul
entitate-relaŃie (E-R), descris de Chen în 1976. Modelul are drept obiecte semantice
7
Note de curs – Baze de date
entitatea, proprietatea sau atributul, relaŃia şi subtipul unei entităŃi, elemente descrise
anterior.
Modelul logic al bazei de date este reprezentat grafic prin diagrame entitate-
relaŃie. În figura 2 se poate vedea modelul logic al bazei de date considerată ca exemplu
practic.
Figura 2
Vederile utilizatorilor
8
Note de curs – Baze de date
Orice aplicaŃie presupune utilizarea unei părŃi din baza de date, folosind
informaŃiile într-un mod determinat. Această parte de informaŃie se numeşte vedere. O
bază de date poate să aibă una sau mai multe vederi. Fiecărei vederi îi corespunde un
grup de utilizatori. Pentru un grup particular se definesc tipurile de cereri de informaŃii şi
modul de determinare a datelor din baza de date care formează răspunsuri la aceste cereri.
9
Note de curs – Baze de date
SQL este unul din limbajele relaŃionale de cereri, şi formează nucleul multor
sisteme de gestiune a bazelor de date. În luna mai, anul 1986, ANSI a recunoscut
standardizarea limbajului SQL.
SQL, ca orice limbaj, posedă o listă de instrucŃiuni. Majoritatea acestor
instrucŃiuni sunt executabile, ele putând fi interpretate şi executate imediat în mod
interactiv sau putând fi incluse în diferite aplicaŃii scrise în alte limbaje de programare ca
APL, BASIC, C, COBOL şi altele, executându-se în momentul rulării programului
respectiv. Între cele două moduri de utilizare sunt mici deosebiri. Astfel, la apelul într-un
alt limbaj de programare se utilizează construcŃia EXEC SQL, urmată de definirea unor
variabile de transfer de informaŃii prin INTO: variabilă, care permite comunicarea între
programe şi sistemul de gestiune a bazelor de date.
Forma generală a unei instrucŃiuni SQL este:
10
Note de curs – Baze de date
CondiŃia poate conŃine operatorii relaŃionali =, <>, >=, <=, < şi >, operatorii booleeni
AND, OR sau NOT, precum şi eventual paranteze, pentru a impune o altă ordine de
evaluare. Este permisă folosirea funcŃiilor agregate COUNT, SUM, AVG, MAX şi MIN,
care se pot aplica relaŃiilor unare având ca rezultat numărul(contorul), suma, valoarea
medie aritmetică, cel mai mare şi respectiv cel mai mic element din cele cărora li s-a
aplicat funcŃia respectivă. Aceste funcŃii agregate se pot aplica unor grupe de elemente
precizate prin GROUP BY şi eventual selectate prin condiŃia HAVING.
În condiŃiile din instrucŃiunea SELECT pot fi utilizate şi construcŃii de forma:
câmp LIKE cuvânt
câmp NOT LIKE cuvânt
câmp IS NULL
câmp IS NOT NULL
unde câmp este de tip cuvânt şi cuvânt poate conŃine caracterul “_”, care înlocuieşte
orice caracter, sau “%”, care înlocuieşte orice cuvânt, orice alt caracter fiind luat în
considerare. Rezultatul este o valoare de adevăr, după cum câmp conŃine o valoare şir de
caractere ce se conformează modului de alcătuire din cuvânt sau nu, respectiv conŃine sau
nu valoarea NULL. Se pot folosi, de asemenea, construcŃiile IN sau NOT IN, pentru a
indica apartenenŃa sau neapartenenŃa la o mulŃime, EXISTS sau NOT EXISTS pentru a
verifica existenŃa sau inexistenŃa unui element într-o mulŃime şi se poate aplica UNION
între două selecŃii pentru a realiza reuniunea celor două relaŃii ce rezultă în urma
operaŃiilor de selecŃie.
Se pot atribui nume unor tupluri ale unor relaŃii folosite ca variabile libere ce pot
fi utilizate în celelalte părŃi componente ale cererii, spre exemplu:
SELECT … FROM tabela nume1 WHERE …,
unde nume1 poate fi folosit, nume1.componentă semnificând apartenenŃa componentei la
tabela specificată(calificare).
Definirea unei tabele se face cu instrucŃiunea CREATE TABLE, în care se
specifică numele tabelului care se creează, numele şi tipurile de date ale atributelor sale,
câmpurile care sunt componente ale cheii primare şi ale altor chei, împreună cu
componentele lor, având forma generală:
CREATE TABLE tabel
(definire_câmp1[, definire_câmp2]…
[, PRIMARY KEY (câmpuri)]
[, FOREIGN KEY (câmp) REFERENCES tabel
[, FOREIGN KEY (câmp) REFERENCES tabel]…]
unde definire_câmp este de forma: nume_câmp tip_dată [NOT NULL], iar tip_dată
poate fi:
- INTEGER, pentru o valoare întreagă pe un cuvânt;
- SMALLINT pentru o valoare întreagă pe un semicuvânt;
- DECIMAL(lungime, zecimale), unde lungime reprezintă numărul total de
cifre + 1 (poziŃia pentru semn) + 1 (poziŃia mărcii zecimale), iar zecimale,
numărul acestora;
- FLOAT(p) pentru un număr real cu p cifre binare precizie;
- CHARACTER(n) pentru cuvinte de n octeŃi;
- VARCHAR(n) pentru cuvinte de cel mult n octeŃi;
- VARGRAPHIC(n) pentru cuvinte de cel mult n caractere de câte 16 biŃi;
11
Note de curs – Baze de date
în care WITH CHECK OPTION indică verificarea condiŃiilor din definirea vederii în
momentul executării operaŃiilor UPDATE şi INSERT.
Crearea unui index se face cu instrucŃiunea CREATE INDEX, a cărei sintaxă
este:
InstrucŃiunile DROP TABLE, DROP VIEW şi DROP INDEX sunt folosite pentru
eliminarea unor elemente din baza de date: tabele, vederi sau fişiere index. Forma
generală a acestor instrucŃiuni este:
DROP TABLE tabel;
DROP VIEW vedere;
DROP INDEX index;
12
Note de curs – Baze de date
UPDATE tabel
SET câmp1 = expresie1 [, câmp2 = expresie2] …
[WHERE condiŃie];
DELETE
FROM tabel
[WHERE condiŃie];
INSERT
INTO tabel [(câmp1[, câmp2]…)]
VALUES (valoare1[, valoare2]…);
sau
INSERT
INTO tabel [(câmp1[, câmp2]…)]
subcondiŃie;
13
Note de curs – Baze de date
Se spune că o relaŃie este în prima formă normală (1NF) dacă fiecărui atribut îi
corespunde o valoare indivizibilă (atom), deci orice valoare nu poate fi o mulŃime sau un
tuplu de valori în anumite domenii şi nu pot să apară grupuri repetitive.
RelaŃiile în prima formă normală pot fi vizualizate sub formă de tabele, permit o
referire simplă a datelor prin indicarea numelui tabelului, a coloanei sau atributului şi a
cheii tuplului din care face parte informaŃia respectivă (adresare tip sistem de
coordonate), operatorii pentru aceste relaŃii sunt mai simpli şi în număr mai mic şi permit
definirea unor tehnici de proiectare şi utilizare a bazelor de date.
Spunem că schema relaŃională R este în a treia formă normală (3NF) dacă este în
a doua formă normală şi, pentru orice dependenŃă X A cu A neconŃinut în X care are
loc în R, fie X conŃine o cheie, fie A este un atribut prim.
Cu alte cuvinte, relaŃia R este în 3NF dacă şi numai dacă atributele care nu apar în
chei sunt independente între ele şi sunt complet dependente de cheia primară (atributele
prime nu sunt dependente tranzitiv de cheia primară).
14
Note de curs – Baze de date
a lui R conŃinută în X. Orice relaŃie normală Boyce-Codd este în a treia formă normală,
dar reciproca nu este adevărată.
Integritate
15
Note de curs – Baze de date
tip structural, legate de anumite egalităŃi între valori, şi se exprimă prin dependenŃe
funcŃionale sau prin declararea unor câmpuri cu valori unice (cel mai adesea aceste
câmpuri sunt chei). O altă serie de condiŃii de integritate privesc valorile actuale
memorate în baza de date, permitând numai introducerea unor valori dintr-un domeniu
sau stabilind relaŃii aritmetice între diferite câmpuri.
16
Note de curs – Baze de date
Parte practică
17
Note de curs – Baze de date
2
MySql funcŃionează doar sub serverul Apache.
18
Note de curs – Baze de date
Se va executa apache_installservice.
Se va executa mysql_installservice.
19
Note de curs – Baze de date
20
Note de curs – Baze de date
Dacă se doreşte a se lucra cu cele două programe, se vor acŃiona butoanele Start
pentru cele două servicii, prin intermediul aceluiaşi program xampp-control.
21
Note de curs – Baze de date
22
Note de curs – Baze de date
Pentru toate instrucŃiunile care vor fi executate, după completarea unor rubrici
corespunzătoare, sistemul creează instrucŃiuni SQL echivalente, care vor fi afişate într-o
fereastră, ca în figura 9.
23
Note de curs – Baze de date
24
Note de curs – Baze de date
Figura 13. ConŃinutul directorului de date mysql şi a directorului bazei de date studenti
25
Note de curs – Baze de date
În cotinuare se vor crea tabele a căror structură a fost definită. Se poate observa că
trebuie să furnizăm numele tabelului şi numărul de câmpuri.
Astfel pentru tabela studenŃi vom tasta „studenti” pentru numele tabelului şi
respectiv “7” pentru numărul de câmpuri, în locaŃiile corespunzătoare. Apoi click pe
butonul .
Se deschide o nouă fereastră, vizualizată în figurile 15, 16, 17 următoare. Au fost
necesare trei figuri, datorită faptului că imaginea ferestrei este mai mare decât mărimea
ecranului, şi a fost necesară defilarea spre dreapta şi în jos.
26
Note de curs – Baze de date
27
Note de curs – Baze de date
Se vor completa rubricile (cele mai uzuale), conform imaginii din figura 18:
28
Note de curs – Baze de date
29
Note de curs – Baze de date
Se vede că avem acces din nou la dialogul care permite crearea structurii unei noi
tabele, adică rubricile:
30
Note de curs – Baze de date
31
Note de curs – Baze de date
32
Note de curs – Baze de date
Figura 27. SecvenŃa de acŃiuni pentru a intra în modul editare a unei înregistrări
33
Note de curs – Baze de date
Pentru ştergerea unei înregistrări, se va selecta tabela, apoi tab-ul Navigare şi apoi
se va executa click pe simbolul 1, de pe rândul corespunzător înregistrării.
Consultarea unei baze de date este operaŃia care este cea mai importantă.
Consultarea unei singure tabele se poate face simplu, acŃionând cu mouse-ul, în locaŃia 1
sau 2, conform figurii 31.
34
Note de curs – Baze de date
Figura 32. Rezultatul consultării unei tabele, care poate fi listat la imprimantă
De cele mai multe ori este necesar a se consulta date care se află în mai multe
tabele relaŃionate prin intermediul unor coduri. O astfel de situaŃie poate fi, în cazul de
faŃă, afişarea mediilor studenŃilor.
Pentru aceasta se va construi o comandă Select, ca în secvenŃa următoare:
35
Note de curs – Baze de date
Figura 34. Fereastra SQL, care permite introducerea unei comenzi SQL
36
Note de curs – Baze de date
Figura 35. Fraza (comanda) Select pentru interogarea bazei, obŃinerea mediilor
studenŃilor
DocumentaŃia privind sintaxa comenzii select, pentru “culegerea datelor” din mai
multe tabele poate fi găsită la adresa:
http://dev.mysql.com/doc/refman/5.1/en/join.html
37
Note de curs – Baze de date
Anexă
1. La terminarea creerii tuturor tabelelor bazei de date, conform exemplului, în
catalogul bazei de date Studenti se află fişierele conform figurii 37.
38
Note de curs – Baze de date
BIBLIOGRAFIE
39
Note de curs – Baze de date
40