Sunteți pe pagina 1din 44

Universitatea din Craiova

Facultatea de Automatica , Calculatoare si Electronica


Sectia : Automatica si Informatica Aplicata
Grupa 10201, 10202, 10203

PROIECT
la disciplina
BAZE DE DATE

Studenti : Profesor
Coordonator:
Cojocaru Viorica Stoian Viorel
Ilie Andreea
Fieroiu Alin-Nicolae
Popa Elena-Camelia

CRAIOVA , 2009

1
CUPRINS

Cap 1 . Introducere …………………………………………………………………….pag 3


1.1 Notiuni despre BD si SGBD
1.2. Datele operaţionale
1.3. Independenţa datelor
1.4. Nivelul de organizare a datelor într-o bază de date
1.5. Sisteme de gestiune a bazelor de date(SGBD)
Cap.2. Sistemul Jocurilor Olimpice de Iarna Olimpiada Torino 2006……………...pag 7
Cap.3. Schema conceptuala.................................………………………………………pag 8
3.1.Notiuni generale
3.2.Schema conceptuala propriu-zisa
Cap.4. Schema logica……………………………………………………………………pag 11
4.1. Notiuni generale
4.2.Schema logica propriu-zisa
Cap 5. Normalizarea bazelor de date………………………………………………….pag 14
5.1.Notiuni generale
5.2.Normalizarea BD
Cap.6. Denormalizara bazelor de date…………………………………………………pag 26
6.1.Notiuni generale
6.2. Denormalizarea BD
Cap.7. Sistemul de gestiune MySQL…………………………………………………..pag 29
7.1.Notiuni generale
7.2.Aplicatii
7.3.Tabelele bazei de date Torino2006
Cap8. Concluzii……………………………………………………………………….pag 43
Cap9. Bibliografie ……………………………………………………………………pag 44

2
Cap.1. Introducere
1.1 Notiuni despre Baze de date si
Sisteme de gestionare a bazelor de date

O bază de date conţine toate informaţiile necesare despre obiectele ce intervin într-o
mulţime de aplicaţii, relaţiile logice dintre aceste informaţii şi tehnicile de prelucrare
corespunzătoare. În bazele de date are loc o integrare a datelor, în sensul că mai multe fişiere
sunt privite în ansamblu, eliminându-se informaţiile redundante. Este permis accesul simultan la
aceleaşi date, situate în acelaşi loc sau distribuite spaţial, a mai multor persoane prin mai multe
tipuri de interogări (BÂSCĂ 1997, 11; DESPI & 1999, 2).
O baza de date (BD) reprezinta o colectie de date integrate , anume, structurata si
dotata cu o descriere a strucrurii si a realitatilor dintre date.
Bit - este o unitate de masura a informatiei egala cu 8- biti. ( volum - fisier, BD se
masoara in biti). Fiecare obiect in BD este caracterizat cu o totalitate de atribute, ce descopera
proprietatile obiectului. Fiecare atribut din caracteristica BD in structura datei se foloseste o
singura data..De exemplu BD - Student. Aceasta includ studentii dintr-o institutie.Fiecare student
in acceasta BD este caracterizat cu proprietatile sale. Fiecare atribut descrie o proprietate, nume,
prenume, data nasterii, adresa, telefon, anul nasterii, grupa.
Data in BD a primit denumirea de "Tuplu" iar fiecare Tuplu are structura sa...In
orce lucru cu BD se foloseste SGBD. Prin menajarea datelor, se scoate informatia de date.

O bază de date poate fi:


• integrată;
• partajată.

Prin “integrată” înţelegem că baza de date poate fi gândită ca o unificare de mai multe
fişiere de date, distincte şi neredundante.

Prin “partajarea” unei baze de date se înţelege că bucăţile individuale de date din baza de
date pot fi partajate între mai mulţi utilizatori individuali, fiecare dintre ei putând avea acces la
aceeaşi bucată de date simultan (sisteme multiutilizator).

1.2. Datele operaţionale

Datele operaţionale sunt date din bazele de date, distincte de datele de intrare, ieşire sau alte
tipuri de date. O bază de date este o colecţie de date operaţionale folosite de către aplicaţiile
sistem ale unei instituţii (Muzeu, Bibliotecă, Intreprindere, etc.)
Datele de intrare sunt informaţii introduse în sistem din lumea exterioară, de obicei prin
terminale.
Datele de ieşire se referă la mesajele şi rapoartele extrase din sistem (tipărite sau afişate pe
ecran).
Entităţile de bază sunt elementele constitutive ale unei baze de date (expl. materialul arheologic,
materialul bibliografic, materialul grafic, etc.). Între aceste entităţi există întotdeauna asociaţii
sau relaţii ce le leagă într-o bază de date comună.

3
Relaţiile dintre entităţi sunt la rândul lor părţi ale datelor operaţionale, chiar mai importante decât
entităţile asociate. O relaţie poate fi asociată la una, două sau trei entităţi, iar o entitate poate fi
asociată la oricâte relaţii.

1.3. Independenţa datelor

Modul în care datele sunt organizate pe suportul secundar de stocare şi modul în care ele
sunt accesate depind de cerinţele aplicaţiei şi de ştiinţa organizării datelor şi tehnicile de acces.
Imunitatea aplicaţiilor la modificările de structură a memorării şi a strategiei de acces se
numeşte independenţă a datelor.

Tipuri de modificări pe care administratorul bazei de date (DBA) poate să le facă:


• reprezentarea datelor numerice (câmpul numeric poate fi memorat în formă internă aritmetică
sau ca un şir de caractere);
• reprezentarea datelor caracter (un câmp şir de caractere poate fi memorat în mai multe coduri de
caractere : ASCII, EBCDIC, etc.).
• Terminologie:
• Un câmp este cea mai mică unitate de date stocată în baza de date.
• Baza de date conţine mai multe ocurenţe sau instanţe pentru fiecare din tipurile de câmpuri.
• O înregistrare este o colecţie de nume de câmpuri asociate.
• O ocurenţă sau instanţă de înregistrare constă dintr-un grup de ocurenţe de câmp înrudite
(asociate) şi reprezintă o asociere între ele.
• Un fişier este o colecţie a tuturor înregistrărilor de unul sau mai multe tipuri.
• Într-o bază de date, un câmp numeric poate avea două unităţi metrice (inches şi centimetrii) la
alegerea utilizatorului.

O bază de date poate fi privită din mai multe puncte de vedere:


a. opţiunea utilizatorului, care lucrează cu anumită părţi ale unei baze de date numite vederi;
b. opţiunea administratorului bazei de date care integrează toate vederile referitoare la baza de
date într-un singur model numit schemă conceptuală, ea reprezentând nivelul logic al bazei de
date;
c. opţiunile implementatorului bazei de date (coincide uneori cu cele ale administratorului) care
priveşte baza de date ca pe o colecţie de fişiere memorate pe diferite medii externe (benzi şi
discuri magnetice), ele constituind nivelul fizic al bazelor de date.
Primele două nivele sunt descrise prin planuri ce constau în enumerarea tipurilor de
entităţi ce apar în baza de date, relaţiile dintre aceste tipuri de entităţi şi modul de trecere de la
noţiunile acestui nivel la nivelul imediat următor. În mod curent, aceste planuri se numesc
scheme externe, subscheme conceptuale sau vederi, pentru primul nivel şi scheme conceptuale
pentru al doilea nivel. Descrierile la nivel fizic sunt făcute prin scheme interne sau scheme fizice.

1.4. Nivelul de organizare a datelor într-o bază de date

Datele dintr-o bază de date pot fi structurate pe 3 niveluri, în funcţie de categoria de


personal
implicată:

