60
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 1

Proiect Baze de Date

Embed Size (px)

DESCRIPTION

jocuri de iarna

Citation preview

Universitatea din CraiovaFacultatea de Automatica Calculatoare si Electronica Sectia Automatica si Informatica AplicataGrupa 10201 10202 10203

PROIECTla disciplina

BAZE DE DATE

Studenti Profesor CoordonatorCojocaru Viorica Stoian ViorelIlie AndreeaFieroiu Alin-NicolaePopa Elena-Camelia

CRAIOVA 2009

CUPRINS

1

Cap 1 Introducere helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellippag 311 Notiuni despre BD si SGBD 12 Datele operaţionale13 Independenţa datelor14 Nivelul de organizare a datelor icircntr-o bază de date15 Sisteme de gestiune a bazelor de date(SGBD)

Cap2 Sistemul Jocurilor Olimpice de Iarna Olimpiada Torino 2006helliphelliphelliphelliphellippag 7 Cap3 Schema conceptualahelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellippag 8

31Notiuni generale32Schema conceptuala propriu-zisa

Cap4 Schema logicahelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellippag 1141 Notiuni generale

42Schema logica propriu-zisaCap 5 Normalizarea bazelor de datehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellippag 14

51Notiuni generale52Normalizarea BD

Cap6 Denormalizara bazelor de datehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellippag 26

61Notiuni generale

62 Denormalizarea BD

Cap7 Sistemul de gestiune MySQLhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellippag 2971Notiuni generale72Aplicatii 73Tabelele bazei de date Torino2006

Cap8 Concluziihelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellippag 43Cap9 Bibliografie helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellippag 44

2

Cap1 Introducere 11 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 icircntr-o mulţime de aplicaţii relaţiile logice dintre aceste informaţii şi tehnicile de prelucrare corespunzătoare Icircn bazele de date are loc o integrare a datelor icircn sensul că mai multe fişiere sunt privite icircn ansamblu eliminacircndu-se informaţiile redundante Este permis accesul simultan la aceleaşi date situate icircn acelaşi loc sau distribuite spaţial a mai multor persoane prin mai multe tipuri de interogări (BAcircSCĂ 1997 11 DESPI amp 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 dataDe exemplu BD - Student Aceasta includ studentii dintr-o institutieFiecare 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 saIn orce lucru cu BD se foloseste SGBD Prin menajarea datelor se scoate informatia de date

O bază de date poate fi integrată partajată

Prin ldquointegratărdquo icircnţelegem că baza de date poate fi gacircndită ca o unificare de mai multe fişiere de date distincte şi neredundante

Prin ldquopartajareardquo unei baze de date se icircnţelege că bucăţile individuale de date din baza de date pot fi partajate icircntre mai mulţi utilizatori individuali fiecare dintre ei putacircnd avea acces la aceeaşi bucată de date simultan (sisteme multiutilizator)

12 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 icircn sistem din lumea exterioară de obicei prin terminaleDatele 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) Icircntre aceste entităţi există icircntotdeauna asociaţii sau relaţii ce le leagă icircntr-o bază de date comună

3

Relaţiile dintre entităţi sunt la racircndul lor părţi ale datelor operaţionale chiar mai importante decacirct entităţile asociate O relaţie poate fi asociată la una două sau trei entităţi iar o entitate poate fi asociată la oricacircte relaţii

13 Independenţa datelor

Modul icircn care datele sunt organizate pe suportul secundar de stocare şi modul icircn 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 (cacircmpul numeric poate fi memorat icircn formă internă aritmetică

sau ca un şir de caractere) reprezentarea datelor caracter (un cacircmp şir de caractere poate fi memorat icircn mai multe coduri de

caractere ASCII EBCDIC etc) Terminologie Un cacircmp este cea mai mică unitate de date stocată icircn baza de date Baza de date conţine mai multe ocurenţe sau instanţe pentru fiecare din tipurile de cacircmpuri O icircnregistrare este o colecţie de nume de cacircmpuri asociate O ocurenţă sau instanţă de icircnregistrare constă dintr-un grup de ocurenţe de cacircmp icircnrudite

(asociate) şi reprezintă o asociere icircntre ele Un fişier este o colecţie a tuturor icircnregistrărilor de unul sau mai multe tipuri Icircntr-o bază de date un cacircmp 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 vederea opţiunea utilizatorului care lucrează cu anumită părţi ale unei baze de date numite vederib opţiunea administratorului bazei de date care integrează toate vederile referitoare la baza de

date icircntr-un singur model numit schemă conceptuală ea reprezentacircnd 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 icircn enumerarea tipurilor de entităţi ce apar icircn 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 Icircn 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

14 Nivelul de organizare a datelor icircntr-o bază de date

Datele dintr-o bază de date pot fi structurate pe 3 niveluri icircn funcţie de categoria de personal implicată

nivelul conceptual (global) ndash exprimă viziunea administratorului bazei de date asupra datelor

4

Acestui nivel icirci corespunde structura conceptuală (schema) a bazei de date prin care se realizează o descriere a tuturor datelor icircntr-un mod independent de aplicaţii ce face posibilă administrarea datelor

nivelul logic ndash 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 ndash 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

15Sisteme de gestiune a bazelor de date(SGBD)

Icircntre 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 ndash Data Base Management System) care permite

definirea ndash crearea bazei de date introducerea (adugarea) datelor icircn baza de date modificarea unor date deja existente icircn baza de date stergerea datelor din baza de date

consultarea bazei de date ndash interogareaextragerea datelor

Un SGBD dă posibilitatea utilizatorului să aibă acces la date folosind un limbaj de nivel icircnalt apropiat de modul obişnuit de exprimare pentru a obţine informaţii utilizatorul făcacircnd abstracţie de algoritmii aplicaţi pentru selectarea datelor implicate şi a modului de memorare a lor SGBD-ul este deci o interfaţă icircntre 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 icircn reprezentarea informaţiilor etc LDD-ul este utilizat atacirct pentru proiectarea bazelor de date cacirct ş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 icircn baza de date cum ar fi

icircncă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ă icircn trei categoriia programatorii de aplicaţie (care scriu programele aplicaţie icircn limbaje de programare Cobol C etc) sau icircn 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 ldquoquery languagerdquo)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 icircntreţine baza de date)

5

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 icircn 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 (fig1)

bazabazele de date ndash reprezintă componenta de tip date a sistemului (colecţiile de date propriu-zise indecşii)

sistemul de gestiune a bazeibazelor de date ndash 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 ndash SGBD)

alte componente ndash 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

Cap2Sistemul Jocurilor Olimpice de IarnaOlimpiada Torino 2006

6

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

Cap3Schema conceptuala31Notiuni generale

7

O schema conceptuala este o reprezentare a icircntregii informatii continute icircn baza de date ce combina subschemele vederilor ce privesc o anumita aplicatie icircntr-un model unitar Acest tip de schema trebuie sa se bazeze pe un model teoretic si sa fie simpla adica usor de icircnteles si de prelucrat

Sistemele de gestiune a bazelor de date au fost clasificate icircn trei grupe mari icircn functie de tipul elementelor cu care lucreaza si a structurilor obtinute

a modelul retea ndash permite lucrul cu entitatii relatii binare de tipul 11 si 1N diagrama rezultata fiind un graf oarecare

b modelul arborescent (ierarhic) ndash permite lucrul cu entitati si relatii binare de tipul 11 si 1N iar diagrama este alcatuita dintr-o multime de arbori

c modelul relational ndash icircn 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 ndash relatie (ER)

Schema conceptuala a unei baze de date este o descriere de forma Nume_entitate=lista de atribute

Diagrama entitate ndash relatie Intre entitati se pot stabili relatii Aceste relatii se pot reprezenta prin Diagrama entitate ndash 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

32 Schema conceptuala propriu-zisa

9

10

Cap4Schema logica41 Notiuni generale

Schema logica descrie datele stocate sub aspectul modelului de date utilizat de SGBDPentru realizarea schemei logice a unei baze de date se porneşte de la schema conceptuală (modelul entitate ndash legătură) urmărindu-se conversia entităţilor şi a legăturilor icircn tabele relaţionaleRegulile de conversie ale entităţilor legăturilor şi atributelor sunt următoarele

Transformarea entităţilorRegulă generală entităţile se transformă icircn tabeleSubcazuri

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 straineConventie 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 putineEx a2) SOT 1(0) este_casatorit 1(0) SOTIE - cheia straina va fi plasata in tabelul cu linii mai putine

b) Relatiile M1 devin chei straine plasate in tabelul care se afla in partea de ldquomultirdquo 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 318

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 tabeleCazuria) Atributele simple ale unei entitati devin coloane in tabelul provenit din acea entitate b) Toate componentele unui atribut compus devin coloanec) 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) ndash Atributele simple ale unei relatii 1 1 sau M 1 d evin coloane ale tabelului care contine cheia straina- Fiecare componenta a unui atribut compus al unei relatii 11 sau M1 se va converti in mai multe coloane in tabelul care contine cheia straina

e) ndash Atributele simple ale unei relatii M M vor deveni coloane ale tabelului asociativFiecare componenta a unui atribut compus al unei relatii MM va deveni o coloana in tabelul asociativ creat

f) ndash 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

42Schema logica propriu-zisa

13

Cap 5Normalizarea bazelor de date

51Notiuni 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 icircn două sau mai

multe tabele păstracircnd informaţii (atribute) de legătură

FORMA NORMALA 1

FN1 O tabelă este icircn 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ă icircn tabele cu atribute elementare Fiecare

structură repetitivă generează (prin descompunere) o nouă tabelă iar atributele la nivel de grup

se icircnlătură rămacircnacircnd doar cele elementare

Algoritmul 1FN

Se icircnlocuiesc 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 icircn FN2 dacă şi numai dacă

- este icircn FN1

- orice atribut neprim este complet dependent funcţional de orice chei candidat a relaţiei

O tabelă icircn FN2 prezintă icircncă o serie de anomalii de actualizare datorită eventualelor

dependenţe tranzitive

Eliminarea dependenţelor incomplete se face prin descompunerea tabelei iniţiale icircn două

tabele ambele conţinacircnd 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 K1IgraveK un subset al lui K astfel incat dependenta K1 gX este

totala si se creează in nou tabel R1(K1X) 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 ndash 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 cacircnd toate acestea vor ajunge in

a doua forma normala

FORMA NORMALA 3

FN3 O tabelă este icircn FN3 dacă şi numai dacă

este icircn FN2

fiecare atribut neprim depinde icircn mod netranzitiv de cheia tabelei Icircntr-o tabelă T fie

ABC trei atribute cu A cheie Dacă B depinde de A (A 1048774 B) şi C depinde de B (B 1048774 C)

atunci C depinde de A icircn mod tranzitiv Eliminarea dependenţelor tranzitive se face prin

descompunerea tabelei iniţiale icircn două tabele ambele conţinacircnd atributul intermediar (B)

O tabelă icircn FN3 prezintă icircncă 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 icircnlă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 icircn FN4 dacă şi numai dacă este icircn FN3 şi nu conţine două sau mai

multe dependenţe multivaloare Icircntr-o tabelă T fie ABC trei atribute Icircn tabela T se menţine

dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei

perechi de date (AC) depinde numai de o valoare a lui A şi este independentă de valorile lui C

FORMA NORMALA 5

FN5 O tabelă este icircn FN5 dacă şi numai dacă este icircn FN4 şi fiecare dependenţă joncţiune

este generată printr-un candidat cheie al tabelei Icircn tabela T (ABC) se menţine dependenţa

joncţiune (AB AC) dacă şi numai dacă T menţine dependenţa multivaloare A --gtgt 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

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Cap 1 Introducere helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellippag 311 Notiuni despre BD si SGBD 12 Datele operaţionale13 Independenţa datelor14 Nivelul de organizare a datelor icircntr-o bază de date15 Sisteme de gestiune a bazelor de date(SGBD)

Cap2 Sistemul Jocurilor Olimpice de Iarna Olimpiada Torino 2006helliphelliphelliphelliphellippag 7 Cap3 Schema conceptualahelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellippag 8

31Notiuni generale32Schema conceptuala propriu-zisa

Cap4 Schema logicahelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellippag 1141 Notiuni generale

42Schema logica propriu-zisaCap 5 Normalizarea bazelor de datehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellippag 14

51Notiuni generale52Normalizarea BD

Cap6 Denormalizara bazelor de datehelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellippag 26

61Notiuni generale

62 Denormalizarea BD

Cap7 Sistemul de gestiune MySQLhelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellippag 2971Notiuni generale72Aplicatii 73Tabelele bazei de date Torino2006

Cap8 Concluziihelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellippag 43Cap9 Bibliografie helliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphelliphellippag 44

2

Cap1 Introducere 11 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 icircntr-o mulţime de aplicaţii relaţiile logice dintre aceste informaţii şi tehnicile de prelucrare corespunzătoare Icircn bazele de date are loc o integrare a datelor icircn sensul că mai multe fişiere sunt privite icircn ansamblu eliminacircndu-se informaţiile redundante Este permis accesul simultan la aceleaşi date situate icircn acelaşi loc sau distribuite spaţial a mai multor persoane prin mai multe tipuri de interogări (BAcircSCĂ 1997 11 DESPI amp 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 dataDe exemplu BD - Student Aceasta includ studentii dintr-o institutieFiecare 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 saIn orce lucru cu BD se foloseste SGBD Prin menajarea datelor se scoate informatia de date

O bază de date poate fi integrată partajată

Prin ldquointegratărdquo icircnţelegem că baza de date poate fi gacircndită ca o unificare de mai multe fişiere de date distincte şi neredundante

Prin ldquopartajareardquo unei baze de date se icircnţelege că bucăţile individuale de date din baza de date pot fi partajate icircntre mai mulţi utilizatori individuali fiecare dintre ei putacircnd avea acces la aceeaşi bucată de date simultan (sisteme multiutilizator)

12 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 icircn sistem din lumea exterioară de obicei prin terminaleDatele 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) Icircntre aceste entităţi există icircntotdeauna asociaţii sau relaţii ce le leagă icircntr-o bază de date comună

