Upload
catalinacio
View
1.489
Download
78
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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