4
• nivelul conceptual (global) – exprimă viziunea administratorului bazei de date asupra datelor.
Acestui nivel îi corespunde structura conceptuală (schema) a bazei de date, prin care se
realizează o descriere a tuturor datelor, într-un mod independent de aplicaţii, ce face posibilă
administrarea datelor.
• nivelul logic – exprimă viziunea programatorului de aplicaţie asupra datelor. La acest nivel
se realizează o descriere a datelor corespunzătoare unui anumit program de aplicaţie.
• nivelul fizic – care exprimă viziunea inginerului de sistem asupra datelor. Corespunde
schemei interne a bazei de date prin care se realizează o descriere a datelor pe suport fizic de
memorie.

1.5.Sisteme de gestiune a bazelor de date(SGBD)

Între baza de date fizică (adică datele aşa cum sunt ele memorate pe suport) şi utilizatorii
sistemului există un nivel de software, numit sistem de gestionare a bazelor de date (DBMS –
Data Base Management System), care permite:
• definirea – crearea bazei de date;
• introducerea (adugarea) datelor în baza de date;
• modificarea unor date deja existente în baza de date; stergerea datelor din baza de date;
consultarea bazei de date – interogarea/extragerea datelor.

Un SGBD dă posibilitatea utilizatorului să aibă acces la date folosind un limbaj de nivel


înalt, apropiat de modul obişnuit de exprimare, pentru a obţine informaţii, utilizatorul făcând
abstracţie de algoritmii aplicaţi pentru selectarea datelor implicate şi a modului de memorare a
lor. SGBD-ul este deci o interfaţă între utilizator şi sistemul de operare.
Orice SGBD conţine un limbaj de descriere a datelor (LDD) care permite descrierea
structurii unei baze de date, a fiecărei componente a ei, a relaţiilor dintre componente, a
drepturilor de acces ale utilizatorului la baza de date, a restricţiilor în reprezentarea informaţiilor,
etc. LDD-ul este utilizat atât pentru proiectarea bazelor de date, cât şi pentru redefinirea lor.
O altă componentă a SGBD este limbajul de cereri (LC) sau limbajul de prelucrare a
datelor (LPD), ce permite operaţii asupra datelor aflate în baza de date, cum ar fi:
• încărcarea bazei de date;
• inserarea unui nou element;
• ştergerea unui element;
• modificarea unui element;
• căutarea unor elemente;
• realizarea de diferite statistici asupra datelor.

Utilizatorii sistemelor de gestionare a bazelor de date (DBMS) se grupează în trei


categorii:
a. programatorii de aplicaţie (care scriu programele aplicaţie în limbaje de programare:
Cobol, C, etc.) sau în limbaje de programare specifice: dBase, FoxPro, etc.);
b. end-userii sau utilizatorii (care accesează baza de date de la un terminal, folosind un limbaj
de interogare numit “query language”);

5
c. administratorii bazelor de date DBA (care stabilesc structura iniţială a bazei de date şi
modul de memorare a datelor la nivel fizic, acordă utilizatorilor drepturi de acces la baza de date
sau părţi ale ei, asigură securitatea datelor, modifică structura şi întreţine baza de date).

Sistemele de baze de date sau băncile de date reprezintă un sistem de organizare şi


prelucrare, respectiv teleprelucrare (prelucrare la distanţă) a informaţiei, constituită din
următoarele 3 elemente:
• colecţie de date aflate în interdependentă
• descrierea datelor şi a relaţiilor dintre ele
• un sistem de programe care asigură exploatarea bazei de date (actualizare, interogare)

Arhitectura sistemului de baza de date este format din urmtoarele componente (fig.1):
• baza/bazele de date – reprezintă componenta de tip date a sistemului (colecţiile de date
propriu-zise, indecşii);
• sistemul de gestiune a bazei/bazelor de date – ansamblul de programe prin care se asigură
gestionarea şi prelucrarea complexă a datelor şi care reprezintă componenta software a
sistemului de baze de date (Sistem de Gestiune a Bazelor de Date – SGBD);
• alte componente – proceduri manuale sau automate, inclusiv reglementări administrative,
destinate bunei funcţionări a sistemului, dicţionarul bazei de date (metabaza de date) care
conţine informaţii despre date, structura acestora, elemente de descriere a semanticii,
statistici, documentaţii, mijloacele hardware utilizate, personalul implicat.

6
Cap.2.Sistemul Jocurilor Olimpice de Iarna
Olimpiada Torino 2006

Sunteti o firma specializata in Dm si tocmai ati primit oferta de a lucra pentru Federatia
internationala de sport care organizeaza urmatoarea Olimpiada de iarna.

Jocurile Olimpice de iarna sunt organizate din 4 in 4 ani .

In cadrul acestui eveniment, se desfasoara mai multe competitii sportive.

Unele sporturi au mai multe probe spre exemplu: patinajul, bobul.


Unii sportivi pot concura la mai multe sporturi diferite sau la mai multe discipline din cadrul
aceluiasi sport.

Sunt necesare clasamente cu performantele sportivilor (timp, punctaj etc.). De asemenea, se


pastreaza recordurile la zi pentru fiecare proba sportive(record mondial, olimpic, continental).
La Jocurile Olimpice, sunt prezenti mai multi arbitri pentru fiecare proba.
Se tine o evidenta a medaliilor obtinute de fiecare sportive, precum si un clasament al tarilor
in functie de numarul si culoarea medaliei. Sportivii sunt pregatiti de unul sau de mai multi
antrenori. Din delegatia fiecarei tari, fac parte cel putin un medic si un masseur. Exista shi
delegatii care au un psiholog.

Delegatiile prezente la Jocurile Olimpice sunt cazate in orasul olimpic unde sunt hoteluri
de mai multe categorii. In orasul olimpic, exista zone de agrement pentru timpul liber al
sportivilor (cinema, teatru, sala de bowling, etc.).
Sportivii concureaza in locatii specifice(patinoare, partii de schi, partii de sanie, bob, skeleton,
etc.) aflate in diferite zone ale orasului organizator. De asemenea, ei au posibilitatea de a se
antrena in alte locatii puse la dispozitie de catre organizatori.

Organizatorii ofera echipamente de concurs(schiuri, patine, bob, sanie, echipament sportive,


etc.) produse de catre o firma cunoscuta cu care acestia au contract.
La anumite intervale, sportivii sunt supusi testului antidoping. Daca acesta este pozitiv, ei
sunt descalificati si li se retrag eventualele medalii sau este anulata recunoasterea performantelor.

Televiziunile din tarile participante contribuie la transmiterea live sau inregistrata a


probelor, avand la dispozitie echipamente specifice si personal specializat. Reprezentantii presei
scrise sunt si ei prezenti.

7
Cap.3.Schema conceptuala
3.1.Notiuni generale

O schema conceptuala este o reprezentare a întregii informatii continute în baza


de date ce combina subschemele vederilor ce privesc o anumita aplicatie într-un model
unitar. Acest tip de schema trebuie sa se bazeze pe un model teoretic si sa fie simpla,
adica usor de înteles si de prelucrat.

Sistemele de gestiune a bazelor de date au fost clasificate în trei grupe mari, în


functie de tipul elementelor cu care lucreaza si a structurilor obtinute:
a. modelul retea – permite lucrul cu entitatii relatii binare de tipul 1:1 si 1:N,
diagrama rezultata fiind un graf oarecare;
b. modelul arborescent (ierarhic) – permite lucrul cu entitati si relatii binare de
tipul 1:1 si 1:N, iar diagrama este alcatuita dintr-o multime de arbori;
c. modelul relational – în care intervin numai relatii si operatii cu aceste relatii.

Modelul conceptual al bazelor de date relationale poate fi reprezentat printr-o schema


conceptuala sau printr-o diagrama entitate – relatie (ER)

Schema conceptuala a unei baze de date este o descriere de forma:


Nume_entitate={lista de atribute}.

Diagrama entitate – relatie:


Intre entitati se pot stabili relatii. Aceste relatii se pot reprezenta prin Diagrama
entitate – relatie.

Gradul si cardinalitatea unei relatii

Gradul unei relatii = numarul de entitati care participa la relatia respectiva


Exista relatii binare (intre 2 entitati) si relatii n-are (intre mai multe entitati) .
Cardinalitatea unei relatii binare = numarul de instante ale celor 2 entitati care
sunt asociate prin relatia respectiva.
Relatiile pot fi de cardinalitate:

• (one to one)
• 1-n (one to many)
• n-n (many to many)

8
9
3.2. Schema conceptuala propriu-zisa

10
Cap.4.Schema logica
4.1. Notiuni generale

Schema logica descrie datele stocate sub aspectul modelului de date utilizat de SGBD.
Pentru realizarea schemei logice a unei baze de date se porneşte de la schema conceptuală
(modelul entitate – legătură) urmărindu-se conversia entităţilor şi a legăturilor în tabele
relaţionale.
Regulile de conversie ale entităţilor, legăturilor şi atributelor sunt următoarele:
Transformarea entităţilor
Regulă generală : entităţile se transformă în tabele.
Subcazuri:
a) Entităţile independente devin tabele independente, adică tabele a căror cheie primară nu
conţine chei străine.
b) Entităţile dependente devin tabele dependente (tabele detaliu) adică tabele a căror cheie
primară conţine cheia străină ce face referinta la cheia primara a entitatii de care depinde
entitatea in cauza.
c) Subentitatile devin subtabele, adica tabele a caror cheie primara este cheia straina pentru
tabelul superentitate.

- Avantajele supertabelelor: simplificarea programelor de manipulare a datelor.


- Dezavantajele supertabelelor: probleme de integritate, apar valori de Null.
- Avantajele subtabelelor : mai stabile, mai flexibile, ocupa spatiu mai mic, contin mai
putine valori de Null.
- Dezavantajele subtabelelor: se ingreuneaza manipularea datelor.
Transformarea relatiilor (legaturilor)

Regula generala: Relatiile (legaturile) se convertesc in chei straine.


Conventie : plasamentul cheii straine este simbolizat printr-o sageata. Atunci cand cheia straina
este inclusa in cheia primara, varful sagetii este plin ( ) si este gol in caz contrar
( ).

Cazuri :
a) Relatiile 1 :1 devin chei straine. Cheia straina este plasata in tabelul cu linii mai putine.
Ex.:
a2) SOT 1(0) este_casatorit 1(0) SOTIE - cheia straina va fi plasata in tabelul cu
linii mai putine

b) Relatiile M:1 devin chei straine plasate in tabelul care se afla in partea de “multi” a
relatiei.
Cazuri:

b1) M(0) 1

Cheia straina nu poate avea valoarea Null, iar in cazul entitatilor dependente ea va face parte
chiar din cheia primara a tabelului detaliu.

11
B2) M(0) 1(0) Fig. 3.18

Cheia straina poate avea valoarea Null si nu poate face parte din cheia primara.

c) O relatie M :M se transforma in 2 relatii M :1. In acest caz se construieste un tabel special


numit tabel asociativ care are 2 chei straine care fac referinta la cheile primare ale celor 2
tabele aflate in relatia M :M. Cheia sa primara este formata din cele 2 chei straine plus
(eventual) alte atribute suplimentare.
d) O relaţie de tip 3 se transforma intr-un numar de relatii de tip 2, egal cu numărul de tabele
asociate. Aceste relatii (legaturi) se stabilesc intre un tabel asociativ si tabelele asociate.
Tabelul asociativ are cate o cheie straina pentru fiecare tabel asociat, iar cheia sa primara
este formata din toate aceste chei straine plus (eventual) alte atribute suplimentare.
Transformarea atributelor

Regula generala: Atributele se convertesc in coloane ale tabelelor provenite din entitati sau
chiar in tabele.
Cazuri:
a) Atributele simple ale unei entitati devin coloane in tabelul provenit din acea entitate.
b) Toate componentele unui atribut compus devin coloane.
c) Atributele repetitive (multivaloare) ale unei entitati devin tabele dependente ce contin
fiecare o cheie straina (care face referinta la cheia primara a entitatii) si atributul
multivaloare.
d) – Atributele simple ale unei relatii 1 :1 sau M :1 devin coloane ale tabelului care contine
cheia straina.
- Fiecare componenta a unui atribut compus al unei relatii 1:1 sau M:1 se va converti in
mai multe coloane in tabelul care contine cheia straina.
e) – Atributele simple ale unei relatii M :M vor deveni coloane ale tabelului asociativ.
Fiecare componenta a unui atribut compus al unei relatii M:M va deveni o coloana in
tabelul asociativ creat.
f) – Atributele repetitive (multivaloare) ale unei relatii 1 :1 sau 1 :M devin tabele
dependente de tabelul care contine cheia straina.
- Atributele repetitive ale unei relatii M :M devin tabele dependente de tabelul asociativ
corespunzator relatiei. Cheia primara a acestor tabele dependente va fi formata din cheia
straina respectiva plus una sau mai multe coloane suplimentare.

12
4.2.Schema logica propriu-zisa

13
Cap 5.Normalizarea bazelor de date

5.1.Notiuni generale

Normalizarea este procesul de transformare a datelor si are ca scop eliminarea


redundantelor si promovarea integrităţii datelor. Normalizarea este un pilon de baza al
bazelor de date relaţionale.
Normalizarea datelor este impartita in sase etape, numite forme normale:
 1FNg2FN elimina dependentele funcţionale parţiale fata de chei;
 2FN g3FN elimina dependentele funcţionale tranzitive fata de chei;
 3FN gBCNF elimina dependentele funcţionale pentru care determinantul nu este cheie;
 BCNF g4FN elimina toate dependentele multivaloare care nu sunt si dependente
funcţionale;
 4FN g5FN elimina toate Join-dependentele care nu sunt implicate de o cheie.
 1FNg2FN elimina dependentele funcţionale parţiale fata de chei;
 2FN g3FN elimina dependentele funcţionale tranzitive fata de chei;
 3FN gBCNF elimina dependentele funcţionale pentru care determinantul nu este cheie;
 BCNF g4FN elimina toate dependentele multivaloare care nu sunt si dependente
funcţionale;
 4FN g5FN elimina toate Join-dependintele care nu sunt implicate de o cheie.
Normalizarea utilizează ca metodă descompunerea (top-down) unei tabele în două sau mai
multe tabele, păstrând informaţii (atribute) de legătură.
FORMA NORMALA 1
FN1. O tabelă este în FN1 dacă toate atributele ei conţin valori elementare
(nedecompozabile), adică fiecare tuplu nu trebuie să aibă date la nivel de grup sau repetitiv.
Structurile de tip arborescent şi reţea se transformă în tabele cu atribute elementare. Fiecare
structură repetitivă generează (prin descompunere) o nouă tabelă, iar atributele la nivel de grup
se înlătură, rămânând doar cele elementare.
Algoritmul 1FN
Se înlocuiesc in tabel datele corespunzătoare atributelor compuse cu coloane ce conţin
componentele elementare ale acestora.