3

Relaţiile dintre entităţi sunt la racircndul lor părţi ale datelor operaţionale chiar mai importante decacirct entităţile asociate O relaţie poate fi asociată la una două sau trei entităţi iar o entitate poate fi asociată la oricacircte relaţii

13 Independenţa datelor

Modul icircn care datele sunt organizate pe suportul secundar de stocare şi modul icircn 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 (cacircmpul numeric poate fi memorat icircn formă internă aritmetică

sau ca un şir de caractere) reprezentarea datelor caracter (un cacircmp şir de caractere poate fi memorat icircn mai multe coduri de

caractere ASCII EBCDIC etc) Terminologie Un cacircmp este cea mai mică unitate de date stocată icircn baza de date Baza de date conţine mai multe ocurenţe sau instanţe pentru fiecare din tipurile de cacircmpuri O icircnregistrare este o colecţie de nume de cacircmpuri asociate O ocurenţă sau instanţă de icircnregistrare constă dintr-un grup de ocurenţe de cacircmp icircnrudite

(asociate) şi reprezintă o asociere icircntre ele Un fişier este o colecţie a tuturor icircnregistrărilor de unul sau mai multe tipuri Icircntr-o bază de date un cacircmp 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 vederea opţiunea utilizatorului care lucrează cu anumită părţi ale unei baze de date numite vederib opţiunea administratorului bazei de date care integrează toate vederile referitoare la baza de

date icircntr-un singur model numit schemă conceptuală ea reprezentacircnd 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 icircn enumerarea tipurilor de entităţi ce apar icircn 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 Icircn 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

14 Nivelul de organizare a datelor icircntr-o bază de date

Datele dintr-o bază de date pot fi structurate pe 3 niveluri icircn funcţie de categoria de personal implicată

nivelul conceptual (global) ndash exprimă viziunea administratorului bazei de date asupra datelor

4

Acestui nivel icirci corespunde structura conceptuală (schema) a bazei de date prin care se realizează o descriere a tuturor datelor icircntr-un mod independent de aplicaţii ce face posibilă administrarea datelor

nivelul logic ndash 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 ndash 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

15Sisteme de gestiune a bazelor de date(SGBD)

Icircntre 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 ndash Data Base Management System) care permite

definirea ndash crearea bazei de date introducerea (adugarea) datelor icircn baza de date modificarea unor date deja existente icircn baza de date stergerea datelor din baza de date

consultarea bazei de date ndash interogareaextragerea datelor

Un SGBD dă posibilitatea utilizatorului să aibă acces la date folosind un limbaj de nivel icircnalt apropiat de modul obişnuit de exprimare pentru a obţine informaţii utilizatorul făcacircnd abstracţie de algoritmii aplicaţi pentru selectarea datelor implicate şi a modului de memorare a lor SGBD-ul este deci o interfaţă icircntre 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 icircn reprezentarea informaţiilor etc LDD-ul este utilizat atacirct pentru proiectarea bazelor de date cacirct ş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 icircn baza de date cum ar fi

icircncă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ă icircn trei categoriia programatorii de aplicaţie (care scriu programele aplicaţie icircn limbaje de programare Cobol C etc) sau icircn 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 ldquoquery languagerdquo)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 icircntreţine baza de date)

5

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 icircn 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 (fig1)

bazabazele de date ndash reprezintă componenta de tip date a sistemului (colecţiile de date propriu-zise indecşii)

sistemul de gestiune a bazeibazelor de date ndash 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 ndash SGBD)

alte componente ndash 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

Cap2Sistemul Jocurilor Olimpice de IarnaOlimpiada Torino 2006

6

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

Cap3Schema conceptuala31Notiuni generale

7

O schema conceptuala este o reprezentare a icircntregii informatii continute icircn baza de date ce combina subschemele vederilor ce privesc o anumita aplicatie icircntr-un model unitar Acest tip de schema trebuie sa se bazeze pe un model teoretic si sa fie simpla adica usor de icircnteles si de prelucrat

Sistemele de gestiune a bazelor de date au fost clasificate icircn trei grupe mari icircn functie de tipul elementelor cu care lucreaza si a structurilor obtinute

a modelul retea ndash permite lucrul cu entitatii relatii binare de tipul 11 si 1N diagrama rezultata fiind un graf oarecare

b modelul arborescent (ierarhic) ndash permite lucrul cu entitati si relatii binare de tipul 11 si 1N iar diagrama este alcatuita dintr-o multime de arbori

c modelul relational ndash icircn 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 ndash relatie (ER)

Schema conceptuala a unei baze de date este o descriere de forma Nume_entitate=lista de atribute

Diagrama entitate ndash relatie Intre entitati se pot stabili relatii Aceste relatii se pot reprezenta prin Diagrama entitate ndash 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

32 Schema conceptuala propriu-zisa

9

10

Cap4Schema logica41 Notiuni generale

Schema logica descrie datele stocate sub aspectul modelului de date utilizat de SGBDPentru realizarea schemei logice a unei baze de date se porneşte de la schema conceptuală (modelul entitate ndash legătură) urmărindu-se conversia entităţilor şi a legăturilor icircn tabele relaţionaleRegulile de conversie ale entităţilor legăturilor şi atributelor sunt următoarele

Transformarea entităţilorRegulă generală entităţile se transformă icircn tabeleSubcazuri

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 straineConventie 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 putineEx a2) SOT 1(0) este_casatorit 1(0) SOTIE - cheia straina va fi plasata in tabelul cu linii mai putine

b) Relatiile M1 devin chei straine plasate in tabelul care se afla in partea de ldquomultirdquo 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 318

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 tabeleCazuria) Atributele simple ale unei entitati devin coloane in tabelul provenit din acea entitate b) Toate componentele unui atribut compus devin coloanec) 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) ndash Atributele simple ale unei relatii 1 1 sau M 1 d evin coloane ale tabelului care contine cheia straina- Fiecare componenta a unui atribut compus al unei relatii 11 sau M1 se va converti in mai multe coloane in tabelul care contine cheia straina

e) ndash Atributele simple ale unei relatii M M vor deveni coloane ale tabelului asociativFiecare componenta a unui atribut compus al unei relatii MM va deveni o coloana in tabelul asociativ creat

f) ndash 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

42Schema logica propriu-zisa

13

Cap 5Normalizarea bazelor de date

51Notiuni 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 icircn două sau mai

multe tabele păstracircnd informaţii (atribute) de legătură

FORMA NORMALA 1

FN1 O tabelă este icircn 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ă icircn tabele cu atribute elementare Fiecare

structură repetitivă generează (prin descompunere) o nouă tabelă iar atributele la nivel de grup

se icircnlătură rămacircnacircnd doar cele elementare

Algoritmul 1FN

Se icircnlocuiesc 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 icircn FN2 dacă şi numai dacă

- este icircn FN1

- orice atribut neprim este complet dependent funcţional de orice chei candidat a relaţiei

O tabelă icircn FN2 prezintă icircncă o serie de anomalii de actualizare datorită eventualelor

dependenţe tranzitive

Eliminarea dependenţelor incomplete se face prin descompunerea tabelei iniţiale icircn două

tabele ambele conţinacircnd 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 K1IgraveK un subset al lui K astfel incat dependenta K1 gX este

totala si se creează in nou tabel R1(K1X) 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 ndash 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 cacircnd toate acestea vor ajunge in

a doua forma normala

FORMA NORMALA 3

FN3 O tabelă este icircn FN3 dacă şi numai dacă

este icircn FN2

fiecare atribut neprim depinde icircn mod netranzitiv de cheia tabelei Icircntr-o tabelă T fie

ABC trei atribute cu A cheie Dacă B depinde de A (A 1048774 B) şi C depinde de B (B 1048774 C)

atunci C depinde de A icircn mod tranzitiv Eliminarea dependenţelor tranzitive se face prin

descompunerea tabelei iniţiale icircn două tabele ambele conţinacircnd atributul intermediar (B)

O tabelă icircn FN3 prezintă icircncă 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 icircnlă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 icircn FN4 dacă şi numai dacă este icircn FN3 şi nu conţine două sau mai

multe dependenţe multivaloare Icircntr-o tabelă T fie ABC trei atribute Icircn tabela T se menţine

dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei

perechi de date (AC) depinde numai de o valoare a lui A şi este independentă de valorile lui C

FORMA NORMALA 5

FN5 O tabelă este icircn FN5 dacă şi numai dacă este icircn FN4 şi fiecare dependenţă joncţiune

este generată printr-un candidat cheie al tabelei Icircn tabela T (ABC) se menţine dependenţa

joncţiune (AB AC) dacă şi numai dacă T menţine dependenţa multivaloare A --gtgt 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

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Cap1 Introducere 11 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 icircntr-o mulţime de aplicaţii relaţiile logice dintre aceste informaţii şi tehnicile de prelucrare corespunzătoare Icircn bazele de date are loc o integrare a datelor icircn sensul că mai multe fişiere sunt privite icircn ansamblu eliminacircndu-se informaţiile redundante Este permis accesul simultan la aceleaşi date situate icircn acelaşi loc sau distribuite spaţial a mai multor persoane prin mai multe tipuri de interogări (BAcircSCĂ 1997 11 DESPI amp 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 dataDe exemplu BD - Student Aceasta includ studentii dintr-o institutieFiecare 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 saIn orce lucru cu BD se foloseste SGBD Prin menajarea datelor se scoate informatia de date

O bază de date poate fi integrată partajată

Prin ldquointegratărdquo icircnţelegem că baza de date poate fi gacircndită ca o unificare de mai multe fişiere de date distincte şi neredundante

Prin ldquopartajareardquo unei baze de date se icircnţelege că bucăţile individuale de date din baza de date pot fi partajate icircntre mai mulţi utilizatori individuali fiecare dintre ei putacircnd avea acces la aceeaşi bucată de date simultan (sisteme multiutilizator)

12 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 icircn sistem din lumea exterioară de obicei prin terminaleDatele 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) Icircntre aceste entităţi există icircntotdeauna asociaţii sau relaţii ce le leagă icircntr-o bază de date comună

3

Relaţiile dintre entităţi sunt la racircndul lor părţi ale datelor operaţionale chiar mai importante decacirct entităţile asociate O relaţie poate fi asociată la una două sau trei entităţi iar o entitate poate fi asociată la oricacircte relaţii

13 Independenţa datelor

Modul icircn care datele sunt organizate pe suportul secundar de stocare şi modul icircn 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 (cacircmpul numeric poate fi memorat icircn formă internă aritmetică

sau ca un şir de caractere) reprezentarea datelor caracter (un cacircmp şir de caractere poate fi memorat icircn mai multe coduri de

caractere ASCII EBCDIC etc) Terminologie Un cacircmp este cea mai mică unitate de date stocată icircn baza de date Baza de date conţine mai multe ocurenţe sau instanţe pentru fiecare din tipurile de cacircmpuri O icircnregistrare este o colecţie de nume de cacircmpuri asociate O ocurenţă sau instanţă de icircnregistrare constă dintr-un grup de ocurenţe de cacircmp icircnrudite

(asociate) şi reprezintă o asociere icircntre ele Un fişier este o colecţie a tuturor icircnregistrărilor de unul sau mai multe tipuri Icircntr-o bază de date un cacircmp 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 vederea opţiunea utilizatorului care lucrează cu anumită părţi ale unei baze de date numite vederib opţiunea administratorului bazei de date care integrează toate vederile referitoare la baza de

date icircntr-un singur model numit schemă conceptuală ea reprezentacircnd 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 icircn enumerarea tipurilor de entităţi ce apar icircn 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 Icircn 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

14 Nivelul de organizare a datelor icircntr-o bază de date

Datele dintr-o bază de date pot fi structurate pe 3 niveluri icircn funcţie de categoria de personal implicată

nivelul conceptual (global) ndash exprimă viziunea administratorului bazei de date asupra datelor

4

Acestui nivel icirci corespunde structura conceptuală (schema) a bazei de date prin care se realizează o descriere a tuturor datelor icircntr-un mod independent de aplicaţii ce face posibilă administrarea datelor

nivelul logic ndash 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 ndash 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

15Sisteme de gestiune a bazelor de date(SGBD)

Icircntre 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 ndash Data Base Management System) care permite

definirea ndash crearea bazei de date introducerea (adugarea) datelor icircn baza de date modificarea unor date deja existente icircn baza de date stergerea datelor din baza de date

consultarea bazei de date ndash interogareaextragerea datelor

Un SGBD dă posibilitatea utilizatorului să aibă acces la date folosind un limbaj de nivel icircnalt apropiat de modul obişnuit de exprimare pentru a obţine informaţii utilizatorul făcacircnd abstracţie de algoritmii aplicaţi pentru selectarea datelor implicate şi a modului de memorare a lor SGBD-ul este deci o interfaţă icircntre 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 icircn reprezentarea informaţiilor etc LDD-ul este utilizat atacirct pentru proiectarea bazelor de date cacirct ş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 icircn baza de date cum ar fi

icircncă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ă icircn trei categoriia programatorii de aplicaţie (care scriu programele aplicaţie icircn limbaje de programare Cobol C etc) sau icircn 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 ldquoquery languagerdquo)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 icircntreţine baza de date)

5

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 icircn 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 (fig1)

bazabazele de date ndash reprezintă componenta de tip date a sistemului (colecţiile de date propriu-zise indecşii)

sistemul de gestiune a bazeibazelor de date ndash 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 ndash SGBD)

alte componente ndash 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

Cap2Sistemul Jocurilor Olimpice de IarnaOlimpiada Torino 2006

6

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

Cap3Schema conceptuala31Notiuni generale

7