14
1. Se plasează grupurile de atribute repetitive, fiecare in cate un nou tabel
2. Se introduce in fiecare tabel nou creat la pasul 2 cheia primara a tabelului din care a
fost extras atributul respectiv care devine cheie străina in noul tabel.
3. Se stabileşte cheia primara a fiecărui nou tabel creat la pasul 2. Aceasta va fi compusa
din cheia străina introdusa la pasul 3 plus una sau mai multe coloane adiţionale.
FORMA NORMALA 2
FN2. O tabelă este în FN2 dacă şi numai dacă
- este în FN1
- orice atribut neprim este complet dependent funcţional de orice chei candidat a relaţiei
O tabelă în FN2 prezintă încă o serie de anomalii de actualizare, datorită eventualelor
dependenţe tranzitive.
Eliminarea dependenţelor incomplete se face prin descompunerea tabelei iniţiale în două
tabele, ambele conţinând atributul intermediar (B).
A doua condiţie din definiţia 2FN poate fi exprimata in mod general astfel: fiecare atribut
al relaţiei depinde funcţional de cheia relaţiei , in integralitatea ei.
O relaţie in 1FN care are drept chei numai chei simple este o relaţie in 2 FN.
Algoritmul de transformare a unei relaţii echivalente aflate in 2FN este următorul:
1. Prin fiecare coloana X care depinde funcţional parţial de o cheie K, KgX, si care nu
este inclusa in K, se determina K1⊂K un subset al lui K, astfel incat dependenta K1 gX este
totala si se creează in nou tabel R1(K1,X), adică un tabel format numai din determinantul
(K1) si determinantul (X) acestei dependente.
2. Daca in tabelul R exista mai multe dependente totale ca mai sus cu acelaşi
determinant, atunci pentru acestea se creează un singur tabel format din determinant – luat o
singura data si din determinanţii dependentelor considerate.
Se elimina din tabelul iniţial R toate coloanele, x, care formează determinantul
dependentei considerate.
Se determina cheia primara a fiecărui tabel nou creat, R1. Aceasta va fi K1, determinantul
dependentei considerate.
Daca noile tabele create conţin alte dependente parţiale, atunci se merge la pasul 1, altfel
algoritmul se termina.

15
Algoritmul se repeta pentru toate relaţiile nou create, pana când toate acestea vor ajunge in
a doua forma normala.
FORMA NORMALA 3
FN3. O tabelă este în FN3 dacă şi numai dacă
 este în FN2
 fiecare atribut neprim depinde în mod netranzitiv de cheia tabelei. Într-o tabelă T, fie
A,B,C trei atribute cu A cheie. Dacă B depinde de A (A � B) şi C depinde de B (B � C)
atunci C depinde de A în mod tranzitiv. Eliminarea dependenţelor tranzitive se face prin
descompunerea tabelei iniţiale în două tabele, ambele conţinând atributul intermediar (B).
O tabelă în FN3 prezintă încă o serie de anomalii de actualizare, datorate eventualelor
dependenţe multivaloare.
Algoritmul 3FN
In relaţia iniţiala se determina toate dependentele funcţionale si se selectează cele care au
ca sursa atribute neprime; daca exista astfel de dependente atunci schema relaţiei se descompune
in doua subscheme, conform algoritmului de la pasul 2.
Pentru fiecare dependenta funcţionala identificata la pasul 1 se defineşte o descompunere a
schemei relaţiei iniţiale in doua subscheme, astfel:
- Prima subschema va avea drept cheie primara sursa dependentei funcţionale selectate
- A doua subschema se obţine din vechea schema , prin înlăturarea atributelor incluse in
prima subschema, mai puţin atributele care alcătuiesc cheia primara in prima subschema.
Daca tabelele celelalte conţin alte dependente non-cheie, atunci se merge la pasul 1, altfel
algoritmul se termina.
FORMA NORMALA 4
FN4. O tabelă este în FN4 dacă şi numai dacă este în FN3 şi nu conţine două sau mai
multe dependenţe multivaloare. Într-o tabelă T, fie A,B,C trei atribute. În tabela T se menţine
dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei
perechi de date (A,C), depinde numai de o valoare a lui A şi este independentă de valorile lui C.
FORMA NORMALA 5
FN5. O tabelă este în FN5 dacă şi numai dacă este în FN4 şi fiecare dependenţă joncţiune
este generată printr-un candidat cheie al tabelei. În tabela T (A,B,C) se menţine dependenţa
joncţiune (AB, AC) dacă şi numai dacă T menţine dependenţa multivaloare A -->> B sau C.

16
Dependenţa multivaloare este caz particular al dependenţei joncţiune. Dependenţa
funcţională este caz particular al dependenţei multivaloare.

5.2. Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabel.Astfel


am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1.

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sport.ro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 Sport.Ro Nae Lazarescu Sunetist INREGISTRARE

13 Prosport Ovidiu Sabau Comentator INREGISTRARE

12 Digisport Alexandri Ipsilanti reporter LIVE

11 Eurosport2 Ovidiu Naum Sunetist INREGISTRARE

10 Eurosport Gheorghita Ionut Reporter LIVE

9 ProSieben Lars Holgerson Reporter LIVE

Analog am procedat si pentru tabelul sporturi obtinand tabelul nsport alaturi de tabelul
ramas sporturi1.

nsport

17
ids numesport

1 Biatlon

2 Bob

3 Combinatia Nordica

4 Curling

5 Hochei pe Gheata

6 Patinaj Artistic

7 Patinaj Short-Track

8 Patinaj Viteza

9 Sanie

10 Sarituri cu Schiurile

11 Schi Acrobatic

12 Schi Alpin

13 Schi Fond

14 Skeleton

15 Snowboard

sporturi1

ids arena subprobe

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

18
10 km sprint masculine

7.5 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 7.5 km

Sprint LH

4 Adler Arena Skating Center

5 Fisht Olympic Stadium

6 Iceberg Skating Palace Program scurt perechi

Perechi liber

Dans compulsory

Dans original

Dans liber

7 Olympic village 1500 m masculin

500 m feminin

3000 m stafeta feminin

8 Rosa Khutor Extreme Park 5000 m masculin

500 m masculin

500 m feminin

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

19
LH individual

Echipa LH

11 Rosa Khutor Extreme Park Mogul feminin

Mogul masculin

Aerial feminin

Aerial masculin

12 Fisht Olympic Stadium Coborare masculine

Combinatie masculin

Slalom combinat masculin

13 RusSki Gorki Jumping Center 15 km pursuit feminin

30 km pursuit masculin

Sprint echipa feminin

Sprint echipa masculin

10 km classic feminin

14 Soci Arena

15 Bolshoy Ice Dome Halfpipe masculin

Halpipe feminin

PSG masculin

PSG feminin

20
Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu
determinantul id,alaturi de tabelul ramas sportivi1.

nsportivi

id nume prenume

421 Aioanei Marius

231 Ionescu Marian

341 Dinescu Iulian

521 Herbet Gerehard

987 Igerberg Mateus

453 Odolberg Klaus

938 Matteus Lahm

526 Tomas Jhon

643 Logan Jhonny

394 Theodore Samuel

840 Piere Exupery

395 Lane Roger

139 Ioan Marcu-Pavel

323 Rubens Heinz

810 Sven Ivanovici

134 Thomas Morgenshten

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

21
562 Igor Hassenberg

593 Maria Raul

714 Pavlcenco Ianas

775 Mecheresh Otillo

434 Galiceanu Mihai

256 Mihailovici Petrov

512 Prushot Dadanov

sportivi1

id tara antrenor arenaan proba nrau nra nrbr activitati


t r g z

41 Romania Vulpe Bolshoy Biatlon 0 0 0 Film,Hokey,Ski


2 Alexandru Ice
Dome

23 Romania George Iceberg Combinati 0 0 0 Tetru,Muzeu


1 Grosu Skating a Nordica
Palace

34 Romania Ion Matei Iceberg Sanie 0 0 0 Fotbal,Ski,Teatru


1 Skating
Palace

52 Germani Bjorn Palatul Patinaj 0 1 0 Muzeu,Teatru,Patin


1 a Heinrich Soci Artistic aj Artistic

98 Germani Bjorn Bolshoy Patinaj 1 4 0 Patinaj,Ski