O schema conceptuala este o reprezentare a icircntregii informatii continute icircn baza de date ce combina subschemele vederilor ce privesc o anumita aplicatie icircntr-un model unitar Acest tip de schema trebuie sa se bazeze pe un model teoretic si sa fie simpla adica usor de icircnteles si de prelucrat

Sistemele de gestiune a bazelor de date au fost clasificate icircn trei grupe mari icircn functie de tipul elementelor cu care lucreaza si a structurilor obtinute

a modelul retea ndash permite lucrul cu entitatii relatii binare de tipul 11 si 1N diagrama rezultata fiind un graf oarecare

b modelul arborescent (ierarhic) ndash permite lucrul cu entitati si relatii binare de tipul 11 si 1N iar diagrama este alcatuita dintr-o multime de arbori

c modelul relational ndash icircn 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 ndash relatie (ER)

Schema conceptuala a unei baze de date este o descriere de forma Nume_entitate=lista de atribute

Diagrama entitate ndash relatie Intre entitati se pot stabili relatii Aceste relatii se pot reprezenta prin Diagrama entitate ndash 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

32 Schema conceptuala propriu-zisa

9

10

Cap4Schema logica41 Notiuni generale

Schema logica descrie datele stocate sub aspectul modelului de date utilizat de SGBDPentru realizarea schemei logice a unei baze de date se porneşte de la schema conceptuală (modelul entitate ndash legătură) urmărindu-se conversia entităţilor şi a legăturilor icircn tabele relaţionaleRegulile de conversie ale entităţilor legăturilor şi atributelor sunt următoarele

Transformarea entităţilorRegulă generală entităţile se transformă icircn tabeleSubcazuri

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 straineConventie 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 putineEx a2) SOT 1(0) este_casatorit 1(0) SOTIE - cheia straina va fi plasata in tabelul cu linii mai putine

b) Relatiile M1 devin chei straine plasate in tabelul care se afla in partea de ldquomultirdquo 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 318

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 tabeleCazuria) Atributele simple ale unei entitati devin coloane in tabelul provenit din acea entitate b) Toate componentele unui atribut compus devin coloanec) 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) ndash Atributele simple ale unei relatii 1 1 sau M 1 d evin coloane ale tabelului care contine cheia straina- Fiecare componenta a unui atribut compus al unei relatii 11 sau M1 se va converti in mai multe coloane in tabelul care contine cheia straina

e) ndash Atributele simple ale unei relatii M M vor deveni coloane ale tabelului asociativFiecare componenta a unui atribut compus al unei relatii MM va deveni o coloana in tabelul asociativ creat

f) ndash 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

42Schema logica propriu-zisa

13

Cap 5Normalizarea bazelor de date

51Notiuni 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 icircn două sau mai

multe tabele păstracircnd informaţii (atribute) de legătură

FORMA NORMALA 1

FN1 O tabelă este icircn 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ă icircn tabele cu atribute elementare Fiecare

structură repetitivă generează (prin descompunere) o nouă tabelă iar atributele la nivel de grup

se icircnlătură rămacircnacircnd doar cele elementare

Algoritmul 1FN

Se icircnlocuiesc 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 icircn FN2 dacă şi numai dacă

- este icircn FN1

- orice atribut neprim este complet dependent funcţional de orice chei candidat a relaţiei

O tabelă icircn FN2 prezintă icircncă o serie de anomalii de actualizare datorită eventualelor

dependenţe tranzitive

Eliminarea dependenţelor incomplete se face prin descompunerea tabelei iniţiale icircn două

tabele ambele conţinacircnd 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 K1IgraveK un subset al lui K astfel incat dependenta K1 gX este

totala si se creează in nou tabel R1(K1X) 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 ndash 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 cacircnd toate acestea vor ajunge in

a doua forma normala

FORMA NORMALA 3

FN3 O tabelă este icircn FN3 dacă şi numai dacă

este icircn FN2

fiecare atribut neprim depinde icircn mod netranzitiv de cheia tabelei Icircntr-o tabelă T fie

ABC trei atribute cu A cheie Dacă B depinde de A (A 1048774 B) şi C depinde de B (B 1048774 C)

atunci C depinde de A icircn mod tranzitiv Eliminarea dependenţelor tranzitive se face prin

descompunerea tabelei iniţiale icircn două tabele ambele conţinacircnd atributul intermediar (B)

O tabelă icircn FN3 prezintă icircncă 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 icircnlă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 icircn FN4 dacă şi numai dacă este icircn FN3 şi nu conţine două sau mai

multe dependenţe multivaloare Icircntr-o tabelă T fie ABC trei atribute Icircn tabela T se menţine

dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei

perechi de date (AC) depinde numai de o valoare a lui A şi este independentă de valorile lui C

FORMA NORMALA 5

FN5 O tabelă este icircn FN5 dacă şi numai dacă este icircn FN4 şi fiecare dependenţă joncţiune

este generată printr-un candidat cheie al tabelei Icircn tabela T (ABC) se menţine dependenţa

joncţiune (AB AC) dacă şi numai dacă T menţine dependenţa multivaloare A --gtgt 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

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Relaţiile dintre entităţi sunt la racircndul lor părţi ale datelor operaţionale chiar mai importante decacirct entităţile asociate O relaţie poate fi asociată la una două sau trei entităţi iar o entitate poate fi asociată la oricacircte relaţii

13 Independenţa datelor

Modul icircn care datele sunt organizate pe suportul secundar de stocare şi modul icircn 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 (cacircmpul numeric poate fi memorat icircn formă internă aritmetică

sau ca un şir de caractere) reprezentarea datelor caracter (un cacircmp şir de caractere poate fi memorat icircn mai multe coduri de

caractere ASCII EBCDIC etc) Terminologie Un cacircmp este cea mai mică unitate de date stocată icircn baza de date Baza de date conţine mai multe ocurenţe sau instanţe pentru fiecare din tipurile de cacircmpuri O icircnregistrare este o colecţie de nume de cacircmpuri asociate O ocurenţă sau instanţă de icircnregistrare constă dintr-un grup de ocurenţe de cacircmp icircnrudite

(asociate) şi reprezintă o asociere icircntre ele Un fişier este o colecţie a tuturor icircnregistrărilor de unul sau mai multe tipuri Icircntr-o bază de date un cacircmp 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 vederea opţiunea utilizatorului care lucrează cu anumită părţi ale unei baze de date numite vederib opţiunea administratorului bazei de date care integrează toate vederile referitoare la baza de

date icircntr-un singur model numit schemă conceptuală ea reprezentacircnd 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 icircn enumerarea tipurilor de entităţi ce apar icircn 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 Icircn 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

14 Nivelul de organizare a datelor icircntr-o bază de date

Datele dintr-o bază de date pot fi structurate pe 3 niveluri icircn funcţie de categoria de personal implicată

nivelul conceptual (global) ndash exprimă viziunea administratorului bazei de date asupra datelor

4

Acestui nivel icirci corespunde structura conceptuală (schema) a bazei de date prin care se realizează o descriere a tuturor datelor icircntr-un mod independent de aplicaţii ce face posibilă administrarea datelor

nivelul logic ndash 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 ndash 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

15Sisteme de gestiune a bazelor de date(SGBD)

Icircntre 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 ndash Data Base Management System) care permite

definirea ndash crearea bazei de date introducerea (adugarea) datelor icircn baza de date modificarea unor date deja existente icircn baza de date stergerea datelor din baza de date

consultarea bazei de date ndash interogareaextragerea datelor

Un SGBD dă posibilitatea utilizatorului să aibă acces la date folosind un limbaj de nivel icircnalt apropiat de modul obişnuit de exprimare pentru a obţine informaţii utilizatorul făcacircnd abstracţie de algoritmii aplicaţi pentru selectarea datelor implicate şi a modului de memorare a lor SGBD-ul este deci o interfaţă icircntre 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 icircn reprezentarea informaţiilor etc LDD-ul este utilizat atacirct pentru proiectarea bazelor de date cacirct ş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 icircn baza de date cum ar fi

icircncă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ă icircn trei categoriia programatorii de aplicaţie (care scriu programele aplicaţie icircn limbaje de programare Cobol C etc) sau icircn 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 ldquoquery languagerdquo)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 icircntreţine baza de date)

5

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 icircn 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 (fig1)

bazabazele de date ndash reprezintă componenta de tip date a sistemului (colecţiile de date propriu-zise indecşii)

sistemul de gestiune a bazeibazelor de date ndash 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 ndash SGBD)

alte componente ndash 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

Cap2Sistemul Jocurilor Olimpice de IarnaOlimpiada Torino 2006

6

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

Cap3Schema conceptuala31Notiuni generale

7

O schema conceptuala este o reprezentare a icircntregii informatii continute icircn baza de date ce combina subschemele vederilor ce privesc o anumita aplicatie icircntr-un model unitar Acest tip de schema trebuie sa se bazeze pe un model teoretic si sa fie simpla adica usor de icircnteles si de prelucrat

Sistemele de gestiune a bazelor de date au fost clasificate icircn trei grupe mari icircn functie de tipul elementelor cu care lucreaza si a structurilor obtinute

a modelul retea ndash permite lucrul cu entitatii relatii binare de tipul 11 si 1N diagrama rezultata fiind un graf oarecare

b modelul arborescent (ierarhic) ndash permite lucrul cu entitati si relatii binare de tipul 11 si 1N iar diagrama este alcatuita dintr-o multime de arbori

c modelul relational ndash icircn 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 ndash relatie (ER)

Schema conceptuala a unei baze de date este o descriere de forma Nume_entitate=lista de atribute

Diagrama entitate ndash relatie Intre entitati se pot stabili relatii Aceste relatii se pot reprezenta prin Diagrama entitate ndash 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

32 Schema conceptuala propriu-zisa

9

10

Cap4Schema logica41 Notiuni generale

Schema logica descrie datele stocate sub aspectul modelului de date utilizat de SGBDPentru realizarea schemei logice a unei baze de date se porneşte de la schema conceptuală (modelul entitate ndash legătură) urmărindu-se conversia entităţilor şi a legăturilor icircn tabele relaţionaleRegulile de conversie ale entităţilor legăturilor şi atributelor sunt următoarele

Transformarea entităţilorRegulă generală entităţile se transformă icircn tabeleSubcazuri

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 straineConventie 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 putineEx a2) SOT 1(0) este_casatorit 1(0) SOTIE - cheia straina va fi plasata in tabelul cu linii mai putine

b) Relatiile M1 devin chei straine plasate in tabelul care se afla in partea de ldquomultirdquo 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 318

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 tabeleCazuria) Atributele simple ale unei entitati devin coloane in tabelul provenit din acea entitate b) Toate componentele unui atribut compus devin coloanec) 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) ndash Atributele simple ale unei relatii 1 1 sau M 1 d evin coloane ale tabelului care contine cheia straina- Fiecare componenta a unui atribut compus al unei relatii 11 sau M1 se va converti in mai multe coloane in tabelul care contine cheia straina

e) ndash Atributele simple ale unei relatii M M vor deveni coloane ale tabelului asociativFiecare componenta a unui atribut compus al unei relatii MM va deveni o coloana in tabelul asociativ creat

f) ndash 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

42Schema logica propriu-zisa

13

Cap 5Normalizarea bazelor de date

51Notiuni 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 icircn două sau mai

multe tabele păstracircnd informaţii (atribute) de legătură

FORMA NORMALA 1

FN1 O tabelă este icircn 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ă icircn tabele cu atribute elementare Fiecare

structură repetitivă generează (prin descompunere) o nouă tabelă iar atributele la nivel de grup

se icircnlătură rămacircnacircnd doar cele elementare

Algoritmul 1FN

Se icircnlocuiesc 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 icircn FN2 dacă şi numai dacă

- este icircn FN1

- orice atribut neprim este complet dependent funcţional de orice chei candidat a relaţiei

O tabelă icircn FN2 prezintă icircncă o serie de anomalii de actualizare datorită eventualelor

dependenţe tranzitive

Eliminarea dependenţelor incomplete se face prin descompunerea tabelei iniţiale icircn două

tabele ambele conţinacircnd 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 K1IgraveK un subset al lui K astfel incat dependenta K1 gX este

totala si se creează in nou tabel R1(K1X) 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 ndash 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 cacircnd toate acestea vor ajunge in

a doua forma normala

FORMA NORMALA 3

FN3 O tabelă este icircn FN3 dacă şi numai dacă

este icircn FN2

fiecare atribut neprim depinde icircn mod netranzitiv de cheia tabelei Icircntr-o tabelă T fie

ABC trei atribute cu A cheie Dacă B depinde de A (A 1048774 B) şi C depinde de B (B 1048774 C)

atunci C depinde de A icircn mod tranzitiv Eliminarea dependenţelor tranzitive se face prin

descompunerea tabelei iniţiale icircn două tabele ambele conţinacircnd atributul intermediar (B)

O tabelă icircn FN3 prezintă icircncă 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 icircnlă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 icircn FN4 dacă şi numai dacă este icircn FN3 şi nu conţine două sau mai

multe dependenţe multivaloare Icircntr-o tabelă T fie ABC trei atribute Icircn tabela T se menţine

dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei

perechi de date (AC) depinde numai de o valoare a lui A şi este independentă de valorile lui C

FORMA NORMALA 5

FN5 O tabelă este icircn FN5 dacă şi numai dacă este icircn FN4 şi fiecare dependenţă joncţiune

este generată printr-un candidat cheie al tabelei Icircn tabela T (ABC) se menţine dependenţa

joncţiune (AB AC) dacă şi numai dacă T menţine dependenţa multivaloare A --gtgt 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

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Acestui nivel icirci corespunde structura conceptuală (schema) a bazei de date prin care se realizează o descriere a tuturor datelor icircntr-un mod independent de aplicaţii ce face posibilă administrarea datelor

nivelul logic ndash 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 ndash 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