7 a Heinrich Ice Short-
Dome Track

45 Germani Ighensen Iceberg Patinaj 3 0 0 Film,Tir,Schi Nautic


3 a Lothar Skating Artistic
Palace

93 Olanda Crevensen Bolshoy Sarituri cu 1 0 2 Pescuit,Teatru,

22
8 Osling Ice Schiurile Muzeu
Dome

52 Marea Dunn Rosa Combinati 1 1 3 Patinaj,Ski


6 Britanie Philips Khutor a Nordica
Plateau
Olympi
c
Village

64 S.U.A. Grey Fox Iceberg Sarituri cu 0 3 0 Teatru


3 Skating Schiurile
Palace

39 S.U.A. Jhon Smith Rosa Sanie 3 0 1 Muzeu


4 Khutor
Plateau
Olympi
c
Village

84 Franta Piere Iceberg Biatlon 1 0 1 Muzee,Ski,


0 Chamin Skating Parasutism
Palace

39 Marea Dunn Rosa Biatlon 0 1 0 Ski,Calatorii


5 Britanie Philips Khutor
Plateau
Olympi
c
Village

13 Romania George Rosa Biatlon 0 1 1 Calatorii,


9 Grosu Khutor Pirotehnist
Plateau
Olympi
c
Village

32 Elvetia Oscar de Rosa Combinati 1 0 2 Ski,Jocuri de noroc


3 Trausenbur Khutor a Nordica
g Plateau
Olympi
c

23
Village

81 Rusia Piotr Viga Iceberg Combinati 0 1 0 Fotbal,Ski


0 Skating a Nordica
Palace

13 Elvetia Oscar de Shayba Combinati 0 0 0 Ski,Inot,Fitness


4 Trausenbur Arena a Nordica
g

97 Austria Advensen Soci Patinaj 1 1 0 Calatorii,Muzee,


1 Arena Artistic Sport

99 Rusia Piotr Viga Iceberg Patinaj 1 0 0 Cititul,Calatoriile


1 Skating Artistic
Palace

95 Romania George Iceberg Patinaj 0 1 1 Pescuitul,Rafting


5 Grosu Skating Artistic
Palace

83 Romania Ion Matei PSoci Patinaj 0 1 0 Moda,Calatorii,


3 Arena Artistic Pescuitul

14 S.U.A. Jhon Smith RusSki Patinaj 3 1 1 Curse de cai,Jocuri


4 Gorki Short- de noroc,Calatorii
Track

32 Germani Ighensen RusSki Patinaj 3 0 1 Escaladatul,Fotbal


2 a Lothar Gorki Short-
Track

29 Romania Ion Matei Rosa Patinaj 1 0 0 Pescuitul,Fotbal,Ski


0 Khutor Short-
Plateau Track
Olympi
c
Village

56 Austria Miroslav Iceberg Patinaj 0 2 1 Ski,Patinaj,Jocuri de


2 Berger Skating Short- noroc
Palace Track

59 Spania Diego Shayba Sanie 0 0 2 Calatorii,Muzeu,


3 Rodriguez Arena

24
Pescuit

71 Rusia Gbri RusSki Sanie 0 3 0 Patinaj,Ski,Jocuri de


4 Cercenco Gorki noroc

77 Ungaria Ishtvan Iceberg Sanie 0 0 0 Calatorii,Muzee,Ski


5 Otonetz Skating nautic
Palace

43 Romania George Shayba Sarituri cu 0 0 1 Escaladari,Ski


4 Grosu Arena schiurile

25 Ucraina Alexander Iceberg Sarituri cu 0 0 0 Ski,Pescuit,Jocuri


6 Skating schiurile de noroc
Cech Palace

51 Croatia Dalucenco RusSki Sarituri cu 0 0 3 Calatorii,Altele


2 Mauser Gorki schiurile

Cap.6.Denormalizarea bazelor de date


6.1.Notiuni generale

Una din primele definitii ale denormalizarii a fost formulata de Candace Fleming şi
Barbara von Halle: procesul prin care, dupa definirea unei structuri de date stabile, deplin
normalizate, se introduc selectiv date redundante pentru facilitarea unor cerinte specifice legate
de performanta. Robert Muller definea denormalizarea ca procesul combinarii de tabele sau
obiecte pentru a creşte viteza de acces, de obicei prin evitarea jonctiunilor. Ceva mai
analitic, Toby Teorey definea denormalizarea ca un proces alcatuit din urmatoarele
activitati:
• selectarea proceselor dominante, pe baza frecventei, volumului, prioritatii;
• definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa
amelioreze performantele de interogare a bazei;
• evaluarea costului total al interogarii, stocarii şi actualizarii;
• evaluarea efectelor colaterale, cum ar fi riscul pierderii integritatii datelor.

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar
efectuarii jonctiunilor între tabelele fragmentate rezultate în urma normalizarii. Daca numarul
tabelelor este mare, numarul de rapoarte/informatii solicitate de utilizatori este uriaş şi

25
presupune jonctionari numeroase, utilizatorii sunt numeroşi, iar cerintele de viteza sunt
vitale, tentatia este de a introduce atribute redundante sau de a duplica atribute în tabele
diferite, astfel încât numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cât
mai mic cu putinta. Prin urmare, uneori, deviatiile de la o buna normalizare par logice şi
practice. Chis Date sintetizeaza foarte bine argumentul în trei parti al denormalizatorilor:
1. Normalizarea deplina înseamna multe relatii separate logic.
2. Mai multe relatii logic separate înseamna mai multe fişiere de stocare separate fizic.
3. Mai multe fişiere de stocare separate fizic înseamna un mai mare volum de operatii de
intrare/ieşire, deci consum de resurse.

Exista câteva simptome care trebuie sa atraga atentia asupra schemelor susceptibile de
denormalizare:
i. rapoarte şi interogari critice extrag informatiile prin interogarea simultana a multor tabele;
ii. exista grupuri repetitive care sunt nu procesate atât individual, cât la nivel de set (grup);
iii. interogarile/rapoarte reclama calcule aplicabile multor atribute aflate în tabele diferite;
iv. utilizatori diferiti acceseaza simultan acelaşi tabel sau grup de tabele dupa criterii
diferite;
v. cheile primare ale unor tabele sunt prea mari şi consuma timp la jonctionari;
vi. exista diferente majore, din punct de vedere statistic, între gradul de folosire în interogari
a unor atribute fata de altele.

Criteriile care sa prezinte în detaliu cum anume trebuie facuta denormalizarea sunt
structurate in trei linii directoare:
I. identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni, desemnând drept
excesive cazurile în care o tabela virtuala, tabel-obiect necesita mai mult de trei jonctiuni;
II. reducerea numarului de chei straine, care ar atrage descongestionarea indecşilor ce
trebuie gestionati la actualizarile tabelelor; reducerea cheilor straine se traduce, de fapt, prin
reducerea numarului de tabele din baza;
III. meninerea mecanismului de integritate pentru evitarea anomaliilor datelor din baza.

Cele trei linii directoare nu sufera doar de generalitate, ci chiar sunt discutabile, în sine,
întrucât aplicarea lor trebuie raportata permanent la situatia efectiva „din teren”.
Denormalizarea are un cost, tradus, de cele mai multe ori, în pierderea flexibilitatii,
diminuarea scalabilitatii, performante mai slabe ale aplicatiei/bazei de date sau chiar
amenintari la adresa integritatii datelor. Plus, efortul necesitat de mecanismele laborioase de
pastrare a corectitudinii informatiilor paralele, redudandante.

Categorii de operatii legate de denormalizare