15Sisteme de gestiune a bazelor de date(SGBD)

Icircntre 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 ndash Data Base Management System) care permite

definirea ndash crearea bazei de date introducerea (adugarea) datelor icircn baza de date modificarea unor date deja existente icircn baza de date stergerea datelor din baza de date

consultarea bazei de date ndash interogareaextragerea datelor

Un SGBD dă posibilitatea utilizatorului să aibă acces la date folosind un limbaj de nivel icircnalt apropiat de modul obişnuit de exprimare pentru a obţine informaţii utilizatorul făcacircnd abstracţie de algoritmii aplicaţi pentru selectarea datelor implicate şi a modului de memorare a lor SGBD-ul este deci o interfaţă icircntre 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 icircn reprezentarea informaţiilor etc LDD-ul este utilizat atacirct pentru proiectarea bazelor de date cacirct ş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 icircn baza de date cum ar fi

icircncă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ă icircn trei categoriia programatorii de aplicaţie (care scriu programele aplicaţie icircn limbaje de programare Cobol C etc) sau icircn 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 ldquoquery languagerdquo)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 icircntreţine baza de date)

5

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 icircn 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 (fig1)

bazabazele de date ndash reprezintă componenta de tip date a sistemului (colecţiile de date propriu-zise indecşii)

sistemul de gestiune a bazeibazelor de date ndash 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 ndash SGBD)

alte componente ndash 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

Cap2Sistemul Jocurilor Olimpice de IarnaOlimpiada Torino 2006

6

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

Cap3Schema conceptuala31Notiuni generale

7

O schema conceptuala este o reprezentare a icircntregii informatii continute icircn baza de date ce combina subschemele vederilor ce privesc o anumita aplicatie icircntr-un model unitar Acest tip de schema trebuie sa se bazeze pe un model teoretic si sa fie simpla adica usor de icircnteles si de prelucrat

Sistemele de gestiune a bazelor de date au fost clasificate icircn trei grupe mari icircn functie de tipul elementelor cu care lucreaza si a structurilor obtinute

a modelul retea ndash permite lucrul cu entitatii relatii binare de tipul 11 si 1N diagrama rezultata fiind un graf oarecare

b modelul arborescent (ierarhic) ndash permite lucrul cu entitati si relatii binare de tipul 11 si 1N iar diagrama este alcatuita dintr-o multime de arbori

c modelul relational ndash icircn 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 ndash relatie (ER)

Schema conceptuala a unei baze de date este o descriere de forma Nume_entitate=lista de atribute

Diagrama entitate ndash relatie Intre entitati se pot stabili relatii Aceste relatii se pot reprezenta prin Diagrama entitate ndash 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

32 Schema conceptuala propriu-zisa

9

10

Cap4Schema logica41 Notiuni generale

Schema logica descrie datele stocate sub aspectul modelului de date utilizat de SGBDPentru realizarea schemei logice a unei baze de date se porneşte de la schema conceptuală (modelul entitate ndash legătură) urmărindu-se conversia entităţilor şi a legăturilor icircn tabele relaţionaleRegulile de conversie ale entităţilor legăturilor şi atributelor sunt următoarele

Transformarea entităţilorRegulă generală entităţile se transformă icircn tabeleSubcazuri

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 straineConventie 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 putineEx a2) SOT 1(0) este_casatorit 1(0) SOTIE - cheia straina va fi plasata in tabelul cu linii mai putine

b) Relatiile M1 devin chei straine plasate in tabelul care se afla in partea de ldquomultirdquo 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 318

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 tabeleCazuria) Atributele simple ale unei entitati devin coloane in tabelul provenit din acea entitate b) Toate componentele unui atribut compus devin coloanec) 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) ndash Atributele simple ale unei relatii 1 1 sau M 1 d evin coloane ale tabelului care contine cheia straina- Fiecare componenta a unui atribut compus al unei relatii 11 sau M1 se va converti in mai multe coloane in tabelul care contine cheia straina

e) ndash Atributele simple ale unei relatii M M vor deveni coloane ale tabelului asociativFiecare componenta a unui atribut compus al unei relatii MM va deveni o coloana in tabelul asociativ creat

f) ndash 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

42Schema logica propriu-zisa

13

Cap 5Normalizarea bazelor de date

51Notiuni 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 icircn două sau mai

multe tabele păstracircnd informaţii (atribute) de legătură

FORMA NORMALA 1

FN1 O tabelă este icircn 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ă icircn tabele cu atribute elementare Fiecare

structură repetitivă generează (prin descompunere) o nouă tabelă iar atributele la nivel de grup

se icircnlătură rămacircnacircnd doar cele elementare

Algoritmul 1FN

Se icircnlocuiesc 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 icircn FN2 dacă şi numai dacă

- este icircn FN1

- orice atribut neprim este complet dependent funcţional de orice chei candidat a relaţiei

O tabelă icircn FN2 prezintă icircncă o serie de anomalii de actualizare datorită eventualelor

dependenţe tranzitive

Eliminarea dependenţelor incomplete se face prin descompunerea tabelei iniţiale icircn două

tabele ambele conţinacircnd 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 K1IgraveK un subset al lui K astfel incat dependenta K1 gX este

totala si se creează in nou tabel R1(K1X) 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 ndash 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 cacircnd toate acestea vor ajunge in

a doua forma normala

FORMA NORMALA 3

FN3 O tabelă este icircn FN3 dacă şi numai dacă

este icircn FN2

fiecare atribut neprim depinde icircn mod netranzitiv de cheia tabelei Icircntr-o tabelă T fie

ABC trei atribute cu A cheie Dacă B depinde de A (A 1048774 B) şi C depinde de B (B 1048774 C)

atunci C depinde de A icircn mod tranzitiv Eliminarea dependenţelor tranzitive se face prin

descompunerea tabelei iniţiale icircn două tabele ambele conţinacircnd atributul intermediar (B)

O tabelă icircn FN3 prezintă icircncă 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 icircnlă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 icircn FN4 dacă şi numai dacă este icircn FN3 şi nu conţine două sau mai

multe dependenţe multivaloare Icircntr-o tabelă T fie ABC trei atribute Icircn tabela T se menţine

dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei

perechi de date (AC) depinde numai de o valoare a lui A şi este independentă de valorile lui C

FORMA NORMALA 5

FN5 O tabelă este icircn FN5 dacă şi numai dacă este icircn FN4 şi fiecare dependenţă joncţiune

este generată printr-un candidat cheie al tabelei Icircn tabela T (ABC) se menţine dependenţa

joncţiune (AB AC) dacă şi numai dacă T menţine dependenţa multivaloare A --gtgt 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

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

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 icircn 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 (fig1)

bazabazele de date ndash reprezintă componenta de tip date a sistemului (colecţiile de date propriu-zise indecşii)

sistemul de gestiune a bazeibazelor de date ndash 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 ndash SGBD)

alte componente ndash 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

Cap2Sistemul Jocurilor Olimpice de IarnaOlimpiada Torino 2006

6

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

Cap3Schema conceptuala31Notiuni generale

7

O schema conceptuala este o reprezentare a icircntregii informatii continute icircn baza de date ce combina subschemele vederilor ce privesc o anumita aplicatie icircntr-un model unitar Acest tip de schema trebuie sa se bazeze pe un model teoretic si sa fie simpla adica usor de icircnteles si de prelucrat

Sistemele de gestiune a bazelor de date au fost clasificate icircn trei grupe mari icircn functie de tipul elementelor cu care lucreaza si a structurilor obtinute

a modelul retea ndash permite lucrul cu entitatii relatii binare de tipul 11 si 1N diagrama rezultata fiind un graf oarecare

b modelul arborescent (ierarhic) ndash permite lucrul cu entitati si relatii binare de tipul 11 si 1N iar diagrama este alcatuita dintr-o multime de arbori

c modelul relational ndash icircn 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 ndash relatie (ER)

Schema conceptuala a unei baze de date este o descriere de forma Nume_entitate=lista de atribute

Diagrama entitate ndash relatie Intre entitati se pot stabili relatii Aceste relatii se pot reprezenta prin Diagrama entitate ndash 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

32 Schema conceptuala propriu-zisa

9

10

Cap4Schema logica41 Notiuni generale

Schema logica descrie datele stocate sub aspectul modelului de date utilizat de SGBDPentru realizarea schemei logice a unei baze de date se porneşte de la schema conceptuală (modelul entitate ndash legătură) urmărindu-se conversia entităţilor şi a legăturilor icircn tabele relaţionaleRegulile de conversie ale entităţilor legăturilor şi atributelor sunt următoarele

Transformarea entităţilorRegulă generală entităţile se transformă icircn tabeleSubcazuri

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 straineConventie 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 putineEx a2) SOT 1(0) este_casatorit 1(0) SOTIE - cheia straina va fi plasata in tabelul cu linii mai putine

b) Relatiile M1 devin chei straine plasate in tabelul care se afla in partea de ldquomultirdquo 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 318

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 tabeleCazuria) Atributele simple ale unei entitati devin coloane in tabelul provenit din acea entitate b) Toate componentele unui atribut compus devin coloanec) 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) ndash Atributele simple ale unei relatii 1 1 sau M 1 d evin coloane ale tabelului care contine cheia straina- Fiecare componenta a unui atribut compus al unei relatii 11 sau M1 se va converti in mai multe coloane in tabelul care contine cheia straina

e) ndash Atributele simple ale unei relatii M M vor deveni coloane ale tabelului asociativFiecare componenta a unui atribut compus al unei relatii MM va deveni o coloana in tabelul asociativ creat

f) ndash 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

42Schema logica propriu-zisa

13

Cap 5Normalizarea bazelor de date

51Notiuni 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 icircn două sau mai

multe tabele păstracircnd informaţii (atribute) de legătură

FORMA NORMALA 1

FN1 O tabelă este icircn 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ă icircn tabele cu atribute elementare Fiecare

structură repetitivă generează (prin descompunere) o nouă tabelă iar atributele la nivel de grup

se icircnlătură rămacircnacircnd doar cele elementare

Algoritmul 1FN

Se icircnlocuiesc 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 icircn FN2 dacă şi numai dacă

- este icircn FN1

- orice atribut neprim este complet dependent funcţional de orice chei candidat a relaţiei

O tabelă icircn FN2 prezintă icircncă o serie de anomalii de actualizare datorită eventualelor

dependenţe tranzitive

Eliminarea dependenţelor incomplete se face prin descompunerea tabelei iniţiale icircn două

tabele ambele conţinacircnd 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 K1IgraveK un subset al lui K astfel incat dependenta K1 gX este

totala si se creează in nou tabel R1(K1X) 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 ndash 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 cacircnd toate acestea vor ajunge in

a doua forma normala

FORMA NORMALA 3

FN3 O tabelă este icircn FN3 dacă şi numai dacă

este icircn FN2

fiecare atribut neprim depinde icircn mod netranzitiv de cheia tabelei Icircntr-o tabelă T fie

ABC trei atribute cu A cheie Dacă B depinde de A (A 1048774 B) şi C depinde de B (B 1048774 C)

atunci C depinde de A icircn mod tranzitiv Eliminarea dependenţelor tranzitive se face prin

descompunerea tabelei iniţiale icircn două tabele ambele conţinacircnd atributul intermediar (B)

O tabelă icircn FN3 prezintă icircncă 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 icircnlă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 icircn FN4 dacă şi numai dacă este icircn FN3 şi nu conţine două sau mai

multe dependenţe multivaloare Icircntr-o tabelă T fie ABC trei atribute Icircn tabela T se menţine

dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei

perechi de date (AC) depinde numai de o valoare a lui A şi este independentă de valorile lui C

FORMA NORMALA 5

FN5 O tabelă este icircn FN5 dacă şi numai dacă este icircn FN4 şi fiecare dependenţă joncţiune

este generată printr-un candidat cheie al tabelei Icircn tabela T (ABC) se menţine dependenţa

joncţiune (AB AC) dacă şi numai dacă T menţine dependenţa multivaloare A --gtgt 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

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

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

Cap3Schema conceptuala31Notiuni generale

7

O schema conceptuala este o reprezentare a icircntregii informatii continute icircn baza de date ce combina subschemele vederilor ce privesc o anumita aplicatie icircntr-un model unitar Acest tip de schema trebuie sa se bazeze pe un model teoretic si sa fie simpla adica usor de icircnteles si de prelucrat

Sistemele de gestiune a bazelor de date au fost clasificate icircn trei grupe mari icircn functie de tipul elementelor cu care lucreaza si a structurilor obtinute

a modelul retea ndash permite lucrul cu entitatii relatii binare de tipul 11 si 1N diagrama rezultata fiind un graf oarecare

b modelul arborescent (ierarhic) ndash permite lucrul cu entitati si relatii binare de tipul 11 si 1N iar diagrama este alcatuita dintr-o multime de arbori

c modelul relational ndash icircn 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 ndash relatie (ER)

Schema conceptuala a unei baze de date este o descriere de forma Nume_entitate=lista de atribute

Diagrama entitate ndash relatie Intre entitati se pot stabili relatii Aceste relatii se pot reprezenta prin Diagrama entitate ndash 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

32 Schema conceptuala propriu-zisa

9

10

Cap4Schema logica41 Notiuni generale

Schema logica descrie datele stocate sub aspectul modelului de date utilizat de SGBDPentru realizarea schemei logice a unei baze de date se porneşte de la schema conceptuală (modelul entitate ndash legătură) urmărindu-se conversia entităţilor şi a legăturilor icircn tabele relaţionaleRegulile de conversie ale entităţilor legăturilor şi atributelor sunt următoarele

Transformarea entităţilorRegulă generală entităţile se transformă icircn tabeleSubcazuri

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 straineConventie 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 putineEx a2) SOT 1(0) este_casatorit 1(0) SOTIE - cheia straina va fi plasata in tabelul cu linii mai putine

b) Relatiile M1 devin chei straine plasate in tabelul care se afla in partea de ldquomultirdquo 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 318

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 tabeleCazuria) Atributele simple ale unei entitati devin coloane in tabelul provenit din acea entitate b) Toate componentele unui atribut compus devin coloanec) 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) ndash Atributele simple ale unei relatii 1 1 sau M 1 d evin coloane ale tabelului care contine cheia straina- Fiecare componenta a unui atribut compus al unei relatii 11 sau M1 se va converti in mai multe coloane in tabelul care contine cheia straina

e) ndash Atributele simple ale unei relatii M M vor deveni coloane ale tabelului asociativFiecare componenta a unui atribut compus al unei relatii MM va deveni o coloana in tabelul asociativ creat

f) ndash 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

42Schema logica propriu-zisa

13

Cap 5Normalizarea bazelor de date

51Notiuni 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 icircn două sau mai

multe tabele păstracircnd informaţii (atribute) de legătură

FORMA NORMALA 1

FN1 O tabelă este icircn 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ă icircn tabele cu atribute elementare Fiecare

structură repetitivă generează (prin descompunere) o nouă tabelă iar atributele la nivel de grup

se icircnlătură rămacircnacircnd doar cele elementare

Algoritmul 1FN

Se icircnlocuiesc 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 icircn FN2 dacă şi numai dacă

- este icircn FN1

- orice atribut neprim este complet dependent funcţional de orice chei candidat a relaţiei

O tabelă icircn FN2 prezintă icircncă o serie de anomalii de actualizare datorită eventualelor

dependenţe tranzitive

Eliminarea dependenţelor incomplete se face prin descompunerea tabelei iniţiale icircn două

tabele ambele conţinacircnd 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 K1IgraveK un subset al lui K astfel incat dependenta K1 gX este

totala si se creează in nou tabel R1(K1X) 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 ndash 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 cacircnd toate acestea vor ajunge in

a doua forma normala

FORMA NORMALA 3

FN3 O tabelă este icircn FN3 dacă şi numai dacă

este icircn FN2

fiecare atribut neprim depinde icircn mod netranzitiv de cheia tabelei Icircntr-o tabelă T fie

ABC trei atribute cu A cheie Dacă B depinde de A (A 1048774 B) şi C depinde de B (B 1048774 C)

atunci C depinde de A icircn mod tranzitiv Eliminarea dependenţelor tranzitive se face prin

descompunerea tabelei iniţiale icircn două tabele ambele conţinacircnd atributul intermediar (B)

O tabelă icircn FN3 prezintă icircncă 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 icircnlă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 icircn FN4 dacă şi numai dacă este icircn FN3 şi nu conţine două sau mai

multe dependenţe multivaloare Icircntr-o tabelă T fie ABC trei atribute Icircn tabela T se menţine

dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei

perechi de date (AC) depinde numai de o valoare a lui A şi este independentă de valorile lui C

FORMA NORMALA 5

FN5 O tabelă este icircn FN5 dacă şi numai dacă este icircn FN4 şi fiecare dependenţă joncţiune

este generată printr-un candidat cheie al tabelei Icircn tabela T (ABC) se menţine dependenţa

joncţiune (AB AC) dacă şi numai dacă T menţine dependenţa multivaloare A --gtgt 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

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

O schema conceptuala este o reprezentare a icircntregii informatii continute icircn baza de date ce combina subschemele vederilor ce privesc o anumita aplicatie icircntr-un model unitar Acest tip de schema trebuie sa se bazeze pe un model teoretic si sa fie simpla adica usor de icircnteles si de prelucrat

Sistemele de gestiune a bazelor de date au fost clasificate icircn trei grupe mari icircn functie de tipul elementelor cu care lucreaza si a structurilor obtinute

a modelul retea ndash permite lucrul cu entitatii relatii binare de tipul 11 si 1N diagrama rezultata fiind un graf oarecare

b modelul arborescent (ierarhic) ndash permite lucrul cu entitati si relatii binare de tipul 11 si 1N iar diagrama este alcatuita dintr-o multime de arbori

c modelul relational ndash icircn 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 ndash relatie (ER)

Schema conceptuala a unei baze de date este o descriere de forma Nume_entitate=lista de atribute

Diagrama entitate ndash relatie Intre entitati se pot stabili relatii Aceste relatii se pot reprezenta prin Diagrama entitate ndash 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

32 Schema conceptuala propriu-zisa

9

10

Cap4Schema logica41 Notiuni generale

Schema logica descrie datele stocate sub aspectul modelului de date utilizat de SGBDPentru realizarea schemei logice a unei baze de date se porneşte de la schema conceptuală (modelul entitate ndash legătură) urmărindu-se conversia entităţilor şi a legăturilor icircn tabele relaţionaleRegulile de conversie ale entităţilor legăturilor şi atributelor sunt următoarele

Transformarea entităţilorRegulă generală entităţile se transformă icircn tabeleSubcazuri

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 straineConventie 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 putineEx a2) SOT 1(0) este_casatorit 1(0) SOTIE - cheia straina va fi plasata in tabelul cu linii mai putine

b) Relatiile M1 devin chei straine plasate in tabelul care se afla in partea de ldquomultirdquo 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 318

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 tabeleCazuria) Atributele simple ale unei entitati devin coloane in tabelul provenit din acea entitate b) Toate componentele unui atribut compus devin coloanec) 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) ndash Atributele simple ale unei relatii 1 1 sau M 1 d evin coloane ale tabelului care contine cheia straina- Fiecare componenta a unui atribut compus al unei relatii 11 sau M1 se va converti in mai multe coloane in tabelul care contine cheia straina

e) ndash Atributele simple ale unei relatii M M vor deveni coloane ale tabelului asociativFiecare componenta a unui atribut compus al unei relatii MM va deveni o coloana in tabelul asociativ creat

f) ndash 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

42Schema logica propriu-zisa

13

Cap 5Normalizarea bazelor de date

51Notiuni 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 icircn două sau mai

multe tabele păstracircnd informaţii (atribute) de legătură

FORMA NORMALA 1

FN1 O tabelă este icircn 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ă icircn tabele cu atribute elementare Fiecare

structură repetitivă generează (prin descompunere) o nouă tabelă iar atributele la nivel de grup

se icircnlătură rămacircnacircnd doar cele elementare

Algoritmul 1FN

Se icircnlocuiesc 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 icircn FN2 dacă şi numai dacă

- este icircn FN1

- orice atribut neprim este complet dependent funcţional de orice chei candidat a relaţiei

O tabelă icircn FN2 prezintă icircncă o serie de anomalii de actualizare datorită eventualelor

dependenţe tranzitive

Eliminarea dependenţelor incomplete se face prin descompunerea tabelei iniţiale icircn două

tabele ambele conţinacircnd 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 K1IgraveK un subset al lui K astfel incat dependenta K1 gX este

totala si se creează in nou tabel R1(K1X) 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 ndash 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 cacircnd toate acestea vor ajunge in

a doua forma normala

FORMA NORMALA 3

FN3 O tabelă este icircn FN3 dacă şi numai dacă

este icircn FN2

fiecare atribut neprim depinde icircn mod netranzitiv de cheia tabelei Icircntr-o tabelă T fie

ABC trei atribute cu A cheie Dacă B depinde de A (A 1048774 B) şi C depinde de B (B 1048774 C)

atunci C depinde de A icircn mod tranzitiv Eliminarea dependenţelor tranzitive se face prin

descompunerea tabelei iniţiale icircn două tabele ambele conţinacircnd atributul intermediar (B)

O tabelă icircn FN3 prezintă icircncă 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 icircnlă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 icircn FN4 dacă şi numai dacă este icircn FN3 şi nu conţine două sau mai

multe dependenţe multivaloare Icircntr-o tabelă T fie ABC trei atribute Icircn tabela T se menţine

dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei

perechi de date (AC) depinde numai de o valoare a lui A şi este independentă de valorile lui C

FORMA NORMALA 5

FN5 O tabelă este icircn FN5 dacă şi numai dacă este icircn FN4 şi fiecare dependenţă joncţiune

este generată printr-un candidat cheie al tabelei Icircn tabela T (ABC) se menţine dependenţa

joncţiune (AB AC) dacă şi numai dacă T menţine dependenţa multivaloare A --gtgt 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

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

32 Schema conceptuala propriu-zisa

9

10

Cap4Schema logica41 Notiuni generale

Schema logica descrie datele stocate sub aspectul modelului de date utilizat de SGBDPentru realizarea schemei logice a unei baze de date se porneşte de la schema conceptuală (modelul entitate ndash legătură) urmărindu-se conversia entităţilor şi a legăturilor icircn tabele relaţionaleRegulile de conversie ale entităţilor legăturilor şi atributelor sunt următoarele

Transformarea entităţilorRegulă generală entităţile se transformă icircn tabeleSubcazuri

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 straineConventie 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 putineEx a2) SOT 1(0) este_casatorit 1(0) SOTIE - cheia straina va fi plasata in tabelul cu linii mai putine

b) Relatiile M1 devin chei straine plasate in tabelul care se afla in partea de ldquomultirdquo 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 318

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 tabeleCazuria) Atributele simple ale unei entitati devin coloane in tabelul provenit din acea entitate b) Toate componentele unui atribut compus devin coloanec) 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) ndash Atributele simple ale unei relatii 1 1 sau M 1 d evin coloane ale tabelului care contine cheia straina- Fiecare componenta a unui atribut compus al unei relatii 11 sau M1 se va converti in mai multe coloane in tabelul care contine cheia straina

e) ndash Atributele simple ale unei relatii M M vor deveni coloane ale tabelului asociativFiecare componenta a unui atribut compus al unei relatii MM va deveni o coloana in tabelul asociativ creat

f) ndash 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

42Schema logica propriu-zisa

13

Cap 5Normalizarea bazelor de date

51Notiuni 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 icircn două sau mai

multe tabele păstracircnd informaţii (atribute) de legătură

FORMA NORMALA 1

FN1 O tabelă este icircn 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ă icircn tabele cu atribute elementare Fiecare

structură repetitivă generează (prin descompunere) o nouă tabelă iar atributele la nivel de grup

se icircnlătură rămacircnacircnd doar cele elementare

Algoritmul 1FN

Se icircnlocuiesc 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 icircn FN2 dacă şi numai dacă

- este icircn FN1

- orice atribut neprim este complet dependent funcţional de orice chei candidat a relaţiei

O tabelă icircn FN2 prezintă icircncă o serie de anomalii de actualizare datorită eventualelor

dependenţe tranzitive

Eliminarea dependenţelor incomplete se face prin descompunerea tabelei iniţiale icircn două

tabele ambele conţinacircnd 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 K1IgraveK un subset al lui K astfel incat dependenta K1 gX este

totala si se creează in nou tabel R1(K1X) 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 ndash 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 cacircnd toate acestea vor ajunge in

a doua forma normala

FORMA NORMALA 3

FN3 O tabelă este icircn FN3 dacă şi numai dacă

este icircn FN2

fiecare atribut neprim depinde icircn mod netranzitiv de cheia tabelei Icircntr-o tabelă T fie

ABC trei atribute cu A cheie Dacă B depinde de A (A 1048774 B) şi C depinde de B (B 1048774 C)

atunci C depinde de A icircn mod tranzitiv Eliminarea dependenţelor tranzitive se face prin

descompunerea tabelei iniţiale icircn două tabele ambele conţinacircnd atributul intermediar (B)

O tabelă icircn FN3 prezintă icircncă 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 icircnlă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 icircn FN4 dacă şi numai dacă este icircn FN3 şi nu conţine două sau mai

multe dependenţe multivaloare Icircntr-o tabelă T fie ABC trei atribute Icircn tabela T se menţine

dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei

perechi de date (AC) depinde numai de o valoare a lui A şi este independentă de valorile lui C

FORMA NORMALA 5

FN5 O tabelă este icircn FN5 dacă şi numai dacă este icircn FN4 şi fiecare dependenţă joncţiune

este generată printr-un candidat cheie al tabelei Icircn tabela T (ABC) se menţine dependenţa

joncţiune (AB AC) dacă şi numai dacă T menţine dependenţa multivaloare A --gtgt 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

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

10

Cap4Schema logica41 Notiuni generale

Schema logica descrie datele stocate sub aspectul modelului de date utilizat de SGBDPentru realizarea schemei logice a unei baze de date se porneşte de la schema conceptuală (modelul entitate ndash legătură) urmărindu-se conversia entităţilor şi a legăturilor icircn tabele relaţionaleRegulile de conversie ale entităţilor legăturilor şi atributelor sunt următoarele

Transformarea entităţilorRegulă generală entităţile se transformă icircn tabeleSubcazuri

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 straineConventie 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 putineEx a2) SOT 1(0) este_casatorit 1(0) SOTIE - cheia straina va fi plasata in tabelul cu linii mai putine

b) Relatiile M1 devin chei straine plasate in tabelul care se afla in partea de ldquomultirdquo 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 318

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 tabeleCazuria) Atributele simple ale unei entitati devin coloane in tabelul provenit din acea entitate b) Toate componentele unui atribut compus devin coloanec) 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) ndash Atributele simple ale unei relatii 1 1 sau M 1 d evin coloane ale tabelului care contine cheia straina- Fiecare componenta a unui atribut compus al unei relatii 11 sau M1 se va converti in mai multe coloane in tabelul care contine cheia straina

e) ndash Atributele simple ale unei relatii M M vor deveni coloane ale tabelului asociativFiecare componenta a unui atribut compus al unei relatii MM va deveni o coloana in tabelul asociativ creat

f) ndash 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

42Schema logica propriu-zisa

13

Cap 5Normalizarea bazelor de date

51Notiuni 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 icircn două sau mai

multe tabele păstracircnd informaţii (atribute) de legătură

FORMA NORMALA 1

FN1 O tabelă este icircn 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ă icircn tabele cu atribute elementare Fiecare