Exista o larga tipologie a operatiunilor ce pot fi subsumate denormalizarii. Dick Root
identifica şapte tehnici utilizabile în denormalizare:
1.Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute).
2.Date derivate/calculate.
3.Chei surogate.
4.Supra-normalizare - partitionare/segmentare pe vertical: ruperea unei relatii în doua sau mai
multe.
5.Partitionare/segmentare pe orizontal: linii diferite dintr-o relaie sunt stocate în tabele diferite.
6.Jonctiuni stocate – jonctionarea a doua sau mai multe tabele şi stocarea rezultatului într-o
tabela de-sine-statatoare.
7.Grupuri de date repetitive (date de tip vector).

Modalitati de denormalizare aplicabile fiecarei forme normale22: 1NF, 2NF, 3NF cu


câteva sugestii pentru formele normale „mai înalte”. Mullins recomanda folosirea, în cadrul

26
denormalizarii, a urmatoarelor artificii:
• tabele pre-jonctionate;
• tabele-raport, construite în functie de rapoartele critice ale aplicatiei;
• tabele-oglinda, mai ales în mediile cu acces simultan al unui mare numar de utilizatori;
• tabele partitionate, în functie de grupurile de utilizatori;
• tabele combinate, pentru consolidarea legaturilor unu la mai multi într-o singura tabela;
• date copiate (duplicate);
• grupuri repetitive;
• date derivate;
• tabele de marire a vitezei, recomandabile mai ales în cazul ierarhiilor.

6.2. Denormalizarea bazei de date

Pentru a afla informatiilor complete despre sportivii prezenti in tabela


clasament_puncte am hotarat sa denormalizez aceast tabel .Astfel in urma denormalizarii
tabelului alaturi de tabelul sportivi am obtinut tabelul informatii.Acest process este echivalent
interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportivi.Astfel creste
performanta performanta si simplifica programul de simplificare a datelor.

ids pu proba tara nume prenu antrenor arenaa nra nra nrb activitati
nct me nt ur rg rz
e

256 3 Sarituri Ucra Mihail Petrov Alexand Rosa 0 0 0 Ski,Pescuit,


cu ina ovici er Khuto Jocuri de
Schiuril r noroc
e Cech Platea
u
Olym
pic
Villag
e

434 6 Sarituri Rom Galice Mihai George RusSk 0 0 1 Escaladari,


cu ania anu Grosu i Ski
Schiuril Gorki
e

453 7 Patinaj Ger Odolb Klaus Ighensen Shayb 3 0 2 Film,Tir, Ski


Artistic mani erg Lothar a Nautic
a Arena

512 10 Sarituri Croa Prusho Dadan Dalunce Bolsh 0 0 3 Calatorii,

27
cu tia t ov nco oy Ice Altele
Schiuril Mauser Dome
e

521 8 Patinaj Ger Herber Gereh Bjorn RusSk 0 1 0 Muzeu,Teatru


Artistic mani t ard Heinrich i , Patinaj
a Gorki Artistic

643 9 Sarituri S.U. Logan Jhonn Grey RusSk 0 3 1 Teatru


cu A. y Fox i
Schiuril Gorki
e

833 4 Patinaj Rom Luca Roxan Ion Bolsh 0 1 1 Moda,Calator


Artistic ania a Matei oy Ice ii, Pescuitul
Dome

938 10 Sarituri Olan Matteu Lahm Crevens Bolsh 1 0 3 Pescuit,Teatr


cu da s en Oslig oy Ice u, Muzeu
Schiuril Dome
e

955 10 Patinaj Rom Chiph Gheor George RusSk 0 1 1 Pescuitul,


Artistic ania er ge Grosu i Rafting
Gorki

991 8 Patinaj Rusi Svetla Evora Piotr Bolsh 1 0 0 Cititul,


Artistic a na Viga oy Ice Calatoriile
Dome

Cap.7. Sistemul de gestiune MySQL


7.1.Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust, rapid, multi-utilizator,
multi-thread.
Una dinte cele mai bune caracteristici ale MySQL este ca suporta un sistem de privilegii (dreptul
de a face o anumita actiune asupra unui obiect) pentru utilizatori foarte sofisticat. Cand vei crea
un utilizator, ii vei da acces la un set de privilegii pentru a specifica ce anume poate sa faca si ce
nu poate sa faca un utilizator. Un utilizator ar trebui sa aiba cel mai mic nivel de privilegii
necesar pentru a-si indeplini sarcina.
Crearea tabelelor
CREATE TABLE

28
CREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]….)
[PCTFREE întreg]
[PCTUSED întreg]
[TABLESPACE spaţiu tabel]
[STORAGE parametrii_de_stocare]
o DEFAULT – desemnează o valoare implicita pentru coloana,
o TABLESPACE – specifica spaţiul tabel in care va fi stocat tabelul
PCTFREE/PCTUSED – specifica gradul de utilizare al blocurilor
Crearea tabelelor e urmata de numele tabelei si poia de nume si tipul de date al campurilor din
baza de date. 'varchar' inseamna caractere de lungime variabile. Numarul din paranteza este
lungimea maxima de caractere admise.'not null' specifica ca nu avem voie sa avem valori nule pe
acel camp in inregistrari. 'int' inseamna numar inreg, iar 'unsigned' numar pozitiv.
'auto_increment' specifica pentru MySQL sa atribuie o valoare automat la o noua adaugare de
inregistrare cu o valoare mai mare cu 1 decat cea mai mare valoare din acel camp (necesar pentru
un camp ID). 'primary key' specifica faptul ca acel camp va fi indexat (fiecare valoare va fi
unicat).
Tipuri de campuri
Cele trei tipuri de baza pentru campuri sunt: numeric, data si timp si sir de caractere(string).
Cand alegi un anumit tip sau subtip, poti specifica si lungimea maxima admisa (M, maxim 255).
Tipurile de date numerice
Pentru numerele in virgula flotanta (float), poti specifica cu D numarul de cifre dupa puctul
zecimal. Pentru numerele intregi poti sa specifici daca vor fi doar pozitive cu 'unsigned'.
Tipuri de date intregi
Tip Interval (Bytes) Descriere
TINYINT[(M)] -127..128 1 Foarte mic integers or 0..255
SMALLINT[(M)] -32768..32767 2 Intregi mici or 0..65535
MEDIUMINT[(M)] -8388608.. 3 Marime medie 8388607 or 0..16777215
INT[(M)] -231..231-1 4 Intregi normali or 0..232-1
INTEGER[(M)] Sinonim cu INT
BIGINT[(M)] -263..263-1 8 Intregi mari or 0..264-1
Tipuri de date flotante
Tip Interval (Bytes) Descriere
FLOAT(precision) depinde Precizie simpla sau precizie dubla
FLOAT[(M,D)] ±1.175494351E-38 4 Precizie simpla
±3.402823466E+38
DOUBLE[(M,D)] ±1.7976931348623157E 8 Precizie dubla
+308
±2.2250738585072014E
-308
DOUBLE
PRECISION[(M,D)] la fel
REAL[(M,D)] la fel
DECIMAL[(M[,D])] variaza M+2 Float stocat ca char.
NUMERIC[(M,D)] la fel Sinonim cu DECIMAL.
Tipurile pentru data si timp
Tip Interval Descriere

29
DATE 1000-01-01 O data(YYYY-MM-DD).
9999-12-31
TIME -838:59:59 Un time(HH:MM:SS).
838:59:59
DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHH:MM:SS).
00:00:00
9999-12-31
23:59:59
TIMESTAMP 1970-01-01 Un timestamp, folosit in tranzactii.
[(M)] 00:00:00
YEAR[(2|4)] 70–69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format.
1901–2155
TIMESTAMP-uri
Type Specified Display
TIMESTAMP YYYYMMDDHHMMSS
TIMESTAMP(14) YYYYMMDDHHMMSS
TIMESTAMP(12) YYMMDDHHMMSS
TIMESTAMP(10) YYMMDDHHMM
TIMESTAMP(8) YYYYMMDD
TIMESTAMP(6) YYMMDD
TIMESTAMP(4) YYMM
TIMESTAMP(2) YY
Tipuri pentru siruri de caractere
Se impart in trei grupuri: siruri normale: CHAR (fixed length character) si VARCHAR (variable
length character), siruri TEXT si BLOB pentru siruri lungi/date binare si sirurile SET si ENUM
(valori predefinte).
Tipuri pentru siruri de caractere regulare
Tip Interval
[NATIONAL] 1 to 255
CHAR(M) [BINARY]
[NATIONAL] 1 to 255
VARCHAR(M)
[BINARY]
Tipuri TEXT si BLOB
Lungime maxima
Tip (Caractere)
TINYBLOB 28-1
(255)
TINYTEXT 28-1
BLOB 216-1
(65.535)
TEXT 216-1
MEDIUMBLOB 224-1
(16.777.215)
MEDIUMTEXT 224-1
LONGBLOB 232-1

30
(4.294.967.295)
LONGTEXT 232-1
Tipuri SET si ENUM
Tip Nr. valori in set Descriere
ENUM(‘valoare1’, 65535 O singura valoare din lista sau NULL ‘valoare2’,...)
SET(‘valoare1’, 64 Un set dintre valorile din lista. ‘valoare2’,...)
Exemplu:
create table _tabela1 (id int auto_increment primary key,answer enum (‘da’, ‘nu’) default ‘nu’);
Tipul de camp NULL
Pentru a face o valoare dintr-un camp NULL, nu include acel camp in declaratia INSERT.
Campurile au ca valoare implicita NULL daca nu specifici 'NOT NULL'. Pentru compararea
valorilor cu NULL se folosesc 'IS NULL' sau 'IS NOT NULL'.
Descrierea tablelelor
Permite afisarea detaliilor despre campurile tabelei.
Inserarea inregistrarilor in tabele
Comanda SQL INSERT inseareaza informatii in tabele.
INSERT INTO tabel[(coloana1, coloana2, …)] VALUES (valoare1, valoare2, …)
Actualizarea datelor din tabele
Se face cu comanda SQL UPDATE.
UPDATE nume_tabela SET nume_camp1 = val1,nume_camp2 = val2,nume_camp3 = val3 ...
[WHERE conditii];
Extragerea informatiilor dorite din tabela
Informatiile dorite sunt extrase din tabela (preocesul de interogare) cu comanda SELECT
SELECT nume_campuri from nume_tabela [WHERE ...conditii];
Pentru a afisa intreaga tabela, in loc sa specificam toate campurile vom folosi simbolul '*':

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca "john", "John" sau "JoHn" ar
merge in exemplul de mai sus.
Operatori de comparatie
Operator Nume Exemplu
= eqalitate customerid = 3
> mai mare amount>60.00

< mai mic amount<60.00


>= mai mic sau egal amount>=60.00
<= mai mic sau egal amount<=60.00
!= sau diferit quantity != 0
<>
IS NOT valoare nenula
NULL
IS NULL valoare nula
BETWEEN interval de valori amount between 0 and 60.00
IN inclus intr-un set predefinit city in (“Carlton”, “Moe”)
NOT IN neinclus intr-un set predefinit city not in (“Carlton”,“Moe”)
LIKE cautare pattern name like (“Fred %”)
NOT LIKE cautare pattern

31
REGEXP expresie regular name regexp
Conditiile SQL pot contine si operatorii logici: AND, OR si NOT.
Sortarea datelor
Inregistrarile extrase anterior au fost afisate in ordinea in care erau stocate in tabela. Pentru a le
sorta folosim clauza ORDER BY a comenzii SELECT.
EX: Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu:
Mysql> SELECT nume, salariu*0.38 FROM profesor ORDER BY salariu*0.38;
NUME SALARIU*0.38
--------------- --------------------
VOINEA 456
STANESCU 456
IONESCU 570
ALBU 836
MARIN 950
Inregistrarile sunt sortate in mod implicit in ordinea ascendenta (optiunea ASC), afisarea
in ordinea ascendenta facandu-se prin utilizarea optiunii DESC. Observati ca in momentul
sortarii valoarea Null este considerata cea mai mare, deci daca sortarea este ascendenta este
trecuta pe ultima pozitie si daca este descendenta este trecuta pe prima pozitie. De exemplu:
Mysql> SELECT grad, prima FROM professor ORDER BY grad, prima DESC;
GRAD PRIMA
----------------------------
ASIST
ASIST 600
CONF 150
LECT 2500
PROF
PROF 3500
Forma generala a clauzei LIMIT este:
SELECT (...) from tabela LIMIT nr_rand_incepere, nr_inreg_extrase;
Folosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru
fiecare camp in parte.
Functii agregat
MIN(): Valoare minima
MAX(): Valoare maxima
SUM(): Suma valorilor
AVG(): Media aritmetica
COUNT(): Numarul inregistrarilor extrase
Denumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu
termeni mai descriptivi pentru datele extrase.
Clauza GROUP BY permite gruparea informatiilor similare. Deci, pentru a lista toate functiile
unice din tabela:
Mysql> SELECT grad, MAX(salariu) FROM professor WHERE prima IS NOT NULL
GROUP BY grad;

32
GRAD MAX (SALARIU)
-------- --------------------
ASIST 1200
CONF 2800
LECT 2200
PROF 3000
Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilor
Mysql> SELECT grad, AVG(salariu )FROM profesor GROUP BY grad HAVING
AVG(salariu)>2000;
GRAD AVG(SALARIU)
-------- --------------------
CONF 2800
LECT 2200
PROF 2750
Extragerea inregistrarilor din mai multe tabele (JOIN-uri)
De multe ori, ca sa raspunzi la o intrebare trebui sa extragi date din mai multe tabele. De
exemplu, pentru a afla ce clienti au facut comenzi luna asta trebuie sa folosesti tabela clienti si
tabela comenzi. Pentru acest lucru in SQL trebuie realizata o relatie intre tabele (JOIN) pe baza
unor informatii comune (un camp de ID).
Tipuri de join-uri in MySQL
Produs cartezian, Full Join, Cross join
Toate combinatiile tuturor liniilor din tabela. Se specifica prin virgula si fara clauza WHERE.
Inner join.
Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu
cuvintele cheie INNER JOIN.
Equi-join
Foloseste o conditie cu '=' pentru a face corespondente intre inregistrari.
Left join
Incearca sa gasesca corespondente intre tabele si cand nu gaseste, umple inregistrarile
fara pereche cu NULL.
Stergerea inregistrarilor din tabela
DELETE FROM table [WHERE condition] [LIMIT number]
Stergerea tabelelor
Se foloseşte comanda DROP TABLE:
Crearea indecsilor
Se poate face cu comanda INDEX sau specificand la crearea unui tabel un camp ca PRIMARY
KEY.
index nume_index (nume_coloana_indexata)
create table my_table ( id_col int unsigned auto_increment primary key, another_col text );
Indecsii pot cuprinde si mai multe campuri:
create table mytable( id_col int unsigned not null, another_col char(200) not null, index
dual_col_index(id_col, another_col) );