structură repetitivă generează (prin descompunere) o nouă tabelă iar atributele la nivel de grup

se icircnlătură rămacircnacircnd doar cele elementare

Algoritmul 1FN

Se icircnlocuiesc 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 icircn FN2 dacă şi numai dacă

- este icircn FN1

- orice atribut neprim este complet dependent funcţional de orice chei candidat a relaţiei

O tabelă icircn FN2 prezintă icircncă o serie de anomalii de actualizare datorită eventualelor

dependenţe tranzitive

Eliminarea dependenţelor incomplete se face prin descompunerea tabelei iniţiale icircn două

tabele ambele conţinacircnd 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 K1IgraveK un subset al lui K astfel incat dependenta K1 gX este

totala si se creează in nou tabel R1(K1X) 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 ndash 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 cacircnd toate acestea vor ajunge in

a doua forma normala

FORMA NORMALA 3

FN3 O tabelă este icircn FN3 dacă şi numai dacă

este icircn FN2

fiecare atribut neprim depinde icircn mod netranzitiv de cheia tabelei Icircntr-o tabelă T fie

ABC trei atribute cu A cheie Dacă B depinde de A (A 1048774 B) şi C depinde de B (B 1048774 C)

atunci C depinde de A icircn mod tranzitiv Eliminarea dependenţelor tranzitive se face prin

descompunerea tabelei iniţiale icircn două tabele ambele conţinacircnd atributul intermediar (B)

O tabelă icircn FN3 prezintă icircncă 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 icircnlă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 icircn FN4 dacă şi numai dacă este icircn FN3 şi nu conţine două sau mai

multe dependenţe multivaloare Icircntr-o tabelă T fie ABC trei atribute Icircn tabela T se menţine

dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei

perechi de date (AC) depinde numai de o valoare a lui A şi este independentă de valorile lui C

FORMA NORMALA 5

FN5 O tabelă este icircn FN5 dacă şi numai dacă este icircn FN4 şi fiecare dependenţă joncţiune

este generată printr-un candidat cheie al tabelei Icircn tabela T (ABC) se menţine dependenţa

joncţiune (AB AC) dacă şi numai dacă T menţine dependenţa multivaloare A --gtgt 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

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Cap4Schema logica41 Notiuni generale

Schema logica descrie datele stocate sub aspectul modelului de date utilizat de SGBDPentru realizarea schemei logice a unei baze de date se porneşte de la schema conceptuală (modelul entitate ndash legătură) urmărindu-se conversia entităţilor şi a legăturilor icircn tabele relaţionaleRegulile de conversie ale entităţilor legăturilor şi atributelor sunt următoarele

Transformarea entităţilorRegulă generală entităţile se transformă icircn tabeleSubcazuri

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 straineConventie 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 putineEx a2) SOT 1(0) este_casatorit 1(0) SOTIE - cheia straina va fi plasata in tabelul cu linii mai putine

b) Relatiile M1 devin chei straine plasate in tabelul care se afla in partea de ldquomultirdquo 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 318

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 tabeleCazuria) Atributele simple ale unei entitati devin coloane in tabelul provenit din acea entitate b) Toate componentele unui atribut compus devin coloanec) 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) ndash Atributele simple ale unei relatii 1 1 sau M 1 d evin coloane ale tabelului care contine cheia straina- Fiecare componenta a unui atribut compus al unei relatii 11 sau M1 se va converti in mai multe coloane in tabelul care contine cheia straina

e) ndash Atributele simple ale unei relatii M M vor deveni coloane ale tabelului asociativFiecare componenta a unui atribut compus al unei relatii MM va deveni o coloana in tabelul asociativ creat

f) ndash 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

42Schema logica propriu-zisa

13

Cap 5Normalizarea bazelor de date

51Notiuni 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 icircn două sau mai

multe tabele păstracircnd informaţii (atribute) de legătură

FORMA NORMALA 1

FN1 O tabelă este icircn 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ă icircn tabele cu atribute elementare Fiecare

structură repetitivă generează (prin descompunere) o nouă tabelă iar atributele la nivel de grup

se icircnlătură rămacircnacircnd doar cele elementare

Algoritmul 1FN

Se icircnlocuiesc 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 icircn FN2 dacă şi numai dacă

- este icircn FN1

- orice atribut neprim este complet dependent funcţional de orice chei candidat a relaţiei

O tabelă icircn FN2 prezintă icircncă o serie de anomalii de actualizare datorită eventualelor

dependenţe tranzitive

Eliminarea dependenţelor incomplete se face prin descompunerea tabelei iniţiale icircn două

tabele ambele conţinacircnd 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 K1IgraveK un subset al lui K astfel incat dependenta K1 gX este

totala si se creează in nou tabel R1(K1X) 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 ndash 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 cacircnd toate acestea vor ajunge in

a doua forma normala

FORMA NORMALA 3

FN3 O tabelă este icircn FN3 dacă şi numai dacă

este icircn FN2

fiecare atribut neprim depinde icircn mod netranzitiv de cheia tabelei Icircntr-o tabelă T fie

ABC trei atribute cu A cheie Dacă B depinde de A (A 1048774 B) şi C depinde de B (B 1048774 C)

atunci C depinde de A icircn mod tranzitiv Eliminarea dependenţelor tranzitive se face prin

descompunerea tabelei iniţiale icircn două tabele ambele conţinacircnd atributul intermediar (B)

O tabelă icircn FN3 prezintă icircncă 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 icircnlă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 icircn FN4 dacă şi numai dacă este icircn FN3 şi nu conţine două sau mai

multe dependenţe multivaloare Icircntr-o tabelă T fie ABC trei atribute Icircn tabela T se menţine

dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei

perechi de date (AC) depinde numai de o valoare a lui A şi este independentă de valorile lui C

FORMA NORMALA 5

FN5 O tabelă este icircn FN5 dacă şi numai dacă este icircn FN4 şi fiecare dependenţă joncţiune

este generată printr-un candidat cheie al tabelei Icircn tabela T (ABC) se menţine dependenţa

joncţiune (AB AC) dacă şi numai dacă T menţine dependenţa multivaloare A --gtgt 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

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

B2) M(0) 1(0) Fig 318

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 tabeleCazuria) Atributele simple ale unei entitati devin coloane in tabelul provenit din acea entitate b) Toate componentele unui atribut compus devin coloanec) 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) ndash Atributele simple ale unei relatii 1 1 sau M 1 d evin coloane ale tabelului care contine cheia straina- Fiecare componenta a unui atribut compus al unei relatii 11 sau M1 se va converti in mai multe coloane in tabelul care contine cheia straina

e) ndash Atributele simple ale unei relatii M M vor deveni coloane ale tabelului asociativFiecare componenta a unui atribut compus al unei relatii MM va deveni o coloana in tabelul asociativ creat

f) ndash 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

42Schema logica propriu-zisa

13

Cap 5Normalizarea bazelor de date

51Notiuni 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 icircn două sau mai

multe tabele păstracircnd informaţii (atribute) de legătură

FORMA NORMALA 1

FN1 O tabelă este icircn 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ă icircn tabele cu atribute elementare Fiecare

structură repetitivă generează (prin descompunere) o nouă tabelă iar atributele la nivel de grup

se icircnlătură rămacircnacircnd doar cele elementare

Algoritmul 1FN

Se icircnlocuiesc 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 icircn FN2 dacă şi numai dacă

- este icircn FN1

- orice atribut neprim este complet dependent funcţional de orice chei candidat a relaţiei

O tabelă icircn FN2 prezintă icircncă o serie de anomalii de actualizare datorită eventualelor

dependenţe tranzitive

Eliminarea dependenţelor incomplete se face prin descompunerea tabelei iniţiale icircn două

tabele ambele conţinacircnd 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 K1IgraveK un subset al lui K astfel incat dependenta K1 gX este

totala si se creează in nou tabel R1(K1X) 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 ndash 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 cacircnd toate acestea vor ajunge in

a doua forma normala

FORMA NORMALA 3

FN3 O tabelă este icircn FN3 dacă şi numai dacă

este icircn FN2

fiecare atribut neprim depinde icircn mod netranzitiv de cheia tabelei Icircntr-o tabelă T fie

ABC trei atribute cu A cheie Dacă B depinde de A (A 1048774 B) şi C depinde de B (B 1048774 C)

atunci C depinde de A icircn mod tranzitiv Eliminarea dependenţelor tranzitive se face prin

descompunerea tabelei iniţiale icircn două tabele ambele conţinacircnd atributul intermediar (B)

O tabelă icircn FN3 prezintă icircncă 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 icircnlă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 icircn FN4 dacă şi numai dacă este icircn FN3 şi nu conţine două sau mai

multe dependenţe multivaloare Icircntr-o tabelă T fie ABC trei atribute Icircn tabela T se menţine

dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei

perechi de date (AC) depinde numai de o valoare a lui A şi este independentă de valorile lui C

FORMA NORMALA 5

FN5 O tabelă este icircn FN5 dacă şi numai dacă este icircn FN4 şi fiecare dependenţă joncţiune

este generată printr-un candidat cheie al tabelei Icircn tabela T (ABC) se menţine dependenţa

joncţiune (AB AC) dacă şi numai dacă T menţine dependenţa multivaloare A --gtgt 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

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

42Schema logica propriu-zisa

13

Cap 5Normalizarea bazelor de date

51Notiuni 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 icircn două sau mai

multe tabele păstracircnd informaţii (atribute) de legătură

FORMA NORMALA 1

FN1 O tabelă este icircn 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ă icircn tabele cu atribute elementare Fiecare

structură repetitivă generează (prin descompunere) o nouă tabelă iar atributele la nivel de grup

se icircnlătură rămacircnacircnd doar cele elementare

Algoritmul 1FN

Se icircnlocuiesc 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 icircn FN2 dacă şi numai dacă

- este icircn FN1

- orice atribut neprim este complet dependent funcţional de orice chei candidat a relaţiei

O tabelă icircn FN2 prezintă icircncă o serie de anomalii de actualizare datorită eventualelor

dependenţe tranzitive

Eliminarea dependenţelor incomplete se face prin descompunerea tabelei iniţiale icircn două

tabele ambele conţinacircnd 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 K1IgraveK un subset al lui K astfel incat dependenta K1 gX este

totala si se creează in nou tabel R1(K1X) 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 ndash 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 cacircnd toate acestea vor ajunge in

a doua forma normala

FORMA NORMALA 3

FN3 O tabelă este icircn FN3 dacă şi numai dacă

este icircn FN2

fiecare atribut neprim depinde icircn mod netranzitiv de cheia tabelei Icircntr-o tabelă T fie

ABC trei atribute cu A cheie Dacă B depinde de A (A 1048774 B) şi C depinde de B (B 1048774 C)

atunci C depinde de A icircn mod tranzitiv Eliminarea dependenţelor tranzitive se face prin

descompunerea tabelei iniţiale icircn două tabele ambele conţinacircnd atributul intermediar (B)

O tabelă icircn FN3 prezintă icircncă 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 icircnlă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 icircn FN4 dacă şi numai dacă este icircn FN3 şi nu conţine două sau mai

multe dependenţe multivaloare Icircntr-o tabelă T fie ABC trei atribute Icircn tabela T se menţine

dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei

perechi de date (AC) depinde numai de o valoare a lui A şi este independentă de valorile lui C

FORMA NORMALA 5

FN5 O tabelă este icircn FN5 dacă şi numai dacă este icircn FN4 şi fiecare dependenţă joncţiune

este generată printr-un candidat cheie al tabelei Icircn tabela T (ABC) se menţine dependenţa

joncţiune (AB AC) dacă şi numai dacă T menţine dependenţa multivaloare A --gtgt 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

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Cap 5Normalizarea bazelor de date

51Notiuni 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 icircn două sau mai

multe tabele păstracircnd informaţii (atribute) de legătură

FORMA NORMALA 1

FN1 O tabelă este icircn 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ă icircn tabele cu atribute elementare Fiecare

structură repetitivă generează (prin descompunere) o nouă tabelă iar atributele la nivel de grup

se icircnlătură rămacircnacircnd doar cele elementare

Algoritmul 1FN

Se icircnlocuiesc 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 icircn FN2 dacă şi numai dacă

- este icircn FN1

- orice atribut neprim este complet dependent funcţional de orice chei candidat a relaţiei

O tabelă icircn FN2 prezintă icircncă o serie de anomalii de actualizare datorită eventualelor

dependenţe tranzitive

Eliminarea dependenţelor incomplete se face prin descompunerea tabelei iniţiale icircn două

tabele ambele conţinacircnd 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 K1IgraveK un subset al lui K astfel incat dependenta K1 gX este

totala si se creează in nou tabel R1(K1X) 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 ndash 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 cacircnd toate acestea vor ajunge in

a doua forma normala

FORMA NORMALA 3

FN3 O tabelă este icircn FN3 dacă şi numai dacă

este icircn FN2

fiecare atribut neprim depinde icircn mod netranzitiv de cheia tabelei Icircntr-o tabelă T fie

ABC trei atribute cu A cheie Dacă B depinde de A (A 1048774 B) şi C depinde de B (B 1048774 C)

atunci C depinde de A icircn mod tranzitiv Eliminarea dependenţelor tranzitive se face prin

descompunerea tabelei iniţiale icircn două tabele ambele conţinacircnd atributul intermediar (B)

O tabelă icircn FN3 prezintă icircncă 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 icircnlă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 icircn FN4 dacă şi numai dacă este icircn FN3 şi nu conţine două sau mai

multe dependenţe multivaloare Icircntr-o tabelă T fie ABC trei atribute Icircn tabela T se menţine

dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei

perechi de date (AC) depinde numai de o valoare a lui A şi este independentă de valorile lui C

FORMA NORMALA 5

FN5 O tabelă este icircn FN5 dacă şi numai dacă este icircn FN4 şi fiecare dependenţă joncţiune