33
Modificarea tabelelor dupa creare
ALTER TABLE nume modificare [, modificare ...]
Posibile modificari cu ALTER TABLE
Sintaxa Descriere
ADD [COLUMN] column_description Adauga o coloana
[FIRST | AFTER column ]
ADD [COLUMN] (column_description, Adauga o descriere de coloana
ADD INDEX [index] (column,...) Adauga un index
ADD PRIMARY KEY (column,...) Transforma campul in PK
ADD UNIQUE [index] (column,...) Adauga un index pt. unicate
ALTER [COLUMN] column {SET DEFAULT Adauga/sterge valorile implicite value | DROP
DEFAULT}
CHANGE [COLUMN] column new_column Modificari pentru coloane_description
MODIFY [COLUMN] column_description
DROP [COLUMN] column Sterge un camp
DROP PRIMARY KEY Sterge PK
DROP INDEX index Sterge indexul
RENAME[AS] new_table_name Redenumeste o tabela
Sintaxe ALTER:
(Redenumire tabela:)alter table nume_vechi rename nume_nou
(Modificare camp:)alter table my_table add column my_column text not null
(Stergere camp):alter table nume_tabela drop column nume_camp
Indecsi:
alter table my_table add index index_name (column_name1, column_name2, ...)
alter table my_table add unique index_name(column_name)
alter table my_table add primary key(my_column)
alter table table_name drop index index_name
alter table_name test10 drop primary key

7.2.Aplicatii

<---INTEROGARI--->

1. Tarile Participante ordonate dupa nr de cod.

--> Select `ide`,`tara` from tariparticipante order by 1;

2. Nr de jucatori ai fiecarei tari

34
--> Select `ide`,`tara`,`nrsportivi` from tariparticipante order by 1;

3. Antrenorii,Medicii,Maseurii,Psihologii fiecarei tari

--> SELECT `ide`,`tara`,`antrenor`,`medic`,`masseur`,`psiholog` from tariparticipante;

4. Tarile care au/nu au psihologi

--> SELECT `ide`,`tara`,`psiholog` from tariparticipante where psiholog != "(ABSENT)";


--> SELECT `ide`,`tara`,`psiholog` from tariparticipante where psiholog = "(ABSENT)";

5. Tarile care au/nu au maseuri

--> SELECT `ide`,`tara`,`masseur` from tariparticipante where masseur = "(ABSENT)";


--> SELECT `ide`,`tara`,`masseur` from tariparticipante where masseur != "(ABSENT)";

6. Sporturile la care participa sportivii

--> select ids , numesport , subprobe from sporturi ORDER BY `sporturi`.`ids` ASC

7. Arenele disponibile de antrenament pentru sportivi

--> select ids,numesport,arena from sporturi ;

8. Sportivii fiecarei echipe participante ordonati in mod alfabetic tara nume prenume

--> SELECT id,nume,prenume,tara from sportivi order by 4,2,3 ;

9. Antrenorii fiecarui jucator participant ordonati in mod alfabetic dupa tara nume
prenume

--> SELECT id,nume,prenume,tara,antrenor from sportivi order by 4,2,3;

10. Clasamentul pe medalii

--> SELECT * FROM clmedalii ORDER BY total DESC;

11. Tarile cu un numar minim de 8 medalii de aur/bronz/argint

35
--> SELECT idc,tara,aur from clmedalii where (aur>=8) order by aur desc
--> SELECT idc,tara,argint from clmedalii where (argint>=8) order by argint desc
--> SELECT idc,tara,bronz from clmedalii where (bronz>=8) order by bronz desc

12. Tari descalificata pentru dopaj

--> SELECT idc,tara,dopaj from clmedalii where dopaj like "Descalificat";

13. Sportivii cu cele mai multe medalii de aur/ag/brz

--> SELECT id,nume,prenume,tara,nraur from sportivi where nraur>2 order by 4,2,3


--> SELECT id,nume,prenume,tara,nrag from sportivi where nrag>2 order by 4,2,3
--> SELECT id,nume,prenume,tara,nrbrz from sportivi where nrbrz>2 order by 4,2,3

14. Clasament Puncte anumita proba ( Patinaj Artistic\Sarituri cu Schiurile )

--> SELECT DISTINCT id_s,nume,prenume,tara,clasament_puncte.proba,puncte from


sportivi,clasament_puncte
where ( sportivi.id=clasament_puncte.id_s and clasament_puncte.proba like "Patinaj Artistic"
)order by puncte desc

--> SELECT DISTINCT id_s,nume,prenume,tara,clasament_puncte.proba,puncte from


sportivi,clasament_puncte
where ( sportivi.id=clasament_puncte.id_s and clasament_puncte.proba like "Sarituri cu
schiurile" )order by puncte desc

15. Clasament Timp anumita proba ( Biatlon\

--> SELECT DISTINCT id_s,nume,prenume,tara,proba_s,timp from sportivi,clasament_timp


where ( sportivi.id=clasament_timp.id_s and proba_s like "Biatlon" )order by timp;
--> SELECT DISTINCT id_s,nume,prenume,tara,proba_s,timp from sportivi,clasament_timp
where ( sportivi.id=clasament_timp.id_s and proba_s like "Combinatia Nordica" )order by
timp;
--> SELECT DISTINCT id_s,nume,prenume,tara,proba_s,timp from sportivi,clasament_timp
where ( sportivi.id=clasament_timp.id_s and proba_s like "Sanie" )order by timp;

16. Recorduri

36
--> SELECT id_r,nume,prenume,tara,proba_r,timp,tip_rec from
sportivi,recorduri,clasament_timp where ( sportivi.id=recorduri.id_r and tip_rec like
"Continental" );
--> SELECT id_r,nume,prenume,tara,proba_r,timp,tip_rec from
sportivi,recorduri,clasament_timp where ( sportivi.id=recorduri.id_r and tip_rec like
"Mondial" );
--> SELECT id_r,nume,prenume,tara,proba_r,timp,tip_rec from
sportivi,recorduri,clasament_timp where ( sportivi.id=recorduri.id_r and tip_rec like "Olimpic" );

17. Tv - Presa (TRANSMISIUNI --- LIVE --- INREGISTRATA )

--> Select idt,numetv,transmisiune from tvpresa where transmisiune like "INREGISTRATA"


group by numetv
--> Select idt,numetv,transmisiune from tvpresa where transmisiune like "LIVE" group by
numetv

18. Tv - Presa ( REPORTERI )

--> select idt,numetv,numerep from tvpresa where specilaizare like "cameraman" ;

7.3. Tabelele bazei de date Torino2006

Clasament_puncte

37
Clasament_timp

recorduri

sportivi

38
tvpresa

tariparticipante

39
clmedalii

40
41
Sporturi

42
Cap.8.Concluzii

Proiectul contine date despre:

1. Tarile participante la jocurile olimpice


2. Jucatorii fiecarei tari in parte
3. Staff-ul echipelor ( antrenor,medic,masseur)
4. Sporturile la care participa competitorii
5. Arenele unde vor avea loc competitiile
6. Clasamentul pe medalii al tarilor
7. Clasamentul pe timp/puncte al sportivilor
8. Recorduri mondiale/olimpice/continentale

Baza de date contine :

 8 tabele - date referitoare la jucatori , antrenori , medici , numar medalii de


aur/argint/bronz , echipe descalificate
 Date de intrare - informatii despre jucatori , sporturile la care participa , antrenorii lor ,
arenele de antrenament si participare,
 Date de iesire - informatii referitoare la clasament,recorduri , punctaj .

Proiect situat intre mediu si dificil datorita volumului mare de date ce trebuia cules ;
Nu oricine poate realiza o astfel de baza de date ;

43
Cap.9.Bibliografie

1. http://jalobean.itim-cj.ro/Cursuri/www.my-sql.go.ro/

2. Peterson J. "Baze de date pentru începatori", Ed. All, 2003

3. http://bdfr.cs.pub.ro/

4. C. Ivan, note de curs – ftp://ftp.utcluj.ro/pub/users/civan

5. Bâscă O., Popescu L., Sisteme de operare, Litografia Universităţii Bucureşti,


1987

6. Popescu I.., Baze de date relaţionale, Ed. Universităţii Bucureşti, 1998

7. Dollinger R., "Baze de Date", Universitatea Tehnica Cluj-Napoca, 1994

44

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