este generată printr-un candidat cheie al tabelei Icircn tabela T (ABC) se menţine dependenţa

joncţiune (AB AC) dacă şi numai dacă T menţine dependenţa multivaloare A --gtgt 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

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

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 icircn FN2 dacă şi numai dacă

- este icircn FN1

- orice atribut neprim este complet dependent funcţional de orice chei candidat a relaţiei

O tabelă icircn FN2 prezintă icircncă o serie de anomalii de actualizare datorită eventualelor

dependenţe tranzitive

Eliminarea dependenţelor incomplete se face prin descompunerea tabelei iniţiale icircn două

tabele ambele conţinacircnd 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 K1IgraveK un subset al lui K astfel incat dependenta K1 gX este

totala si se creează in nou tabel R1(K1X) 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 ndash 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 cacircnd toate acestea vor ajunge in

a doua forma normala

FORMA NORMALA 3

FN3 O tabelă este icircn FN3 dacă şi numai dacă

este icircn FN2

fiecare atribut neprim depinde icircn mod netranzitiv de cheia tabelei Icircntr-o tabelă T fie

ABC trei atribute cu A cheie Dacă B depinde de A (A 1048774 B) şi C depinde de B (B 1048774 C)

atunci C depinde de A icircn mod tranzitiv Eliminarea dependenţelor tranzitive se face prin

descompunerea tabelei iniţiale icircn două tabele ambele conţinacircnd atributul intermediar (B)

O tabelă icircn FN3 prezintă icircncă 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 icircnlă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 icircn FN4 dacă şi numai dacă este icircn FN3 şi nu conţine două sau mai

multe dependenţe multivaloare Icircntr-o tabelă T fie ABC trei atribute Icircn tabela T se menţine

dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei

perechi de date (AC) depinde numai de o valoare a lui A şi este independentă de valorile lui C

FORMA NORMALA 5

FN5 O tabelă este icircn FN5 dacă şi numai dacă este icircn FN4 şi fiecare dependenţă joncţiune

este generată printr-un candidat cheie al tabelei Icircn tabela T (ABC) se menţine dependenţa

joncţiune (AB AC) dacă şi numai dacă T menţine dependenţa multivaloare A --gtgt 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

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Algoritmul se repeta pentru toate relaţiile nou create pana cacircnd toate acestea vor ajunge in

a doua forma normala

FORMA NORMALA 3

FN3 O tabelă este icircn FN3 dacă şi numai dacă

este icircn FN2

fiecare atribut neprim depinde icircn mod netranzitiv de cheia tabelei Icircntr-o tabelă T fie

ABC trei atribute cu A cheie Dacă B depinde de A (A 1048774 B) şi C depinde de B (B 1048774 C)

atunci C depinde de A icircn mod tranzitiv Eliminarea dependenţelor tranzitive se face prin

descompunerea tabelei iniţiale icircn două tabele ambele conţinacircnd atributul intermediar (B)

O tabelă icircn FN3 prezintă icircncă 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 icircnlă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 icircn FN4 dacă şi numai dacă este icircn FN3 şi nu conţine două sau mai

multe dependenţe multivaloare Icircntr-o tabelă T fie ABC trei atribute Icircn tabela T se menţine

dependenţa multivaloare A dacă şi numai dacă mulţimea valorilor lui B ce corespunde unei

perechi de date (AC) depinde numai de o valoare a lui A şi este independentă de valorile lui C

FORMA NORMALA 5

FN5 O tabelă este icircn FN5 dacă şi numai dacă este icircn FN4 şi fiecare dependenţă joncţiune

este generată printr-un candidat cheie al tabelei Icircn tabela T (ABC) se menţine dependenţa

joncţiune (AB AC) dacă şi numai dacă T menţine dependenţa multivaloare A --gtgt 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

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Dependenţa multivaloare este caz particular al dependenţei joncţiune Dependenţa

funcţională este caz particular al dependenţei multivaloare

52 Normalizarea bazei de date

Deoarece tabelul tvpresa prezenta redundant e in date am normalizat aceast tabelAstfel am obtin tabelul transmisie alaturi de tabelul ramas tvpresa 1

transmisie

numetv transmisiune

ProSieben LIVE

EUROSPORT LIVE

EUROSPORT 2 INREGISTRATA

Sportro INREGISTRATA

tvpresa 1

Id_tv Nume_tv Nume_repr specializare Tip_emisiune

14 SportRo 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

17

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

nsport

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

18

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

1 Laura Biathlon Ski Complex 20 km individual masculine

15 km individual feminine

10 km sprint masculine

75 km sprint feminine

2 Bolshoy Ice Dome Echipaj dublu

Echipaj patru

3 Shayba Arena Gundersen individual

Echipa LH

Sprint 75 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

19

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Pursuit pe echipe

9 RusSki Gorki Jumping Center Individual masculin

Individual feminin

Dublu

10 Rosa Khutor Extreme Park NH individual

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

20

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

PSG masculin

PSG feminin

Acelasi algoritm am aplicat si pentru tabelul sportivi obtinand tabelul nsportivi cu determinantul idalaturi 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

21

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

971 Jansvelt Tommasen

991 Svetlana Evora

955 Chipher Gheorge

833 Luca Roxana

144 Manor Jimmy

322 Mateus Jan

290 Katalin Kristo

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 arenaant

proba nraur

nrag

nrbrz

activitati

412

Romania Vulpe Alexandru

Bolshoy Ice Dome

Biatlon 0 0 0 FilmHokeySki

231

Romania George Grosu

Iceberg Skating Palace

Combinatia Nordica

0 0 0 TetruMuzeu

341

Romania Ion Matei Iceberg Skating

Sanie 0 0 0 FotbalSkiTeatru

22

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Palace

521

Germania

Bjorn Heinrich

Palatul Soci

Patinaj Artistic

0 1 0 MuzeuTeatruPatinaj Artistic

987

Germania

Bjorn Heinrich

Bolshoy Ice Dome

Patinaj Short-Track

1 4 0 PatinajSki

453

Germania

Ighensen Lothar

Iceberg Skating Palace

Patinaj Artistic

3 0 0 FilmTirSchi Nautic

938

Olanda Crevensen Osling

Bolshoy Ice Dome

Sarituri cu Schiurile

1 0 2 PescuitTeatru Muzeu

526

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 1 3 PatinajSki

643

SUA Grey Fox Iceberg Skating Palace

Sarituri cu Schiurile

0 3 0 Teatru

394

SUA Jhon Smith Rosa Khutor Plateau Olympic Village

Sanie 3 0 1 Muzeu

840

Franta Piere Chamin

Iceberg Skating Palace

Biatlon 1 0 1 MuzeeSki Parasutism

395

Marea Britanie

Dunn Philips

Rosa Khutor Plateau Olympi

Biatlon 0 1 0 SkiCalatorii

23

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

c Village

139

Romania George Grosu

Rosa Khutor Plateau Olympic Village

Biatlon 0 1 1 Calatorii Pirotehnist

323

Elvetia Oscar de Trausenburg

Rosa Khutor Plateau Olympic Village

Combinatia Nordica

1 0 2 SkiJocuri de noroc

810

Rusia Piotr Viga Iceberg Skating Palace

Combinatia Nordica

0 1 0 FotbalSki

134

Elvetia Oscar de Trausenburg

Shayba Arena

Combinatia Nordica

0 0 0 SkiInotFitness

971

Austria Advensen Soci Arena

Patinaj Artistic

1 1 0 CalatoriiMuzee Sport

991

Rusia Piotr Viga Iceberg Skating Palace

Patinaj Artistic

1 0 0 CititulCalatoriile

955

Romania George Grosu

Iceberg Skating Palace

Patinaj Artistic

0 1 1 PescuitulRafting

833

Romania Ion Matei PSoci Arena

Patinaj Artistic

0 1 0 ModaCalatorii Pescuitul

144

SUA Jhon Smith RusSki Gorki

Patinaj Short-Track

3 1 1 Curse de caiJocuri de norocCalatorii

32 Germani Ighensen RusSki Patinaj 3 0 1 EscaladatulFotbal

24

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

2 a Lothar Gorki Short-Track

290

Romania Ion Matei Rosa Khutor Plateau Olympic Village

Patinaj Short-Track

1 0 0 PescuitulFotbalSki

562

Austria Miroslav Berger

Iceberg Skating Palace

Patinaj Short-Track

0 2 1 SkiPatinajJocuri de noroc

593

Spania Diego Rodriguez

Shayba Arena

Sanie 0 0 2 CalatoriiMuzeu

Pescuit

714

Rusia Gbri Cercenco

RusSki Gorki

Sanie 0 3 0 PatinajSkiJocuri de noroc

775

Ungaria Ishtvan Otonetz

Iceberg Skating Palace

Sanie 0 0 0 CalatoriiMuzeeSki nautic

434

Romania George Grosu

Shayba Arena

Sarituri cu schiurile

0 0 1 EscaladariSki

256

Ucraina Alexander

Cech

Iceberg Skating Palace

Sarituri cu schiurile

0 0 0 SkiPescuitJocuri de noroc

512

Croatia Dalucenco Mauser

RusSki Gorki

Sarituri cu schiurile

0 0 3 CalatoriiAltele

Cap6Denormalizarea bazelor de date

61Notiuni generale

25

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

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 bull selectarea proceselor dominante pe baza frecventei volumului prioritatii bull definirea unor extensii ale tabelelor existente (atribute sau chiar tabele noi) care sa amelioreze performantele de interogare a bazei bull evaluarea costului total al interogarii stocarii şi actualizarii bull evaluarea efectelor colaterale cum ar fi riscul pierderii integritatii datelor

Probabil cel mai des invocat motiv pentru denormalizare este timpul necesar efectuarii jonctiunilor icircntre tabelele fragmentate rezultate icircn urma normalizarii Daca numarul tabelelor este mare numarul de rapoarteinformatii solicitate de utilizatori este uriaş şi 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 icircn tabele diferite astfel icircncacirct numarul jonctiunilor necesare obtinerii informatiilor frecvente sa fie cacirct mai mic cu putinta Prin urmare uneori deviatiile de la o buna normalizare par logice şi practice Chis Date sintetizeaza foarte bine argumentul icircn trei parti al denormalizatorilor 1 Normalizarea deplina icircnseamna multe relatii separate logic 2 Mai multe relatii logic separate icircnseamna mai multe fişiere de stocare separate fizic 3 Mai multe fişiere de stocare separate fizic icircnseamna un mai mare volum de operatii de intrareieşire deci consum de resurse Exista cacircteva 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 atacirct individual cacirct la nivel de set (grup) iii interogarilerapoarte reclama calcule aplicabile multor atribute aflate icircn 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 icircntre gradul de folosire icircn interogari a unor atribute fata de altele Criteriile care sa prezinte icircn detaliu cum anume trebuie facuta denormalizarea sunt structurate in trei linii directoare I identificarea aplicatiilor-program care contin un numar excesiv de jonctiuni desemnacircnd drept excesive cazurile icircn 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 icircn sine icircntrucacirct aplicarea lor trebuie raportata permanent la situatia efectiva bdquodin terenrdquo

26

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Denormalizarea are un cost tradus de cele mai multe ori icircn pierderea flexibilitatii diminuarea scalabilitatii performante mai slabe ale aplicatieibazei 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 icircn denormalizare 1Date duplicate (copiii integrale sau partiale ale unor atribute sau grupuri de atribute) 2Date derivatecalculate 3Chei surogate 4Supra-normalizare - partitionaresegmentare pe vertical ruperea unei relatii icircn doua sau mai multe 5Partitionaresegmentare pe orizontal linii diferite dintr-o relaie sunt stocate icircn tabele diferite 6Jonctiuni stocate ndash jonctionarea a doua sau mai multe tabele şi stocarea rezultatului icircntr-o tabela de-sine-statatoare 7Grupuri de date repetitive (date de tip vector)

Modalitati de denormalizare aplicabile fiecarei forme normale22 1NF 2NF 3NF cu cacircteva sugestii pentru formele normale bdquomai icircnalterdquo Mullins recomanda folosirea icircn cadrul denormalizarii a urmatoarelor artificii bull tabele pre-jonctionate bull tabele-raport construite icircn functie de rapoartele critice ale aplicatiei bull tabele-oglinda mai ales icircn mediile cu acces simultan al unui mare numar de utilizatori bull tabele partitionate icircn functie de grupurile de utilizatori bull tabele combinate pentru consolidarea legaturilor unu la mai multi icircntr-o singura tabela bull date copiate (duplicate) bull grupuri repetitive bull date derivate bull tabele de marire a vitezei recomandabile mai ales icircn cazul ierarhiilor

62 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 informatiiAcest process este echivalent interogarii de jonctiune Join Left dintre tabelul clasament_puncte si tabelul sportiviAstfel creste performanta performanta si simplifica programul de simplificare a datelor

ids puncte

proba tara nume prenume

antrenor arenaant

nraur

nrarg

nrbrz

activitati

256 3 Sarituri cu Schiuril

Ucraina

Mihailovici

Petrov Alexander

Rosa Khutor

0 0 0 SkiPescuit Jocuri de noroc

27

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

e Cech Plateau Olympic Village

434 6 Sarituri cu Schiurile

Romania

Galiceanu

Mihai George Grosu

RusSki Gorki

0 0 1 Escaladari Ski

453 7 Patinaj Artistic

Germania

Odolberg

Klaus Ighensen Lothar

Shayba Arena

3 0 2 FilmTir Ski Nautic

512 10 Sarituri cu Schiurile

Croatia

Prushot

Dadanov

Daluncenco Mauser

Bolshoy Ice Dome

0 0 3 Calatorii Altele

521 8 Patinaj Artistic

Germania

Herbert

Gerehard

Bjorn Heinrich

RusSki Gorki

0 1 0 MuzeuTeatru Patinaj Artistic

643 9 Sarituri cu Schiurile

SUA

Logan Jhonny

Grey Fox

RusSki Gorki

0 3 1 Teatru

833 4 Patinaj Artistic

Romania

Luca Roxana

Ion Matei

Bolshoy Ice Dome

0 1 1 ModaCalatorii Pescuitul

938 10 Sarituri cu Schiurile

Olanda

Matteus

Lahm Crevensen Oslig

Bolshoy Ice Dome

1 0 3 PescuitTeatru Muzeu

955 10 Patinaj Artistic

Romania

Chipher

Gheorge

George Grosu

RusSki Gorki

0 1 1 Pescuitul Rafting

28

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

991 8 Patinaj Artistic

Rusia

Svetlana

Evora Piotr Viga

Bolshoy Ice Dome

1 0 0 Cititul Calatoriile

Cap7 Sistemul de gestiune MySQL71Notiuni generale

MySQL este un server SQL pentru baze de date foarte robust rapid multi-utilizator multi-threadUna 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 sarcinaCrearea tabelelorCREATE TABLECREATE TABLE nume_tabel (nume_coloana tip_data [DEFAULT expresie]hellip)

[PCTFREE icircntreg][PCTUSED icircntreg][TABLESPACE spaţiu tabel][STORAGE parametrii_de_stocare]

o DEFAULT ndash desemnează o valoare implicita pentru coloana o TABLESPACE ndash specifica spaţiul tabel in care va fi stocat tabelulPCTFREEPCTUSED ndash specifica gradul de utilizare al blocurilorCrearea 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 admisenot 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 campuriCele 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) DescriereTINYINT[(M)] -127128 1 Foarte mic integers or 0255SMALLINT[(M)] -3276832767 2 Intregi mici or 065535MEDIUMINT[(M)] -8388608 3 Marime medie 8388607 or 016777215

29

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

INT[(M)] -231231-1 4 Intregi normali or 0232-1INTEGER[(M)] Sinonim cu INTBIGINT[(M)] -263263-1 8 Intregi mari or 0264-1Tipuri de date flotanteTip Interval (Bytes) DescriereFLOAT(precision) depinde Precizie simpla sau precizie dublaFLOAT[(MD)] plusmn1175494351E-38 4 Precizie simpla plusmn3402823466E+38DOUBLE[(MD)] plusmn17976931348623157E 8 Precizie dubla +308 plusmn22250738585072014E -308DOUBLEPRECISION[(MD)] la felREAL[(MD)] la felDECIMAL[(M[D])] variaza M+2 Float stocat ca charNUMERIC[(MD)] la fel Sinonim cu DECIMALTipurile pentru data si timpTip Interval DescriereDATE 1000-01-01 O data(YYYY-MM-DD) 9999-12-31TIME -8385959 Un time(HHMMSS) 8385959DATETIME 1000-01-01 Data si timp(YYYY-MM-DDHHMMSS) 000000 9999-12-31 235959TIMESTAMP 1970-01-01 Un timestamp folosit in tranzactii[(M)] 000000YEAR[(2|4)] 70ndash69 Un an in format cu 2 sau 4 cifre You can specify 2 or 4 digit format 1901ndash2155TIMESTAMP-uriType Specified DisplayTIMESTAMP YYYYMMDDHHMMSSTIMESTAMP(14) YYYYMMDDHHMMSSTIMESTAMP(12) YYMMDDHHMMSSTIMESTAMP(10) YYMMDDHHMMTIMESTAMP(8) YYYYMMDDTIMESTAMP(6) YYMMDDTIMESTAMP(4) YYMMTIMESTAMP(2) YYTipuri 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 lungidate binare si sirurile SET si ENUM (valori predefinte)Tipuri pentru siruri de caractere regulare

30

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Tip Interval[NATIONAL] 1 to 255CHAR(M) [BINARY][NATIONAL] 1 to 255VARCHAR(M)[BINARY] Tipuri TEXT si BLOB

Lungime maximaTip (Caractere)TINYBLOB 28-1 (255)TINYTEXT 28-1BLOB 216-1 (65535)TEXT 216-1MEDIUMBLOB 224-1 (16777215)MEDIUMTEXT 224-1LONGBLOB 232-1 (4294967295)LONGTEXT 232-1 Tipuri SET si ENUMTip Nr valori in set DescriereENUM(lsquovaloare1rsquo 65535 O singura valoare din lista sau NULL lsquovaloare2rsquo)SET(lsquovaloare1rsquo 64 Un set dintre valorile din lista lsquovaloare2rsquo)Exemplucreate table _tabela1 (id int auto_increment primary keyanswer enum (lsquodarsquo lsquonursquo) default lsquonursquo)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 NULLDescrierea tablelelor Permite afisarea detaliilor despre campurile tabelei Inserarea inregistrarilor in tabeleComanda SQL INSERT inseareaza informatii in tabeleINSERT INTO tabel[(coloana1 coloana2 hellip)] VALUES (valoare1 valoare2 hellip)Actualizarea datelor din tabeleSe face cu comanda SQL UPDATEUPDATE nume_tabela SET nume_camp1 = val1nume_camp2 = val2nume_camp3 = val3 [WHERE conditii]Extragerea informatiilor dorite din tabelaInformatiile 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

31

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Comparatiile MySQL sunt case insensitive ceea ca inseamna ca john John sau JoHn ar merge in exemplul de mai sus Operatori de comparatieOperator Nume Exemplu= eqalitate customerid = 3gt mai mare amountgt6000

lt mai mic amountlt6000gt= mai mic sau egal amountgt=6000lt= mai mic sau egal amountlt=6000= sau diferit quantity = 0ltgt IS NOT valoare nenulaNULLIS NULL valoare nulaBETWEEN interval de valori amount between 0 and 6000IN inclus intr-un set predefinit city in (ldquoCarltonrdquo ldquoMoerdquo)NOT IN neinclus intr-un set predefinit city not in (ldquoCarltonrdquoldquoMoerdquo)LIKE cautare pattern name like (ldquoFred rdquo)NOT LIKE cautare patternREGEXP expresie regular name regexpConditiile SQL pot contine si operatorii logici AND OR si NOTSortarea 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 SELECTEX Sortarea ascendenta a inregistrarilor in functie de impozit pe salariu

Mysqlgt SELECT nume salariu038 FROM profesor ORDER BY salariu038NUME SALARIU038--------------- --------------------VOINEA 456STANESCU 456IONESCU 570ALBU 836MARIN 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

Mysqlgt SELECT grad prima FROM professor ORDER BY grad prima DESCGRAD PRIMA----------------------------ASISTASIST 600CONF 150

32

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

LECT 2500PROFPROF 3500

Forma generala a clauzei LIMIT esteSELECT () from tabela LIMIT nr_rand_incepere nr_inreg_extraseFolosirea clauzei DISTINCT permite listarea doar a valorilor distincte din baza de date pentru fiecare camp in parteFunctii agregatMIN() Valoare minimaMAX() Valoare maximaSUM() Suma valorilorAVG() Media aritmeticaCOUNT() Numarul inregistrarilor extraseDenumirea campurilor in SELECT MySQL permite sa denumesti campurile extrase cu termeni mai descriptivi pentru datele extraseClauza GROUP BY permite gruparea informatiilor similare Deci pentru a lista toate functiile unice din tabela

Mysqlgt SELECT grad MAX(salariu) FROM professor WHERE prima IS NOT NULL GROUP BY grad

GRAD MAX (SALARIU)-------- --------------------ASIST 1200CONF 2800LECT 2200PROF 3000

Clauza HAVING permite specificare unei conditii pentru gruparea inregistrarilorMysqlgt SELECT grad AVG(salariu )FROM profesor GROUP BY grad HAVING AVG(salariu)gt2000

GRAD AVG(SALARIU)-------- --------------------CONF 2800LECT 2200PROF 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 MySQLProdus cartezian Full Join Cross joinToate combinatiile tuturor liniilor din tabela Se specifica prin virgula si fara clauza WHEREInner join

Poate fi specificat prin virgula intre numele tabelelor sau prin folosirea WHERE sau cu cuvintele cheie INNER JOIN

33

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Equi-joinFoloseste o conditie cu = pentru a face corespondente intre inregistrari

Left joinIncearca sa gasesca corespondente intre tabele si cand nu gaseste umple inregistrarile fara pereche cu NULL

Stergerea inregistrarilor din tabelaDELETE FROM table [WHERE condition] [LIMIT number] Stergerea tabelelor

Se foloseşte comanda DROP TABLECrearea indecsilorSe 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 campuricreate table mytable( id_col int unsigned not null another_col char(200) not null index dual_col_index(id_col another_col) )Modificarea tabelelor dupa creareALTER TABLE nume modificare [ modificare ]Posibile modificari cu ALTER TABLESintaxa DescriereADD [COLUMN] column_description Adauga o coloana[FIRST | AFTER column ]ADD [COLUMN] (column_description Adauga o descriere de coloanaADD INDEX [index] (column) Adauga un indexADD PRIMARY KEY (column) Transforma campul in PKADD UNIQUE [index] (column) Adauga un index pt unicateALTER [COLUMN] column SET DEFAULT Adaugasterge valorile implicite value | DROP DEFAULTCHANGE [COLUMN] column new_column Modificari pentru coloane_descriptionMODIFY [COLUMN] column_descriptionDROP [COLUMN] column Sterge un campDROP PRIMARY KEY Sterge PKDROP INDEX index Sterge indexulRENAME[AS] new_table_name Redenumeste o tabelaSintaxe 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_campIndecsialter 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_namealter table_name test10 drop primary key

34

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

72Aplicatii

lt---INTEROGARI---gt

1 Tarile Participante ordonate dupa nr de cod

--gt Select `ide``tara` from tariparticipante order by 1

2 Nr de jucatori ai fiecarei tari

--gt Select `ide``tara``nrsportivi` from tariparticipante order by 1

3 AntrenoriiMediciiMaseuriiPsihologii fiecarei tari

--gt SELECT `ide``tara``antrenor``medic``masseur``psiholog` from tariparticipante

4 Tarile care aunu au psihologi

--gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT) --gt SELECT `ide``tara``psiholog` from tariparticipante where psiholog = (ABSENT)

5 Tarile care aunu au maseuri

--gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT) --gt SELECT `ide``tara``masseur` from tariparticipante where masseur = (ABSENT)

6 Sporturile la care participa sportivii

--gt select ids numesport subprobe from sporturi ORDER BY `sporturi``ids` ASC

7 Arenele disponibile de antrenament pentru sportivi

--gt select idsnumesportarena from sporturi

35

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

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

--gt SELECT idnumeprenumetara from sportivi order by 423

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

--gt SELECT idnumeprenumetaraantrenor from sportivi order by 423

10 Clasamentul pe medalii

--gt SELECT FROM clmedalii ORDER BY total DESC

11 Tarile cu un numar minim de 8 medalii de aurbronzargint

--gt SELECT idctaraaur from clmedalii where (aurgt=8) order by aur desc --gt SELECT idctaraargint from clmedalii where (argintgt=8) order by argint desc --gt SELECT idctarabronz from clmedalii where (bronzgt=8) order by bronz desc

12 Tari descalificata pentru dopaj

--gt SELECT idctaradopaj from clmedalii where dopaj like Descalificat

13 Sportivii cu cele mai multe medalii de auragbrz

--gt SELECT idnumeprenumetaranraur from sportivi where nraurgt2 order by 423 --gt SELECT idnumeprenumetaranrag from sportivi where nraggt2 order by 423 --gt SELECT idnumeprenumetaranrbrz from sportivi where nrbrzgt2 order by 423

14 Clasament Puncte anumita proba ( Patinaj ArtisticSarituri cu Schiurile )

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Patinaj Artistic )order by puncte desc

--gt SELECT DISTINCT id_snumeprenumetaraclasament_puncteprobapuncte from sportiviclasament_puncte

36

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

where ( sportiviid=clasament_puncteid_s and clasament_puncteproba like Sarituri cu schiurile )order by puncte desc

15 Clasament Timp anumita proba ( Biatlon

--gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Biatlon )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Combinatia Nordica )order by timp --gt SELECT DISTINCT id_snumeprenumetaraproba_stimp from sportiviclasament_timp where ( sportiviid=clasament_timpid_s and proba_s like Sanie )order by timp

16 Recorduri

--gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Continental ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Mondial ) --gt SELECT id_rnumeprenumetaraproba_rtimptip_rec from sportivirecorduriclasament_timp where ( sportiviid=recorduriid_r and tip_rec like Olimpic )

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

--gt Select idtnumetvtransmisiune from tvpresa where transmisiune like INREGISTRATA group by numetv --gt Select idtnumetvtransmisiune from tvpresa where transmisiune like LIVE group by numetv

18 Tv - Presa ( REPORTERI )

--gt select idtnumetvnumerep from tvpresa where specilaizare like cameraman

37

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

73 Tabelele bazei de date Torino2006

Clasament_puncte

Clasament_timp

recorduri

38

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

sportivi

tvpresa

39

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

tariparticipante

40

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

clmedalii

41

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Sporturi

42

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Cap8Concluzii

Proiectul contine date despre

1 Tarile participante la jocurile olimpice 2 Jucatorii fiecarei tari in parte3 Staff-ul echipelor ( antrenormedicmasseur)4 Sporturile la care participa competitorii 5 Arenele unde vor avea loc competitiile 6 Clasamentul pe medalii al tarilor 7 Clasamentul pe timppuncte al sportivilor 8 Recorduri mondialeolimpicecontinentale

Baza de date contine

8 tabele - date referitoare la jucatori antrenori medici numar medalii de aurargintbronz 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 clasamentrecorduri 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

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)

Cap9Bibliografie

1 httpjalobeanitim-cjroCursuriwwwmy-sqlgoro

2 Peterson J Baze de date pentru icircncepatori Ed All 2003

3 httpbdfrcspubro

4 C Ivan note de curs ndash ftpftputclujropubuserscivan

5 Bacircscă 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

  • 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)