3,326 439 4MB
Romanian Pages 384 Year 2016
Table of contents :
Anexa 3 - Caractere HTML.pdf......Page 0
1.1.2. Colectarea şi analizarea datelor. Modelul conceptual......Page 8
1.1.3. Entităţi. Instanţe. Atribute. Identificator unic......Page 9
1.1.4. Relaţii între entităţi......Page 11
1.1.4.1. Convenţii de reprezentare a relaţiilor......Page 12
1.1.4.2. Tipuri de relaţii......Page 13
1.1.5. Rezolvarea relaţiilor many-to-many......Page 15
(vezi baremele de notare şi de corectare de la pag. 380)......Page 20
1.2.1. Ce este normalizarea?......Page 22
1.2.2. Prima formă normală (1NF)......Page 23
1.2.3. A doua formă normală (2NF)......Page 24
1.2.4. A treia formă normală (3NF)......Page 26
1.3.5. Operaţii specifice prelucrării bazelor de date......Page 36
1.3.6. Reguli de integritate......Page 37
1.3.7. Programe de validare şi de acţiune......Page 38
(vezi baremele de notare şi de corectare de la pag. 380)......Page 40
2.1. Ce este şi de ce învăţăm MySQL ?......Page 48
Nume......Page 70
font-family:courier, monospace; }......Page 115
......Page 116
background-color:red;}......Page 123
Rhs......Page 130
Problema este următoarea: se dă o imagine şi se cere ca, prin executarea unui clic asupra unei anumite parţi a ei, să se efectueze una dintre operaţiile prezentate în paragraful anterior, prin executarea unui clic în altă parte a ei, să se efectueze o.........Page 140
X......Page 141
Zoom in......Page 143
Modulul valorilor între......Page 223
Semnificaţie......Page 224
6.8.1. Operatori aritmetici......Page 225
6.8.3. Operatori de egalitate......Page 227
6.8.5. Operatori logici......Page 228
6.8.6. Operatori logici pe biţi......Page 229
6.8.7. Operatori de atribuire......Page 230
6.8.8. Operatorul condiţional......Page 232
6.8.10. Prioritatea (precedenţa) operatorilor......Page 233
6.9.4. Instrucţiunea de atribuire......Page 234
6.9.5. Instrucţiunea IF......Page 235
6.9.7. Instrucţiunea DO WHILE......Page 236
6.9.8. Instrucţiunea FOR......Page 237
6.9.11. Instrucţiunea SWITCH......Page 238
6.9.12. Instrucţiunea apel metodă (funcţie)......Page 239
a) int[] V; am declarat o variabilă referinţă către un vector cu componente de tip int. O declaraţie echivalentă poate fi făcută prin: int V[];.......Page 240
V......Page 241
V......Page 242
V......Page 243
Sugestie ! Pentru a vă obişnui cu programarea în Java, puteţi rezolva orice problemă din manualele pentru clasele a X-a şi a XI-a care nu necesită utilizarea fişierelor.......Page 252
Metoda......Page 267
7.8.2.1. Constructorii şi lungimea unui şir de caractere......Page 268
}......Page 273
Constructor 2......Page 277
7.9.1. Un exemplu de extindere a unei clase......Page 279
7.10. Polimorfism......Page 282
Afis din clasa B=7 5......Page 290
A2.2. Identificarea meseriilor de interes......Page 370
A2.3. Evaluarea posibilelor cariere......Page 371
A2.4. Scrierea unui curriculum vitae......Page 372
A2.5. Pregătirea şi susţinerea interviului......Page 374
Exemple de întrebări frecvente la interviurile pentru angajare:......Page 376
Ì......Page 377
↑......Page 378
€......Page 379
Ministerul Educaţiei, Cercetării şi Tineretului
Vlad Tudor Huţanu Carmen Popescu
Manual de
PENTRU CLASA A XII-A filiera teoretică, profil real, specializarea: matematică-informatică, intensiv informatică
Aprobat prin ordinul MEdCT nr. 1561/83 din 23.07.2007
L&S Info-mat
Copyright 2007-2016 L&S INFO-MAT Toate drepturile asupra acestei lucrǎri aparţin editurii L&S INFO-MAT. Reproducerea integralǎ sau parţialǎ a textului din aceastǎ carte este posibilǎ doar cu acordul în scris al editurii L&S INFO-MAT. Manualul a fost aprobat prin Ordinul Ministrului Educaţiei, Cercetǎrii şi Tineretului nr. 1561 / 83 din 23.07.2007 în urma evaluǎrii calitative şi este realizat în conformitate cu programa analiticǎ aprobatǎ prin Ordin al ministrului Educaţiei şi Cercetǎrii nr. 5959 din 22.12.2006. Refenţi ştiinţifici: Prof. Gradul I Carmen Mincǎ, Colegiul Naţional “Sf. Sava", Bucureşti Prof .Gradul I, Enciu Magdalena, Colegiul Naţional “Octav Onicescu”, Bucureşti Tiparul executat la S.C. LuminaTipo S.R.L. Str. Luigi Galvani nr. 20 bis, Sector 2, Bucureşti, [email protected]
Editura
L&S INFO-MAT:
Adresa: Str. Stânjeneilor nr. 6, bl. 30, sc. A, et. 1, apt. 11, sector 4, Bucureşti; Mobil: 0722-573701; 027.731.947; E-mail: [email protected]; Web Site: www.ls-infomat.ro.
CUPRINS
Partea I. Baze de date
7
Capitolul 1. Proiectarea bazelor de date
7
1.1. Noţiuni introductive 1.2. Normalizarea datelor 1.3. Implementarea modelului conceptual 1.4. Managementul de proiect
8 22 29 41
Teme de proiect
45
Partea a II-a. Programare WEB
47
Capitolul 2. Limbajul MySQL
47
2.1. Ce este şi de ce învăţăm MySQL ? 2.2. Cum rulăm MySQL pe propriul calculator ? 2.3. Crearea unei baze de date 2.4. Tabele. Noţiuni elementare 2.5. Tipuri de date în MySQL 2.6. Operatori utilizaţi în MySQL 2.7. Funcţii MySQL 2.8. Afişarea coloanelor care rezultă în urma unui calcul 2.9. Valoarea NULL 2.10. Valori implicite 2.11. Cheie primară şi cheie unică 2.12. Autoincrementare 2.13. Sortarea datelor 2.14. Filtrarea datelor 2.15. Actualizări într-un tabel 2.16. Funcţii agregate 2.17. Utilizarea subinterogărilor 2.18. Gruparea datelor 2.19. Uniuni de tabele 2.20. Elemente care privesc securitatea bazelor de date
48 49 50 51 53 57 62 65 66 68 69 71 72 73 74 77 78 80 82 85
Probleme Propuse
86
4
Manual de Informatică pentru clasa a XII-a
Capitolul 3. Primii paşi către construcţia unui site
90
3.1. Ce este Internetul ? 3.2. Protocolul TCP/IP 3.3. Despre site-uri 3.4.Un program care rulează sub FTP 3.5. Cum scriem un fişier HTML ?
91 92 94 97 99
Teste recapitulative
103
Capitolul 4. HTML, CSS – primele noţiuni
104
4.1. Structura de bază a unei pagini HTML+CSS 4.2. Elemente HTML pentru afişarea textelor 4.3. Atribute CSS pentru font-uri 4.4. Atribute CSS pentru texte 4.5. Liste 4.6. Structura unui element HTML 4.7. Atribute de culoare şi fond 4.8. Atribute pentru margini 4.9. Atribute pentru padding 4.10. Atribute pentru bordură 4.11. Elementul IMG 4.12. Tabele 4.13. Hiperlegături (link-uri) 4.14. Hărţi imagine 4.15. Elementele BASE, META şi SCRIPT 4.16. Cadre (FRAMESET, FRAME şi IFRAME) 4.17. Elementul MARQUEE 4.18. Aşezarea implicită în pagină a diverselor elemente 4.19. Alte modalităţi de aşezare în pagină a elementelor 4.20. Atributul z-index 4.21. Atributul display 4.22. Caractere HTML 4.23. Aspecte generale ale proiectării interfeţelor web
105 109 114 115 117 120 122 125 125 125 126 128 133 140 145 147 152 153 155 157 159 160 161
Probleme propuse
165
Capitolul 5. Limbajul PHP
169
5.1. Introducere 5.2. Formulare 5.3. Elementul TEXTAREA 5.4. Elementul SELECT 5.5. Constante. Variabile. Operatori 5.6. Instrucţiunile limbajului PHP
170 172 176 176 177 181
Cuprins
5
5.7. Funcţii în PHP 5.8. Funcţii “matematice” 5.9. Afişarea datelor - echo şi print 5.10. Funcţii pentru prelucrarea şirurilor de caractere 5.11. Masive în PHP 5.12. Variabile cookie 5.13. Utilizarea în comun a limbajelor PHP şi MySQL 5.14. Aplicaţii 5.15. Proiectarea paginilor web
184 187 188 189 192 195 197 203 212
Probleme propuse
213
Teme de proiect
215
Partea a III-a. Programare orientată pe obiecte şi programare vizuală
216
Capitolul 6. Iniţiere în utilizarea limbajului Java
216
6.1. Cum instalăm Java ? 6.2. Primul program 6.3. Conceptul de Maşină Virtuală Java (JVM) 6.4. Tipuri de aplicaţii Java 6.5. Comentarii 6.6. Afişarea şirurilor de caractere 6.7. Tipuri de date 6.8. Operatori 6.9. Instrucţiuni 6.10. Masive 6.11. Citirea datelor de la tastatură
217 219 220 221 222 222 222 225 234 240 244
Probleme rezolvate
246
6.12. Date membru 6.13. Metode 6.14. Exemple de utilizare a metodelor 6.15. Supraîncărcarea metodelor
248 248 251 252
Capitolul 7. Programare orientată pe obiecte
253
7.1. Principiile programării orientate pe obiecte 7.2. Constructori 7.3. Date membru statice şi metode statice 7.4. Cuvântul cheie “this” 7.5. Referinţe către obiecte 7.6. Masive de obiecte 7.7. Aplicaţii ale noţiunilor prezentate. Lucrul cu numere raţionale 7.8. Studiul unor clase din limbajul Java 7.9. Extinderea claselor (moştenirea) 7.10. Polimorfism
254 256 258 259 259 261 263 267 276 282
6
Manual de Informatică pentru clasa a XII-a
7.11. Clase abstracte 7.12. Interfeţe 7.13. Specificatori de acces (modificatori de acces) 7.14. Excepţii (tratarea erorilor)
287 290 293 296
Probleme propuse
305
Capitolul 8. Programare vizuală
311
8.1. Conceptele de bază ale programării vizuale în Java 8.2. Studiul principalelor componente 8.3. Obiecte grafice. Clasa Graphics 8.4. Accesarea şi prelucrarea datelor
312 326 351 356
Probleme propuse
363
Teme de proiect
366
Anexa 1. Instalarea programelor Apache, PHP şi MySQL
367
Anexa 2. Dezvoltarea profesională în domeniul IT
369
Anexa 3. Caractere HTML
377
Indicaţii / Răspunsuri
380
PARTEA I
CAPITOLUL Proiectarea bazelor de date
În acest prim capitol veţi studia principiile generale ale proiectării bazelor de date, vă veţi familiariza cu diversele anomalii care pot invalida bazele de date, precum şi cu modalităţile de evitare ale acestora. De asemenea, se va defini modelul conceptual al unei baze de date. În ultima parte a capitolului, vor fi prezentate etapele realizării unui proiect, avantajele lucrului în echipă şi veţi învăţa cum să pregătiţi şi să susţineţi o prezentare în faţa publicului.
Ce este modelul conceptual şi care este rolul său ?
Ce este un ERD ?
Ce este o entitate şi cum se reprezintă ea într-un ERD ?
Ce este o instanţă ?
Ce sunt şi cum se stabilesc atributele unei entităţi ? Cum se stabilesc relaţii între entităţi ?
Ce tipuri de relaţii pot exista între entităţi ?
Cum se reprezintă relaţiile în ERD ?
Normalizarea datelor
Cum se implementează modelul conceptual ?
Managementul de proiect
Cuvinte cheie: dată, informaţie, cunoştinţă, analiză, model conceptual, entitate, instanţă, atribut, identificator unic, relaţie, normalizare, mapare, integritate, proiect, echipă, prezentare
8
Manual de Informatică pentru clasa a XII-a
1.1. Noţiuni introductive 1.1.1. Date. Informaţii. Cunoştinţe Auzim adesea vorbindu-se despre “era informaţiilor” sau “societatea informaţională” sau “tehnologia informaţiei”, însă de multe ori cuvântul "informaţie" este folosit fără a-i înţelege clar sensul, diferenţa dintre date, informaţii sau cunoştinţe. În general, conţinutul gândirii umane operează cu următoarele concepte: •
Date – constau în material brut, fapte, simboluri, numere, cuvinte, poze fără un înţeles de sine stătător, neintegrate într-un context, fără relaţii cu alte date sau obiecte. Ele se pot obţine în urma unor experimente, sondaje, etc.
•
Informaţii – prin prelucrarea datelor şi găsirea relaţiilor dintre acestea se obţin informaţii care au un înţeles şi sunt integrate într-un context. Datele, organizate şi prezentate într-un mod sistematic pentru a sublinia sensul acestora, devin informaţii. Pe scurt, informaţiile sunt date prelucrate. Informaţiile se prezintă sub formă de rapoarte, statistici, diagrame, etc.
•
Cunoştinţe – colecţii de date, informaţii, adevăruri şi principii învăţate, acumulate de-a lungul timpului. Informaţiile despre un subiect, reţinute şi înţelese, ce pot fi folosite în luarea de decizii, care pot forma judecăţi şi opinii, devin cunoştinţe. Cu alte cuvinte, cunoştinţele apar în momentul utilizării informaţiei.
1.1.2. Colectarea şi analizarea datelor. Modelul conceptual Primul pas în realizarea unei aplicaţii de baze de date este analiza datelor şi realizarea unei scheme conceptuale (model conceptual) ale acestora. În această etapă sunt analizate natura şi modul de utilizare a datelor. Sunt identificate datele care vor trebui memorate şi procesate, se împart în grupuri logice şi se identifică relaţiile care există între aceste grupuri. Analiza datelor este un proces uneori dificil, care necesită mult timp, însă este o etapă obligatorie. Fără o analiză atentă a datelor şi a modului de utilizare a acestora, vom realiza o bază de date care, putem constata în final, că nu întruneşte cerinţele beneficiarului. Ideea de bază a analizei datelor şi a construirii modelului conceptual este "să măsori de două ori şi să tai o singură dată". Informaţiile necesare realizării modelului conceptual se obţin folosind metode convenţionale precum intervievarea oamenilor din cadrul organizaţiei şi studierea documentelor folosite.
Capitolul 1. Proiectarea bazelor de date
9
Odată obţinute aceste informaţii, ele trebuie reprezentate într-o formă convenţională care să poată fi uşor înţeleasă de toată lumea. O astfel de reprezentare este diagrama entităţi-relaţii, numită şi harta relaţiilor sau ERD-ul (Entity Relationship Diagram). Aceste scheme sunt un instrument util care uşurează comunicarea între specialiştii care proiectează bazele de date şi programatori, pe de o parte şi beneficiari, pe de altă parte. Aceştia din urmă pot înţelege cu uşurinţă o astfel de schemă, chiar dacă nu sunt cunoscători în domeniul IT. În cele ce urmează, vom prezenta principalele elemente care intră în componenţa unui ERD precum şi convenţiile de reprezentare a acestora.
1.1.3. Entităţi. Instanţe. Atribute. Identificator unic O entitate este un lucru, obiect, persoană sau eveniment care are semnificaţie pentru afacerea modelată, despre care trebuie să colectăm şi să memorăm date. O entitate poate fi un lucru real, tangibil precum o clădire, o persoană, poate fi o activitate precum o programare sau o operaţie sau poate fi o noţiune abstractă. O entitate este reprezentată în ERD printr-un dreptunghi cu colţurile rotunjite. Numele entităţii este întotdeauna un substantiv la singular şi se scrie în partea de sus a dreptunghiului cu majuscule, ca în Fig. 1.1: PROFESOR
PACIENT
ELEV
Figura 1.1. Exemple de entităţi şi modul de reprezentare
O entitate este de fapt o clasă de obiecte şi pentru orice entitate există mai multe instanţe ale sale. O instanţă a unei entităţi este un obiect, o persoană, un eveniment particular din clasa de obiecte care formează entitatea. De exemplu, elevul X din clasa a IX-a A de la Liceul de Informatică din localitatea Y este o instanţă a entităţii ELEV. După cum se vede, pentru a preciza o instanţă a unei entităţi, trebuie să specificăm unele caracteristici ale acestui obiect, să-l descriem (să precizăm de exemplu numele, clasa, şcoala, etc.). Aşadar, după ce am identificat entităţile trebuie să descriem aceste entităţi în termeni reali, adică să le stabilim atributele. Un atribut este orice detaliu care serveşte la identificarea, clasificarea, cuantificarea, sau exprimarea stării unei instanţe a unei entităţi. Atributele sunt informaţii specifice ce trebuie cunoscute şi memorate. De exemplu, atributele entităţii ELEV sunt numele, prenumele, adresa, numărul de telefon, adresa de e-mail, data naşterii, etc.
10
Manual de Informatică pentru clasa a XII-a
În cadrul unui ERD, atributele se vor scrie imediat sub numele entităţii, cu litere mici. Un atribut este un substantiv la singular (vezi Fig. 1.2).
Figura 1.2. Exemplu de entitate
ELEV # * * * * ○ ○
cnp nume prenume data_nasterii adresa telefon e-mail
Un atribut poate fi obligatoriu sau opţional. Dacă un atribut este obligatoriu, pentru fiecare instanţă a entităţii respective trebuie să avem o valoare pentru acel atribut: de exemplu, este obligatoriu să cunoaştem numele elevilor. Pentru un atribut opţional putem avea instanţe pentru care nu cunoaştem valoarea atributului respectiv. De exemplu, atributul ”e-mail” al entităţii ELEV este opţional, un elev putând să nu aibă adresă de email. Un atribut obligatoriu este precedat în ERD de un asterisc ”*”, iar un atribut opţional va fi precedat de un cerculeţ ”o”. Atributele care definesc în mod unic instanţele unei entităţi se numesc identificatori unici (UID). UID-ul unei entităţi poate fi compus dintr-un singur atribut, precum codul numeric personal ce poate fi un identificator unic pentru entitatea ELEV. În alte situaţii, identificatorul unic este compus dintr-o combinaţie de două sau mai multe atribute. De exemplu, combinaţia dintre titlu, numele autorului şi data apariţiei poate forma unicul identificator al entităţii CARTE. Oare combinaţia titlu şi nume autor nu era suficientă? Răspunsul este NU, deoarece pot exista mai multe volume scrise de Mihai Eminescu având toate titlul ”Poezii”, dar apărute la date diferite. Atributele care fac parte din identificatorul unic al unei entităţi vor fi precedate de semnul diez ”#” (vezi Fig. 1.2 şi Fig. 1.3).
Figura 1.3. Alt exemplu de entitate
CARTE # # # * *
titlu autor data_aparitiei format numar_pagini
Observaţie ! Atributele din UID sunt întotdeauna obligatorii, însă semnul ”#” este suficient, nu mai trebuie pus şi un semn asterisc în faţa acestor atribute. Valorile unor atribute se pot modifica foarte des, ca de exemplu atributul vârstă. Spunem, în acest caz, că avem de a face cu un atribut volatil. Dacă valoarea unui atribut însă se modifică foarte rar sau deloc (de exemplu data naşterii) acesta este un atribut non-volatil. Evident este de preferat să folosim atribute non-volatile atunci când acest lucru este posibil.
Capitolul 1. Proiectarea bazelor de date
11
Identificaţi entităţile pentru următoarele scenarii. Identificaţi apoi pentru fiecare entitate atributele sale, stabiliţi opţionalitatea acestora şi precizaţi unicul identificator al fiecărei entităţi. Indicaţie. Subliniaţi substantivele care au semnificaţie pentru afacerea descrisă. Un substantiv va fi subliniat doar la prima sa apariţie. Dintre aceste substantive veţi alege apoi entităţile. 1. Pentru a se abona la diverse reviste, persoanele doritoare trebuie să furnizeze numele, adresa şi un număr de telefon. Fiecare revistă este identificată prin titlu, numărul volumului şi data apariţiei. Abonaţii semnează pentru abonare un contract pe o anumită perioadă de timp specificată prin data de început a abonamentului şi data finală. Bineînţeles că o persoană se poate abona la mai multe reviste în acelaşi timp. 2. Despre angajaţii unei firme se cunoaşte numele, titlul, numărul de telefon de la birou. Angajaţii pot fi implicaţi într-o serie de proiecte ce se desfăşoară în cadrul firmei. Despre fiecare proiect se cunoaşte numele, data la care a demarat proiectul şi se poate cunoaşte o dată la care se va finaliza proiectul. La fiecare proiect lucrează un singur angajat, însă un angajat poate fi implicat în mai multe proiecte. Fiecare angajat are un manager, cu excepţia directorului. Managerii pot fi şi ei implicaţi în proiecte.
1.1.4. Relaţii între entităţi În lumea reală, obiectele nu există izolat. Percepem obiectele din lumea reală doar în conexiune cu alte obiecte, de exemplu vom spune 'pământul se învârte în jurul soarelui', 'el este medic', etc. Aşadar, după ce aţi identificat care sunt entităţile şi atributele acestor entităţi, este timpul să punem în evidenţă relaţiile care există între aceste entităţi, modul în care acestea comunică între ele. O relaţie este o asociere, legătură sau conexiune existentă între entităţi şi care are o semnificaţie pentru afacerea modelată. Orice relaţie este bidirecţională, legând două entităţi sau o entitate cu ea însăşi. De exemplu, elevii studiază mai multe materii, o materie e studiată de către elevi. Orice relaţie este caracterizată de următoarele elemente: -
numele relaţiei;
-
opţionalitatea relaţiei;
-
gradul (cardinalitatea) relaţiei.
12
Manual de Informatică pentru clasa a XII-a
Să luăm ca exemplu relaţia existentă între entităţile JUCĂTOR şi ECHIPĂ. Vom spune: Un JUCĂTOR joacă într-o ECHIPĂ. Numele relaţiei este: joacă. Pentru a stabili opţionalitatea relaţiei trebuie să răspundem la următoarele întrebări: un jucător trebuie să joace într-o echipă? Se poate ca un jucător să nu joace în nicio echipă? Dacă acceptăm faptul că toţi jucătorii trebuie să joace într-o echipă, relaţia este obligatorie sau mandatorie şi vom spune că: Un JUCĂTOR trebuie să joace într-o ECHIPĂ. Dacă însă acceptăm că există jucători care nu joacă în nicio echipă (de exemplu, li s-a terminat contractul şi în momentul de faţă nu mai joacă la nicio echipă), atunci relaţia este opţională. În acest caz, vom spune că: Un JUCĂTOR poate juca la o ECHIPĂ. Cardinalitatea relaţiei este dată de numărul de instanţe ale entităţii din partea dreaptă a relaţiei care pot intra în relaţie cu o instanţă a entităţii din partea stângă a relaţiei. Adică va trebui să răspundem la întrebări de genul: la câte echipe poate juca un jucător? Răspunsurile posibile sunt unul şi numai unul sau unul sau mai mulţi. Vom spune: Un JUCĂTOR trebuie/poate să joace la o ECHIPĂ şi numai una. sau Un JUCĂTOR trebuie/poate să joace la una sau mai multe ECHIPE. Cea mai realistă variantă a relaţiei dintre JUCĂTOR şi ECHIPĂ este aşadar: Un JUCĂTOR poate să joace la o ECHIPĂ şi numai una. Am precizat însă mai înainte că orice relaţie este bidirecţională. Relaţia dintre ECHIPĂ şi JUCĂTOR o putem enunţa astfel: La o ECHIPĂ trebuie să joace unul sau mai mulţi JUCĂTORI. 1.1.4.1. Convenţii de reprezentare a relaţiilor În cadrul diagramei entităţi-relaţii, o relaţie va fi reprezentată printr-o linie ce uneşte cele două entităţi. Deoarece o relaţie este bidirecţională, linia ce uneşte cele două entităţi este compusă din două segmente distincte, câte unul pentru fiecare entitate. Tipul segmentului ce pleacă de la o entitate ne va indica opţionalitatea relaţiei dintre această entitate şi entitatea aflată în cealaltă parte a relaţiei. Dacă acest segment este continuu este vorba de o relaţie obligatorie, o linie întreruptă indică o relaţie opţională.
Capitolul 1. Proiectarea bazelor de date
13
De exemplu, în Fig. 1.4 segmentul ce pleacă de la entitatea JUCĂTOR, fiind întrerupt, înseamnă că un jucător poate juca la o echipă, adică relaţia este opţională. Segmentul ce pleacă dinspre entitatea ECHIPĂ este continuu, deci la o echipă trebuie să joace jucători.
Figura 1.4. Reprezentarea relaţiilor
Modul în care o linie se termină spre o entitate este important. Dacă se termină printr-o linie simplă, înseamnă că o instanţă şi numai una a acestei entităţi este în relaţie cu o instanţă a celeilalte entităţi. În exemplul anterior, linia de la JUCATOR la ECHIPA se termină în partea dinspre ECHIPA cu o linie simplă, deci un jucător joacă la o echipă şi numai una. Dacă linia se termină cu trei linii (picior de cioară), înseamnă că mai multe instanţe ale entităţii pot corespunde unei instanţe a celeilalte entităţi. În exemplul anterior, linia de la ECHIPĂ la JUCĂTOR se termină cu piciorul de cioară, înseamnă că unei instanţe a entităţii ECHIPĂ îi corespund mai multe instanţe ale entităţii JUCĂTOR, adică o echipă are unul sau mai mulţi jucători. Caracteristica relaţiei
Valoare
Mod de reprezentare
Numele relaţiei
un verb
se scrie deasupra relaţiei linie continuă
Opţionalitatea
relaţie obligatorie (TREBUIE) relaţie opţională (POATE) una şi numai una
linie întreruptă linie simplă picior de cioară
Cardinalitatea una sau mai multe
Tabelul 1.1. Moduri de reprezentare a unei relaţii
1.1.4.2. Tipuri de relaţii Variantele de relaţii ce pot exista între două entităţi sunt prezentate mai jos: -
relaţii one-to-one – acest tip de relaţie este destul de rar întâlnit – uneori, astfel de relaţii pot fi modelate transformând una dintre entităţi în atribut al celeilalte entităţi.
-
relaţii one-to-many – sunt cele mai întâlnite tipuri de relaţii, însă şi aici, cazurile c) şi d) prezentate în Fig. 1.6, sunt mai puţin uzuale;
14
Manual de Informatică pentru clasa a XII-a
Figura 1.5. Exemple de relaţii one-to-one
Figura 1.6. Exemple de relaţii one-to-many
-
relaţii many-to-many – aceste tipuri de relaţii apar în prima fază a proiectării bazei de date, însă ele trebuie să fie ulterior eliminate. Fig. 1.7 prezintă câteva exemple de astfel de relaţii.
Figura 1.7. Exemple de relaţii many-to-many
Capitolul 1. Proiectarea bazelor de date
15
1.1.5. Rezolvarea relaţiilor many-to-many După cum am precizat anterior, relaţiile many-to-many pot apărea într-o primă fază a proiectării bazei de date, însă ele nu au voie să apară în schema finală. Să considerăm relaţia dintre entităţile STUDENT şi CURS (vezi Fig. 1.8). Se ştie că orice curs se termină în general cu un examen. Unde vom memora nota studentului la fiecare examen?
Figura 1.8. Exemplu de relaţie many-to-many
Dacă încercăm să introducem atributul nota la entitatea STUDENT, nu vom şti cărei materii îi corespunde acea notă, întrucât unei instanţe a entităţii STUDENT îi corespund mai multe instanţe ale entităţii CURS. Invers, dacă încercăm să memorăm nota în cadrul entităţii CURS, nu vom şti cărui student îi aparţine acea notă. Rezolvarea unei relaţii many-to-many constă introducerea unei noi entităţi numită entitate de intersecţie, pe care o legăm de entităţile originale prin câte o relaţie one-to-many. Paşii în rezolvarea unei relaţii many-to-many sunt următorii:
se găseşte entitatea de intersecţie - pentru exemplul nostru, vom introduce entitatea INSCRIERE:
Figura 1.9. Rezolvarea relaţiilor many-to-many, pasul 1
16
Manual de Informatică pentru clasa a XII-a
crearea noilor relaţii: o
opţionalitatea: relaţiile care pleacă din entitatea de intersecţie sunt întotdeauna obligatorii în această parte. În partea dinspre entităţile originale, relaţiile vor păstra opţionalitatea relaţiilor iniţiale.
o
cardinalitatea: ambele relaţii sunt de tip one-to-many, iar partea cu many va fi întotdeauna înspre entitatea de intersecţie.
o
numele noilor relaţii:
Figura 1.10. Rezolvarea relaţiilor many-to-many, pasul 2
adăugarea de atribute în cadrul entităţii de intersecţie, dacă acestea există. În exemplul nostru ne poate interesa, să spunem, data la care s-a înscris un student la un curs, data la care a finalizat cursul, precum şi nota obţinută la sfârşitul cursului.
Figura 1.11. Rezolvarea relaţiilor many-to-many, pasul 3
Capitolul 1. Proiectarea bazelor de date
17
stabilirea identificatorului unic pentru entitatea de intersecţie: dacă entitatea de intersecţie nu are un identificator unic propriu, atunci acesta se poate forma din identificatorii unici ai entităţilor iniţiale, la care putem adăuga atribute ale entităţii de intersecţie. În exemplul nostru, identificatorul unic al entităţii de intersecţie este format din id-ul studentului, id-ul cursului şi data înscrierii la curs. Faptul că identificatorul unic al unei entităţi preia identificatorul unic din altă entitate cu care este legată este reprezentat grafic prin bararea relaţiei respective, înspre entitatea care preia UID-ul celeilalte entităţi:
Figura 1.12. Rezolvarea relaţiilor many-to-many, pasul 4
1. O bază de date va memora orarul unei universităţi. Fiecare curs este parte a unui modul, iar fiecărui curs îi este asociat exact un profesor. La fiecare curs participă mai mulţi studenţi. Fiecare poziţie din orar corespunde unei zile a săptămânii şi unei anumite ore. Fiecare poziţie din orar durează exact o oră, dar uneori un curs poate dura mai multe ore consecutive, însă nici un curs nu poate apărea în zile diferite sau la ore diferite neconsecutive ale aceleiaşi zile. Fiecare profesor şi fiecare student pot avea mai multe ore de curs la care participă în decursul unei săptămâni.
18
Manual de Informatică pentru clasa a XII-a
Care dintre următoarele variante NU este o soluţie posibilă a acestei probleme ? a) Se stabileşte o relaţie one-to-many între CURS şi POZITIE_ORAR; b) Se stabileşte o relaţie many-to-many între CURS şi POZITIE_ORAR; c) Pentru fiecare curs vom avea un atribut start care reţine ora de începere a cursului şi un atribut durată care memorează numărul de poziţii consecutive din orar "ocupate" de acel curs; d) Pentru fiecare curs vom avea două atribute primul şi ultimul care memorează prima şi respectiv ultima poziţie din orar ocupată de acel curs. 2. Fie următoarea hartă a relaţiilor:
Figura 1.13. Relaţia propusă pentru problema 2
Cum se citeşte corect relaţia dintre CLIENT şi MAŞINA?
a) Fiecare CLIENT poate să închirieze o MAŞINĂ şi numai una.
b) Fiecare CLIENT trebuie să închirieze o MAŞINĂ şi numai una.
c) Fiecare CLIENT poate să închirieze una sau mai multe MAŞINI.
d) Fiecare CLIENT trebuie să închirieze una sau mai multe MAŞINI. 3. Numele unei entitǎţi este de obicei: a) un verb;
b) un substantiv ;
c) un adverb;
d) orice cuvânt.
4. Care dintre următoarele variante NU poate reprezenta un atribut al entităţii PANTOF? a) culoare;
b) mărime;
c) model;
d) clasa.
5. Care dintre următoarele fraze pot fi citite din schema de mai jos?
Figura 1.14. Relaţia propusă pentru problema 5
Capitolul 1. Proiectarea bazelor de date
a) b) c) d)
19
Un student poate să urmeze mai multe cursuri. Un curs poate fi urmat de mai mulţi studenţi. Un student trebuie să urmeze un singur curs. Un curs trebuie să fie urmat de un student.
6. Ce semnificaţie are piciorul de cioară (
) în cadrul unui ERD?
a) relaţia este obligatorie; b) relaţia este opţională; c) pot exista una sau mai multe instanţe ale entităţii lângă care apare semnul în relaţie cu o instanţă a celeilalte entităţi; d) niciuna din variantele anterioare.
1. Completaţi în tabelul următor, în prima coloană, câte un exemplu de entitate a cărui atribut este specificat în coloana a doua: Entitate
Atribut culoare nr_calorii volum Tabelul 1.2.
2. Citiţi, în ambele sensuri, următoarele relaţii. Din ce atribute este compus UID-ul fiecărei entităţi?
Figura 1.15. Relaţiile propuse pentru problema 2
20
Manual de Informatică pentru clasa a XII-a
3. Rezolvaţi următoarele relaţii many-to-many:
Figura 1.16. Relaţiile propuse pentru problema 3
4. Daţi două exemple de relaţii one-to-many. (vezi baremele de notare şi de corectare de la pag. 380)
1. Reluaţi aplicaţiile de la pagina 11 şi stabiliţi relaţiile dintre entităţile de la fiecare exerciţiu. Rezolvaţi apoi eventualele relaţii many-to-many. Verificaţi să nu existe relaţii redundante în schemele obţinute. Pentru scenariile de la punctele 2-5, determinaţi entităţile, atributele acestora şi relaţiile dintre entităţi. Desenaţi harta relaţiilor pentru fiecare exerciţiu în parte. 2. O firmă produce mai multe tipuri de maşini, un model fiind caracterizat printr-un nume, mărimea motorului şi un sufix care indică gradul de lux al acesteia (de exemplu XL, GL). Fiecare model este construit din mai multe părţi, fiecare parte putând fi folosită pentru construirea mai multor modele de maşini. Fiecare parte are o descriere şi un cod. Fiecare model de maşină este produs de exact o fabrică a firmei, fabrică ce se poate găsi în una din ţările UE. O fabrică poate produce mai multe modele de maşini şi mai multe tipuri de părţi componente. De asemenea, fiecare tip de parte componentă poate fi produsă de o singură fabrică a firmei.
Capitolul 1. Proiectarea bazelor de date
21
3. O universitate are în componenţa sa mai multe facultăţi, fiecare facultate având mai multe departamente. Fiecare departament oferă studenţilor mai multe cursuri. Un profesor poate lucra la un singur departament al unei singure facultăţi. Fiecare curs are mai multe secţiuni, iar o secţiune poate să facă parte din mai multe cursuri. Un profesor poate preda mai multe secţiuni, din acelaşi curs sau din cursuri diferite, dar o secţiune poate fi predată de mai mulţi profesori. 4. La o facultate este nevoie să se memoreze date despre studenţi, cursuri şi secţiunile fiecărui curs. Fiecare student are un nume, un număr de identificare, adresa de acasă, adresa temporară, pentru cei care nu fac facultatea în localitatea lor. Un student poate opta să urmeze un curs întreg sau doar anumite secţiuni ale unui curs. De asemenea, el poate urma mai multe cursuri şi/sau secţiuni de curs simultan. Un curs poate avea mai multe secţiuni, dar o secţiune poate fi parte a mai multor cursuri. 5. Angajaţii unei firme sunt redistribuiţi la diferitele departamente din cadrul firmei. Dorim ca în baza de date să memorăm, pentru fiecare angajat, departamentul la care lucrează acum, dar şi departamentul la care a lucrat prima dată, la angajarea în firmă.
22
Manual de Informatică pentru clasa a XII-a
1.2. Normalizarea datelor 1.2.1. Ce este normalizarea? Normalizarea este o tehnică de proiectare a bazelor de date prin care se elimină (sau se evită) anumite anomalii şi inconsistenţe ale datelor. O bază de date bine proiectată nu permite ca datele să fie redundante, adică aceeaşi informaţie să se găsească în locuri diferite sau să se memoreze în baza de date informaţii care se pot deduce pe baza altor informaţii memorate în baza de date. Anomaliile care pot să apară la o bază de date nenormalizată sunt următoarele: -
anomalii la actualizarea datelor – închipuiţi-vă că la secretariatul şcolii voastre sunt memorate într-o tabelă informaţiile despre toţi elevii şcolii: nume, adresă, telefon, etc. De asemenea, la biblioteca şcolii există fişele voastre tot într-o tabelă. Aceste fişe conţin numele, prenumele, adresa, telefonul, data înscrierii la bibliotecă, etc. Acum câteva zile v-aţi schimbat domiciliul. Noua adresă trebuie modificată atât la secretariat cât şi în fişa de la bibliotecă şi în toate locurile în care această informaţie apare. Dacă modificarea nu se produce în unul dintre aceste locuri (fie că aţi uitat să anunţaţi, fie din alte motive), datele devin inconsistente. Alt scenariu: la o bibliotecă se înregistrează într-o tabelă următoarele date despre cărţi: ISBN, titlu, autor, preţ, subiect, editură şi adresa editurii. La un moment dat, o editură îşi schimbă adresa. Bibliotecara va trebui să modifice adresa editurii respective în înregistrările corespunzătoare tuturor cărţilor din bibliotecă apărute la respectiva editură. Dacă această modificare nu se face cu succes, unele dintre înregistrări rămânând cu vechea adresă, apare din nou o inconsistenţă a datelor.
-
anomalii de inserare – în exemplul anterior, nu vom putea memora adresa unei edituri, lucru inacceptabil dacă dorim să avem informaţii şi despre edituri a căror cărţi nu le avem în bibliotecă, eventual de la care dorim să facem comenzi.
-
anomalii de ştergere – să presupunem că într-o tabelă memorăm următoarele informaţii: codul studentului, codul cursului şi codul profesorului. La un moment dat, niciun student nu mai doreşte să participe la un anume curs. Ştergând toate înregistrările corespunzătoare cursului, nu vom mai putea şti niciodată cine preda acel curs.
Conceptul de normalizare a bazelor de date a fost pentru prima dată introdus de 1 către Edgar Frank Codd . Formele normale oferă indicaţii pe baza cărora puteţi decide dacă un anumit ERD este bine proiectat, neexpus anomaliilor şi inconsistenţelor. În principiu, normalizarea implică descompunerea unei entităţi în două sau mai multe entităţi, prin compunerea cărora se pot obţine exact aceleaşi informaţii. 1
http://www.acm.org/classics/nov95/toc.html
Capitolul 1. Proiectarea bazelor de date
23
Formele normale se aplică fiecărei entităţi în parte. O bază de date (sau un ERD) se găseşte într-o anumită formă normală doar dacă toate entităţile se găsesc în acea formă normală. Edgar Codd a definit primele trei forme normale 1NF, 2NF şi 3NF. Ulterior, s-au mai definit formele normale 4NF, 5NF şi 6NF care însă sunt rar folosite în proiectarea bazelor de date.
1.2.2. Prima formă normală (1NF) O entitate se găseşte în prima formă normală dacă şi numai dacă: - nu există atribute cu valori multiple; - nu există atribute sau grupuri de atribute care se repetă. Cu alte cuvinte, toate atributele trebuie să fie atomice, adică să conţină o singură informaţie. Dacă un atribut are valori multiple, sau un grup de atribute se repetă, atunci trebuie să creaţi o entitate suplimentară pe care să o legaţi de entitatea originală printr-o relaţie de 1:m. În noua entitate vor fi introduse atributele sau grupurile de atribute care se repetă. Să considerăm entitatea din Fig. 1.17, referitoare la notele elevilor unei clase. Câteva observaţii referitoare la această entitate: câte discipline studiazǎ un elev? Câte perechi (disciplina, nota) va trebui să aibă entitatea ELEV? Să spunem că ştim exact numărul maxim de discipline pe care le poate studia un elev. Ce se întâmplă dacă în anul şcolar viitor acest număr de discipline va fi mai mare? În plus, la o materie un elev poate avea mai multe note. Câte note? Cum memorăm aceste note? Le punem în câmpul corespunzător disciplinei cu virgulă între ele? Cum rezolvăm această problemă? Vom crea o nouă entitate în care vom introduce disciplina şi nota la disciplina respectivă (vezi Fig. 1.18). În acest fel, fiecărui elev îi pot corespunde oricâte note, iar la o disciplină poate avea oricâte note, singura restricţie conform acestui model fiind că un elev nu va putea primi în aceeaşi zi, la aceeaşi materie, mai multe note. Să considerăm un alt exemplu. Pentru managementul unui proiect este important să ştim pentru fiecare membru al echipei care sunt abilităţile de care dispune, pentru a cunoaşte modul în care să atribuim sarcinile în cadrul grupului. Într-o primă etapă, am proiectat o entitate ANGAJAT, care are un atribut abilităţi, ca în Fig. 1.19. Însă se ştie că fiecare angajat are mai multe abilităţi pe care dorim să le memorăm. Aşadar, atributul abilităţi nu respectă prima formă normală. În consecinţă, vom crea o nouă entitate ABILITATE în care vom memora toate abilităţile fiecărui angajat (vezi Fig. 1.20).
24
Manual de Informatică pentru clasa a XII-a
Figura 1.18
Figura 1.17
Figura 1.19
Figura 1.20
1.2.3. A doua formă normală (2NF) O entitate se găseşte în a doua formă normală dacă şi numai dacă se găseşte în prima formă normală şi în plus, orice atribut care nu face parte din UID (Unique IDentifier) va depinde de întregul UID, nu doar de o parte a acestuia. De exemplu, dacă memorăm angajaţii unui departament într-o entitate ca mai jos:
Figura 1.21. Exemplu de entitate
Se observă că data_nasterii şi adresa sunt două atribute care depind doar de id-ul angajatului, nu de întregul UID care este combinaţia dintre atributele id_dep şi id_angajat. Această situaţie se rezolvă prin crearea unei noi entităţi ANGAJAT, pe care o legăm de entitatea DEPARTAMENT printr-o relaţie 1:m.
Capitolul 1. Proiectarea bazelor de date
25
Figura 1.22. Relaţia între cele două entităţi
O situaţie mai specială este în cazul relaţiilor barate, când trebuie ţinut seama că UID-ul unei entităţi este compus din atribute din entitatea respectivă, plus un atribut sau mai multe provenite din relaţia barată. Să considerăm următorul exemplu:
Figura 1.23. Exemplu de relaţie barată
Se observă că UID-ul entităţii APARTAMENT este compus din combinaţia a trei atribute: numărul apartamentului, numărul blocului şi strada. Deci, toate atributele din entitatea APARTAMENT care nu fac parte din UID, trebuie să depindă de întregul UID. Dar se ştie că atributul cod_postal depinde doar de strada şi de numărul blocului, nu şi de numărul apartamentului. Acest lucru ne spune că atributul nu este memorat la locul potrivit. Deoarece depinde doar de combinaţia (strada, nr_bloc), înseamnă că de fapt depinde de UID-ul entităţii bloc. Aşadar, vom muta atributul cod_postal în entitatea BLOC.
Figura 1.24. Rezultatul modificării efectuate
Observaţie ! Dacă o entitate se găseşte în prima formă normală şi UID-ul său este format dintr-un singur atribut, atunci ea se găseşte automat în a doua formă normală.
26
Manual de Informatică pentru clasa a XII-a
1.2.4. A treia formă normală (3NF) O entitate se găseşte în a treia formă normală dacă şi numai dacă se găseşte în a doua formă normală şi în plus niciun atribut care nu este parte a UID-ului nu depinde de un alt atribut non-UID. Cu alte cuvinte, nu se acceptă dependenţe tranzitive, adică un atribut să depindă de UID în mod indirect. Luăm ca exemplu entitatea CARTE din Fig. 1.25. Atributul biografie_autor nu depinde de ISBN ci de atributul autor. Nerezolvarea acestei situaţii duce la memorarea de date redundante, deoarece biografia unui autor va fi memorată pentru fiecare carte scrisă de autorul respectiv. Rezolvarea acestei situaţii constǎ în crearea unei noi entităţi, să-i zicem AUTOR, pe care o legăm de entitatea CARTE printr-o relaţie 1:m (vezi Fig. 1.26).
Figura 1.25. Entitate Iniţială
Figura 1.26. Introducerea unei noi entităţi
Atenţie! Acest model este corect doar dacă se acceptă că o carte are un singur autor. Lăsăm ca temă rezolvarea situaţiei în care o carte poate avea mai mulţi autori. În această situaţie, apare o relaţie many-to-many pe care trebuie să o rezolvaţi.
1. Care dintre următoarele enunţuri NU este un exemplu de redundanţă? a) O relaţie între două entităţi care poate fi dedusă din altă relaţie. b) O valoare dintr-o bază de date care poate fi obţinută direct pe baza altei valori. c) Două atribute din baza de date care au aceeaşi valoare. d) O valoare din baza de date care poate fi obţinută efectuând diferite calcule asupra altor valori. e) Niciuna dintre variantele anterioare.
Capitolul 1. Proiectarea bazelor de date
27
2. Care dintre următoarele cerinţe NU sunt necesare pentru ca o entitate să se găsească în a treia formă normală? a) Trebuie să se găsească în a doua formă normală. b) Fiecare atribut care nu face parte din UID trebuie să depindă de întregul UID. c) Nu trebuie să existe dependenţe tranzitive. d) Niciuna dintre variantele anterioare. 3. Care este cea mai avansată formă normală în care se găseşte entitatea alăturată? a) 1NF; c) 3NF;
b) 2NF; d) ERD-ul nu este normalizat. Figura 1.27. Entitatea propusă
4. În ce formă normală se găseşte fiecare dintre următoarele entităţi? a)
b)
c)
5. Un magazin vinde o gamă variată de pantofi de diferite mărimi şi modele. Un model este identificat printr-un cod. Fiecare model are o descriere şi aceeaşi descriere se poate aplica mai multor modele. Atributul vanzare_saptamanala va memora numărul de pantofi de un anumit model şi o anumită mărime vânduţi săptămâna anterioară (de exemplu, 25 de perechi, model 17, mărimea 39). Atributul valoare_lunara_model reprezintă valoarea totală a pantofilor vânduţi pentru fiecare model în parte, indiferent de model. Desenaţi un ERD în forma normală 3NF, conţinând toate aceste informaţii. 6. Se dă următoarea schemă a unei baze de date existente într-o videotecă. Presupunând că videoteca dispune de un singur exemplar din fiecare film video, stabiliţi în ce formă normală se găseşte acest ERD. Dacă el nu se găseşte în forma normală 3NF, faceţi modificările necesare pentru aducerea sa la forma normală 3NF.
Figura 1.28. Schema propusă
28
Manual de Informatică pentru clasa a XII-a
7. Plecând de la următoarea entitate, desenaţi un ERD în forma normală 3NF:
Figura 1.29. Entitatea propusă pentru problema 7 8. Desenaţi ERD-ul pentru următorul scenariu şi aduceţi-l în forma normală 3NF: într-o clădire se găsesc mai multe birouri. Fiecare birou este identificat unic printr-un număr. În fiecare birou se găseşte un singur telefon. Un telefon poate fi de două tipuri: telefon interior (cu care nu se pot face apeluri în afara clădirii) şi telefon exterior, cu care se pot face apeluri atât în interiorul clădirii cât şi cu exteriorul. Fiecare telefon are un număr unic. Într-un birou pot lucra mai mulţi angajaţi, pentru fiecare cunoscându-se numele, prenumele, adresa, e-mail-ul, data naşterii şi data angajării. Se ştie că un angajat poate lucra într-un singur birou. 9. Modificaţi ERD-ul de la problema anterioară în ipoteza că într-un birou pot exista mai multe telefoane, folosite în comun de către toţi angajaţii care lucrează în acel birou. 10. Aduceţi modificările necesare entităţii alăturate astfel încât să obţineţi un ERD în forma normală 3NF. Entitatea reţine informaţii despre angajaţii unei agenţii de plasare a forţei de muncă, care oferă personal cu normă întreagă sau cu program redus, pentru diferite hoteluri din întreaga ţară. Se memorează numărul de ore lucrate de fiecare angajat în diferite hoteluri. Se ştie că numărul de contract este întotdeauna dependent de codul hotelului dar nu şi invers. Figura 1.30. Entitatea propusă pentru problema 10
Capitolul 1. Proiectarea bazelor de date
29
1.3. Implementarea modelului conceptual 1.3.1. Modele de baze de date Bazele de date au fost concepute pentru stocarea volumelor mari de informaţii relativ omogene între care se pot stabili anumite relaţii. O bază de date este deci o colecţie structurată de date aflate în interdependenţă, date care pot fi consultate pentru a răspunde diferitelor interogări. Înregistrările returnate ca răspuns la o interogare devin informaţii care pot fi utilizate în luarea unor decizii ulterioare. Sistemul complex de programe care permite descrierea, organizarea, memorarea, regăsirea, administrarea şi securizarea informaţiilor dintr-o bază de date se numeşte sistemul de gestiune a bazelor de date (SGBD). Memorarea datelor conţinute de bazele de date se face pe suporturile de memorie internă sau externă folosite de calculatoare. SGBD este un software special asociat bazelor de date care asigură interfaţa între o bază de date şi utilizatorii ei, rezolvând toate cererile de acces la datele memorate. Pentru orice bază de date poate fi compusă o descriere a datelor şi obiectelor memorate, precum şi relaţiile existente între aceste obiecte. O astfel de descriere se numeşte schema bazei de date. Există mai multe modele de baze de date, acestea diferenţiindu-se în funcţie de modul de organizare a schemei bazei de date. Un model de bază de date nu este doar un mod de structurare a datelor, el defineşte de asemenea un set de operaţii care pot fi realizate cu datele respective. Cele mai cunoscute modele de baze de date sunt următoarele: •
•
Modelul tabelar – toate datele sunt memorate sub forma unui singur tabel, un tablou bidimensional de date. Modelul ierarhic – datele sunt organizate sub forma unor structuri arborescente, există deci o rădăcină cu mai mulţi dependenţi, care la rândul lor pot avea alţi dependenţi. IMS (Information Management System) produs de IBM este un exemplu de SGBD bazat pe acest tip de model.
•
Modelul reţea este un model performant, dar complicat. O bază de date de tip reţea reprezintă o colecţie de noduri şi legături, fiecare nod putând fi legat de oricare altul. Legăturile trebuie stabilite având tot timpul în minte interogările posibile şi acţiunile viitoare probabile.
•
Modelul relaţional reprezintă cel mai utilizat model de stocare a datelor, în care datele sunt organizate sub formă de tabele între care există diverse legături.
30
Manual de Informatică pentru clasa a XII-a
•
Modelul obiectual, destinat să suporte modele de obiecte complexe (organizare de tip heap cu referinţe între componente) este oarecum asemănător reţelei, iar prin faptul că pentru accesare directă, stochează o hartă a ierarhiilor şi relaţiilor claselor de obiecte, are ascendent şi în modelul ierarhic. Modelul obiectual se pretează pentru înmagazinarea informaţiilor complexe: atribute descriptive asociate datelor multimedia, documentelor, desenelor, arhivelor, etc.
•
Modelele hibride sunt mixturi ale modelelor prezentate anterior, din care cel mai semnificativ este modelul relaţional-obiectual, obţinut prin extensii ale modelului de organizare tabelar şi izvorât din tendinţa spre universalitate a bazei de date (entităţi complexe şi de naturi diferite, evoluând în condiţii eterogene).
1.3.2. Baze de date relaţionale Bazele de date relaţionale au fost dezvoltate având în vedere în primul rând utilizatorii finali. Acest model are la bază teoria matematică a relaţiilor, ceea ce a făcut posibilă tratarea algoritmică a proiectării bazelor de date şi problema normalizării datelor. Modelul relaţional este un model simplu, bazat pe algebra relaţională, care a făcut posibilă dezvoltarea limbajelor relaţionale sub forma unui software specializat ce asistă procesul de implementare a bazelor de date. Astfel de limbaje sunt SQL-ul (Structured Query Language) şi QBE (Query By Example). În momentul de faţă, există multe sisteme performante de gestiune a bazelor de date relaţionale precum Oracle, DB2, MySQL, Informix, etc. În cazul bazelor de date relaţionale mari şi foarte mari, s-au impus SGBD-uri precum Oracle, DB2 şi Informix. Acestea au la bază tehnologia client-server. Transformarea modelului conceptual, a ERD-ului, în modelul fizic, adică în baza de date propriu-zisă, se numeşte mapare. Acest proces implică transformarea fiecărui element al ERD-ului. Prima etapă a acestui proces constă în crearea tabelelor bazei de date. Astfel:
fiecărei entităţi îi va corespunde câte un tabel. Spre deosebire de entitate, un tabel va avea numele un substantiv la plural. De exemplu, entitatea ANGAJAT se va transforma în tabela ANGAJAŢI, entitatea ELEV, în tabela ELEVI, etc.
Fiecare atribut al unei entităţi va deveni o coloană a tabelei. Fiecare coloană va memora date de acelaşi tip.
Fiecare instanţă a unei entităţi se va transforma într-un rând (sau înregistrare) al tabelului corespunzător.
Unicul identificator al entităţii devine cheia primară a tabelei. Coloana sau combinaţia de coloane care identifică în mod unic toate liniile unui tabel se numeşte cheie primară.
Capitolul 1. Proiectarea bazelor de date
31
Deci, orice tabelă are linii şi coloane şi conţine datele organizate conform anumitor structuri. În limbajul bazelor de date, coloanele se numesc câmpuri. Fiecare coloană reprezintă un câmp cu o denumire unică, de un anumit tip (şir de caractere, numeric, dată calendaristică, etc.), având o dimensiune prestabilită. Rândurile tabelei se numesc înregistrări. Vom vedea pe parcursul următorului paragraf cum mapăm relaţiile dintre entităţi. numele entităţii la plural numele tabelei atributul coloana
instanţa linia
Figura 1.31. Maparea entităţilor
Informaţiile despre o tabelă a bazei de date vor fi prezentate folosind diagramele de tabelă care sunt nişte tabele de forma celui din Tabelul 1.3, în care vom nota numele coloanelor pe care le va avea tabela bazei de date, notăm dacă o coloană face parte din cheia primară, caz în care vom scrie un pk (primary key) în coloana a treia, sau dacă face parte din cheia străină, caz în care vom scrie în coloana a doua un fk (foreign key), iar în ultima coloană vom nota dacă atributul este opţional sau obligatoriu. Pentru aceasta vom folosi aceleaşi simboluri ca şi în cazul ERD-ului. Asupra cheilor străine vom reveni în paragraful următor. În tabelul 1.3 vedeţi diagrama tabelei CĂRŢI corespunzǎtoare entitǎţii CARTE: Numele coloanei
Tip cheie
Opţionalitatea
titlu
Pk
*
autor
Pk
*
data_apariţiei
*
format
*
nr_pagini
*
Tabelul 1.3. Exemplu de diagramă de tabel
Se observă că deocamdată nu avem nicio cheie străină, deoarece cheia străină provine din relaţiile în care entitatea este implicată. Cum deocamdată această entitate nu are nici o relaţie cu nicio altă entitate, nu vom avea nicio cheie străină.
32
Manual de Informatică pentru clasa a XII-a
Completaţi diagramele de tabelă pentru entităţile de mai jos:
Figura 1.32. Entităţi propuse ca exerciţiu
1.3.3. Maparea relaţiilor 1.3.3.1. Maparea relaţiilor one-to-many Să începem cu un exemplu. Vom considera ERD-ul din Fig. 1.33:
Figura 1.33. Exemplu de ERD
Să ne reamintim cum se citeşte relaţia dintre cele două entităţi: Fiecare JUCĂTOR poate juca într-o ECHIPĂ şi numai una. La fiecare ECHIPĂ trebuie sǎ joace unul sau mai mulţi JUCĂTORI. Observăm că nu putem memora toţi jucătorii care joacă la o echipă în cadrul tabelei ECHIPA, deoarece ar trebui să introducem o coloană cu valori multiple. Invers însă, putem cu uşurinţă să memorăm, pentru fiecare jucător, echipa la care joacă, deoarece acesta nu poate juca decât la o singură echipă.
Capitolul 1. Proiectarea bazelor de date
33
Oare cum putem memora echipa la care joacă un jucător? Răspunsul este destul de simplu. Vom memora pentru fiecare jucător codul echipei la care joacă. Adică diagrama de tabel corespunzătoare entităţii JUCĂTOR va fi următoarea: Numele coloanei Nr_legitimatie Nume Prenume Data_nasterii Adresa Telefon Email cod_echipa
Tip cheie Pk
Fk
Opţionalitatea * * * * * o o o
Tabelul 1.4. Diagrama de tabel corespunzătoare entităţii JUCĂTOR
De pe tabela anterioară puteţi deduce încă un element important al mapării relaţiilor: dacă relaţia pe partea many este opţională atunci şi coloanele cheii străine vor fi opţionale. Ce înseamnă acest lucru? Cum un jucător poate la un moment dat să nu joace la nici o echipă, câmpul cod_echipă va rămâne necompletat în dreptul lui (va avea valoarea NULL). Dacă însă relaţia este obligatorie pe partea many, atunci coloanele ce fac parte din cheia străină vor fi obligatorii. În general, la maparea unei relaţii de tip one-to-many vom introduce, în tabela corespunzătoare entităţii de pe partea many a relaţiei, cheia primară a entităţii de pe partea one a relaţiei. Câmpurile astfel introduse se vor numi chei străine (în engleză, foreign key). Aşadar: -
cheia străină a unei tabele este cheia primară din tabela referinţă;
-
cheia străină este întotdeauna introdusă în tabela corespunzătoare entităţii din partea many a relaţiei. 1.3.3.2. Maparea relaţiilor one-to-one
Dându-se două entităţi A şi B legate între ele printr-o relaţie one-to-one, este evident că putem include cheia primară a lui A în cadrul tabelei B, dar putem proceda la fel de bine şi invers, incluzând cheia primară a tabelei B în cadrul tabelei A, deoarece fiecărei instanţe a entităţii A îi corespunde cel mult o instanţă a entităţii B, dar şi invers, oricărei instanţe a entităţii B îi corespunde cel mult o instanţă a entităţii A. Pentru relaţia din Fig. 1.34, de exemplu, putem memora - pentru fiecare persoană, seria de paşaport, dar şi invers - pentru fiecare paşaport, putem memora cnp-ul deţinătorului.
34
Manual de Informatică pentru clasa a XII-a
Decizia depinde de specificul afacerii modelate. Dacă, de exemplu, ne interesează în primul rând persoanele şi abia apoi datele de pe paşapoarte, atunci vom adopta probabil prima variantă, a memorării seriei de paşaport în cadrul tabelei PERSOANE, iar dacă însă baza de date este destinată evidenţei paşapoartelor, atunci probabil vom adopta varianta a doua.
Figura 1.34. Exemplu de ERD
Uneori este convenabil să memorăm cheia străină în ambele părţi ale relaţiei, în exemplul nostru, pentru fiecare paşaport să memorăm cnp-ul persoanei care îl deţine, dar şi pentru fiecare persoană să memorăm seria de paşaport.
1.3.4. Maparea relaţiilor barate Relaţiile barate se transformǎ în urma mapǎrii în cheie străină în tabela aflată în partea many a relaţiei, la fel ca la maparea oricărei relaţii one-to-many. Bara de pe relaţie exprimă faptul că acele coloane ce fac parte din cheia străină vor deveni parte a cheii primare a tabelei din partea many a relaţiei barate. Pentru exemplul din Fig. 1.35, cheia primară a tabelei ATRIBUTE va fi formată din coloanele denumire_atribut şi denumire_entitate, aceasta din urmă fiind de fapt cheie străină în tabela ATRIBUTE:
Figura 1.35. Maparea relaţiilor barate
Vom avea diagramele de tabel: Numele coloanei denumire
Tip cheie Pk
Opţionalitatea *
Tabelul 1.5. Diagrama de tabel ENTITĂŢI
Capitolul 1. Proiectarea bazelor de date
Numele coloanei denumire_atribut denumire_entitate opţionalitate
Tip cheie Pk Pk, Fk
35
Opţionalitatea * * *
Tabelul 1.6. Diagrama de tabel ATRIBUTE
Să considerăm acum un exemplu în care există mai multe relaţii barate, în cascadă:
Figura 1.36. Relaţii barate în cascadă
Vom avea tabelele de mai jos: Numele coloanei idA C1
Tip cheie Pk
Opţionalitatea * *
Tabelul 1.7. Diagrama de tabel pentru entitatea A
Numele coloanei idB C2 idA
Tip cheie Pk Pk, Fk
Opţionalitatea * * *
Tabelul 1.8. Diagrama de tabel pentru entitatea B
Numele coloanei idC C3 idA idB
Tip cheie Pk Pk, Fk Pk, Fk
Opţionalitatea * * * *
Tabelul 1.9. Diagrama de tabel pentru entitatea C
Numele coloanei idD C4 idA
Tip cheie Pk Fk
Opţionalitatea * * *
Tabelul 1.10. Diagrama de tabel pentru entitatea D
36
Manual de Informatică pentru clasa a XII-a
1. Reluaţi exerciţiile propuse pe parcursul paragrafelor anterioare şi realizaţi maparea ERD-urilor obţinute. 2. Realizaţi maparea următoarei hărţi a relaţiilor.
Figura 1.37. Harta relaţiilor propusă ca aplicaţie
1.3.5. Operaţii specifice prelucrării bazelor de date Orice sistem de gestiune a bazelor de date (SGBD) trebuie să asigure următoarele funcţii: •
definirea structurii bazei de date;
•
încărcarea datelor în baza de date (adăugarea de noi înregistrări la baza de date);
•
accesul la date pentru: o
interogare (afişarea datelor, sortarea lor, calcule statistice, etc.);
o
ştergere;
o
modificare;
Capitolul 1. Proiectarea bazelor de date
•
•
•
37
întreţinerea bazei de date: o
refacerea bazei de date prin existenţa unor copii de siguranţă;
o
repararea în caz de incident;
o
colectarea şi refolosirea spaţiilor goale;
posibilitatea de reorganizare a bazei de date prin: o
restructurarea datelor;
o
modificarea accesului la date;
securitatea datelor.
O parte din aceste operaţii pot fi realizate cu ajutorul limbajului SQL, altele cu ajutorul unor programe specializate, care sunt puse la dispoziţia administratorului bazei de date de către sistemul de gestiune al bazelor de date.
1.3.6. Reguli de integritate Detalierea caracteristicilor pe care trebuie să le prezinte un SGBD pentru a fi considerat relaţional a fost realizată de către E. F. Codd în 1985 sub forma a 13 reguli. Una dintre aceste reguli precizează că restricţiile de integritate trebuie să poată fi definite în limbajul utilizat de SGBD pentru definirea datelor. Regulile de integritate garantează că datele introduse în baza de date sunt corecte şi valide. Aceasta înseamnă că dacă există orice regulă sau restricţie asupra unei entităţi, atunci datele introduse în baza de date respectă aceste restricţii. Tipurile de reguli de integritate sunt următoarele:
Integritatea entităţilor – indică faptul că nici o coloană ce face parte din cheia primară nu poate avea valoarea NULL. În plus, pentru fiecare înregistrare, cheia primară trebuie să fie unică.
Integritatea de domeniu – acest tip de reguli permite ca într-o anumită coloană să se introducă doar valori dintr-un anumit domeniu. De exemplu, putem impune ca salariul unui angajat să fie cuprins între 4500 şi 5000 RON.
Integritatea referenţială – este o protecţie care asigură ca fiecare valoare a cheii străine să corespundă unei valori a cheii primare din tabela referită. De exemplu, referindu-ne la tabelele JUCĂTORI şi ECHIPE, corespunzătoare ERD-ului din Fig. 1.33, cod este cheie primară în tabela ECHIPE, iar în tabela JUCĂTORI, cod devine cheie străină. Astfel, valoarea câmpului cod din cadrul tabelei JUCĂTORI corespunzătoare unui anumit jucător trebuie să se regăsească printre valorile câmpului cod din tabela ECHIPE, altfel ar însemna că jucătorul respectiv joacă la o echipă inexistentă (vezi Fig. 1.38).
38
Manual de Informatică pentru clasa a XII-a
Figura 1.38. Exemplu de încălcare a integrităţii referenţiale
Situaţii de încălcare a integrităţii referenţiale pot apărea:
la adăugarea unei noi înregistrări în baza de date, se poate încerca introducerea unor valori invalide pentru câmpurile cheii străine;
la actualizarea bazei de date;
la ştergerea unei înregistrări. De exemplu, se şterge înregistrarea corespunzătoare unei anumite echipe (echipa se desfiinţează). Înregistrările jucătorilor care au jucat la acea echipă vor încălca integritatea referenţială, deoarece se vor referi la o echipă care nu mai există. Soluţiile posibile sunt ca la ştergerea unei echipe, toţi jucătorii care au activat la acea echipă să fie şi ei şterşi din baza de date (ştergere în cascadă), sau valoarea câmpului cod_echipă pentru acei jucători să fie setată la NULL, ceea ce înseamnă că acei jucători nu activează la nicio echipă.
1.3.7. Programe de validare şi de acţiune În realizarea modelului conceptual al unei baze de date se ţine cont de modul în care funcţionează afacerea modelată, datele care trebuie să fie memorate, relaţiile dintre acestea, etc. Modul de utilizare a diferitelor date, modul în care acestea sunt relaţionate pot diferi de la o afacere la alta. Regulile afacerii unei organizaţii se referă în esenţă la procesele şi fluxurile tuturor datelor şi activităţilor zilnice din cadrul organizaţiei. Cum funcţionează organizaţia? Care sunt activităţile sale?
Capitolul 1. Proiectarea bazelor de date
39
Regulile afacerii acoperă următoarele aspecte ale unei organizaţii:
Orice tip de politici organizaţionale de orice tip şi de la orice nivel al organizaţiei.
Orice tip de formule de calcul (ca, de exemplu, modul de calcul al ratelor pentru diverse împrumuturi, modul de calcul al salariilor, etc.).
Orice tip de reguli impuse de lege sau reguli interne ale organizaţiei.
Regulile simple ale afacerii pot fi implementate în modelul bazei de date prin intermediul relaţiilor dintre entităţi. Acest tip de reguli se numesc reguli structurale. Alte reguli ale afacerii pot fi implementate folosind regulile de integritate despre care am discutat în paragraful anterior. Există totuşi reguli pentru implementarea cărora va trebui să scriem programe speciale folosind limbaje specializate specifice SGBD-ului utilizat. Acest tip de reguli se numesc reguli procedurale.
1. Când mapaţi un ERD, care dintre următoarele afirmaţii NU este adevărată? a) Fiecare entitate este mapată într-o tabelă. b) Fiecare atribut este mapat într-o coloană a tabelei corespunzătoare. c) Fiecare entitate în parte este mapată într-o linie din tabelul corespunzător. d) Fiecare relaţie one-to-many se transformă într-o cheie străină. 2. Într-o tabelă, o instanţă a unei entităţi este mapată ca: a) o relaţie many-to-many;
b) o linie din tabel;
c) o coloană din tabel;
d) un atribut;
e) un index.
3. Două entităţi A şi B se găsesc într-o relaţie one-to-one care este opţională la ambele capete. Care dintre următoarele variante este o soluţie corectă de mapare ? a) Combinarea celor două entităţi A şi B într-o singură relaţie. b) Crearea a două tabele separate şi includerea unei chei străine atât în tabela A cât şi în tabela B. c) Combinarea celor două entităţi A şi B într-o singură tabelă. d) Utilizarea unei chei primare care să fie o combinaţie a cheilor primare din A şi B. 4. Referitor la ERD-ul din Fig. 1.39, care dintre afirmaţiile de mai jos corespund unei variante corecte de mapare? a) Se preia cheia primară din tabela PERSOANE şi se adaugă ca şi cheie străină la tabela MASINI.
40
Manual de Informatică pentru clasa a XII-a
Figura 1.39. ERD propus pentru problema 4
b) Se preia cheia primară din tabela MASINI şi se adaugă ca şi cheie străină la tabela PERSOANE. c) Se creează o singură tabelă cu informaţiile din ambele entităţi. d) Se preiau cheile primare din ambele tabele şi se introduc într-o nouă tabelă numită PROPRIETARI. e) Oricare dintre variantele de mai sus este corectă. 5. O bază de date conţine următoarele tabele: Tabela DEPARTAMENTE DepNo Departament 1 IT 2 Electric 3 Geografie 4 Istorie 5 Business
Tabela ANGAJATI IdAngajat NumeAngajat 1 Ionescu 2 Georgescu 3 Vasilescu 4 Marinescu 5 Andreescu
Tabela ANGAJARI IdAngajat DepNo 1 1 3 2 4 1 3 3 1 2 2 5
Desenaţi ERD-ul din care s-au obţinut prin mapare aceste tabele. (vezi baremele de notare şi de corectare de la pag. 380)
Capitolul 1. Proiectarea bazelor de date
41
1.4. Managementul de proiect 1.4.1. Ce este un proiect ? Un proiect este o secvenţă de acţiuni intercorelate, care se derulează într-o perioadă de timp clar definită şi delimitată, orientate către îndeplinirea unor obiective cu caracter unic şi precis. Putem defini managementul de proiect ca fiind efortul planificării, organizării şi mobilizării resurselor pentru un scop dat. Managementul de proiect este de fapt un instrument, un set de metode şi tehnici care ne ajută să atingem cu eficacitate scopurile şi obiectivele propuse.
1.4.2. Etape în realizarea unui proiect Orice proiect trece printr-o serie întreagă de etape. Ceea ce este important de reţinut este faptul că orice proiect este un proces iterativ, în sensul că orice etapă poate fi repetată de mai multe ori, în funcţie de necesităţile de redefinire a anumitor cerinţe. Etapele principale pe care le parcurgem pentru realizarea unui proiect sunt următoarele:
Definirea proiectului o
Validarea proiectului – în această etapă vor fi analizate toate documentele prezente în propunerea de proiect. Această analiză va duce fie la confirmarea şi acceptarea proiectului, fie va duce la respingerea, sau eventual regândirea acestuia, în cazul în care propunerea de proiect nu a fost bine realizată, şi resursele au fost subestimate.
o
Definirea proiectului – constă în enunţarea problemei, stabilirea scopului proiectului, stabilirea unei liste a posibilelor soluţii etc. Orice proiect propus poate avea elemente pe care cel care l-a propus nu a considerat necesar să le detalieze, însă echipa de proiect poate avea nevoie de informaţii suplimentare pentru a înţelege corect enunţul proiectului.
Organizarea proiectului o
Stabilirea obiectivelor
o
Stabilirea grupului ţintă - când încercaţi să stabiliţi care este grupul ţintă al unui proiect trebuie să răspundeţi la următoarele întrebări: Cine trebuie să ştie despre proiect? Cine va folosi acest proiect? Asupra cui vor avea impact rezultatele proiectului? Cine finanţează acest proiect? Cine aprobă acest proiect? Cine livrează proiectul? Cine va trebui să fie instruit?
42
Manual de Informatică pentru clasa a XII-a
o
Stabilirea cerinţelor proiectului – este un proces iterativ care poate implica negocierea. Fiind conducătorul proiectului, ştiţi ce este posibil şi ce nu în ceea ce priveşte scopul proiectului, timpul alocat, costurile, cerinţele de calitate etc. Un proiect care nu îndeplineşte cerinţele utilizatorului este din start un eşec.
o
Stabilirea infrastructurii proiectului – infrastructura se referă la elemente precum instrumente de comunicare în cadrul echipei (telefoane mobile, PDA, laptop, etc.), spaţiu de lucru pentru membrii echipei (birou), echipamente de birou, laboratoare, etc.
o
Stabilirea sistemului de calitate a proiectului
o
Formarea echipei de proiect
Planificarea proiectului – planul proiectului prezintă desfăşurarea normală, ideală a unui proiect. Acesta oferă reperele necesare evaluării situaţiei proiectului. Fără existenţa unui plan dinainte stabilit, exercitarea controlului este practic imposibilă.
Elaborarea proiectului – în această etapă se stabilesc detaliile tehnice şi de design, se revizuiesc schemele tehnice, se revizuiesc criteriile de cost şi performanţă. Această etapă vizează conturarea unui model al aplicaţiei. Se proiectează bazele de date, se realizează interfeţele aplicaţiei (rapoarte, ecrane, meniuri etc), se proiectează prelucrările automate, etc.
Dezvoltarea proiectului
Implementarea proiectului – constă în instalarea produsului şi testarea sa, instruirea viitorilor utilizatori. Se testează produsul în condiţii reale, şi se înlătură eventualele erori depistate în funcţionare. Tot în această fază personalul implicat în proiect este redus. Se încep activităţile de publicitate.
Finalizarea proiectului – se elaborează rapoartele finale, se eliberează personalul angajat în derularea proiectului.
1.4.3. Principiile lucrului în echipă Colaborarea înseamnă mai ales implicarea oamenilor în crearea propriilor soluţii la problemele cu care se confruntă. În cadrul unui proces colaborativ, oamenii au ocazia să afle punctul de vedere şi perspectiva celorlalţi şi să gândească împreună soluţii la problemele comune. Colaborarea este o artă ! Sunteţi uneori puşi în situaţia de a vorbi şi colabora cu persoane pe care nu le cunoaşteţi, cu care nu sunteţi de acord sau pe care nu le agreaţi. Mărimea echipei de proiect este un factor important care poate influenţa modul de conducere al acesteia. Într-o echipă prea mare pot apărea probleme de comunicare, dificultăţi în luarea deciziilor. În general, se acceptă că o echipă pentru a putea fi eficientă nu trebuie să depăşească un număr de 10 persoane.
Capitolul 1. Proiectarea bazelor de date
43
În cazul proiectelor cu număr mare de persoane implicate, participanţii la proiect trebuie organizaţi în mai multe echipe satelit intercorelate, coordonate de o echipă principală al cărei rol principal este să asigure o comunicare facilă şi eficientă între toate echipele satelit. Fiecare membru al unei echipe de proiect trebuie să cunoască ceea ce se aşteaptă de la el. Trebuie stabilite de la început rezultatele aşteptate de la fiecare membru al echipei în parte, acţiunile ce trebuie executate pentru obţinerea rezultatului, relaţiile de subordonare în cadrul echipei, metodele de măsurare a performanţei fiecărui membru al echipei. Liderul echipei are în primul rând rolul de a stabili, menţine şi proteja un proces colaborativ care permite tuturor să participe neîngrădit la munca grupului.
1.4.4. Pregătirea şi susţinerea unei prezentări În momentul finalizării unui proiect va trebui să prezentaţi rezultatul muncii voastre în faţa clientului. Susţinerea unei prezentări în public este pentru oricine o sursă de stres. Mulţi oameni ar prefera să evite complet această problemă, dar de multe ori este imposibil de evitat. Indiferent că lucrăm singuri sau în echipă, vom putea fi puşi în situaţia de a face o prezentare publică. Adevărul este că susţinerea unei prezentări publice nu trebuie să fie un motiv de stres. Atât timp cât aveţi în minte câteva principii de bază, vorbitul în public va deveni o experienţă plăcută pentru voi. Iată câteva principii de care trebuie să ţineţi seama pentru a depăşi dificultăţile legate de vorbitul în public: •
Vorbitul în public NU este un motiv real de stres. Mulţi oameni erau la început îngroziţi de ideea de a vorbi în public. Le tremurau genunchii, vocea, gândurile o luau razna. Totuşi, ei au învăţat să elimine definitiv teama de a vorbi în public.
•
Nu îţi propune să fi genial sau perfect, chiar dacă aşa ţi se pare că ar trebui. Ţi se poate întâmpla să greşeşti, ţi se poate întâmpla să uiţi porţiuni întregi din ceea ce vroiai să spui, poţi să nu glumeşti deloc şi totuşi prezentarea ta să aibă succes. Totul depinde de cum defineşti tu şi auditorul tău succesul. Auditorul tău nu aşteaptă de la tine să fi perfect. Cu cât încerci mai tare să fi perfect cu atât mai mult vei adânci anxietatea pe care o ai şi efectul va fi contrar celui scontat. Ceea ce este important atunci când faci o prezentare în faţa unui public este să oferi ceva auditorului. Atâta timp cât auditorul rămâne cu ceva de pe urma prezentării, ei o vor considera un succes.
•
Nu încerca să transmiţi prea multe informaţii într-o prezentare. Nu trebuie să transmiţi “tone” de informaţii şi detalii, oferă publicului doar ceea ce el doreşte cu adevărat. Studiile arată că oamenii îşi amintesc doar foarte puţine elemente din ceea ce vorbitorii prezintă.
44
Manual de Informatică pentru clasa a XII-a
•
Nu încerca să mulţumeşti pe toată lumea, acesta este un punct de vedere nerealist.
•
Nu încerca să imiţi alţi prezentatori, e un lucru foarte dificil. Încearcă să fi tu însuţi, e mult mai uşor.
•
Nu încerca să controlezi comportamentul auditorului. Dacă oamenii sunt agitaţi, nu încerca să le controlezi comportamentul. Dacă cineva vorbeşte cu vecinul, citeşte ziarul sau chiar a adormit în timpul prezentării tale, ignoră-l!
•
Nu te scuza. Auditorul nu are de unde să ştie că ai uitat să spui ceva. Vorbeşte cu încredere, fi convins de ceea ce spui.
•
Organizează logic conţinutul prezentării. Orice prezentare va avea o introducere, conţinutul propriu-zis şi o concluzie.
•
Utilizează materiale audio-vizuale ajutătoare, dacă acestea sunt necesare. O prezentare în PowerPoint, bine realizată, poate fi de un real folos. o
Asigură-te din timp că întregul echipament (calculator, video-proiector, etc) funcţionează.
o
Nu bombarda auditorul cu efecte sonore sau cu animaţii exagerate şi utilizează în mod echilibrat culorile.
o
Include în prezentarea electronică doar cele mai importante idei.
o
Nu încărca slide-urile cu prea multe texte. În general, se admit 7-10 cuvinte pe linie şi maximum 10 linii de text pe un slide.
o
Preferă un grafic în locul textelor, dar nu exagera cu mai mult de două grafice pe un slide.
•
Păstrează contactul vizual cu auditorul. Încearcă în acest fel să faci fiecare persoană din public să se simtă implicată.
•
Fă scurte pauze. Nu alerga prin prezentare, dă-ţi răgazul să respiri. Dă timp audienţei să reflecte la ceea ce ai spus.
•
Adaugă puţin umor prezentării tale, dacă acest lucru este posibil. Păstrează treaz interesul auditorului pe parcursul întregii prezentări.
•
Nu ţine mâinile în buzunar în timpul prezentării !
•
Adoptă o ţinută adecvată în ziua prezentării. Atrage atenţia auditorului asupra a ceea ce spui, nu a mesajelor de pe tricou sau asupra bijuteriilor pe care le porţi !
În acest moment v-aţi însuşit elementele de bază ale modelării bazelor de date. Aţi văzut diverse situaţii ce pot apărea pe parcursul creării modelului conceptual şi cum să rezolvaţi anumite situaţii problemă.
Capitolul 1. Proiectarea bazelor de date
45
În acest subcapitol aţi aflat cum se organizează un proiect, care sunt etapele de realizare ale lui şi cum să organizaţi munca într-o echipă. De asemenea, ştiţi cum să pregătiţi şi să faceţi o prezentare în faţa unui public. Este momentul să aplicaţi toate aceste cunoştinţe!
Formaţi echipe de 2 - 4 elevi, alegeţi-vă o temă de proiect, fie din temele propuse în această secţiune, fie una propusă chiar de voi. Realizaţi modelul conceptual al afacerii modelate. Atenţie! Repartizaţi sarcinile în mod echitabil în cadrul echipei de proiect. Pregătiţi o prezentare a proiectului realizat, materialele vizuale (postere, pliante, prezentarea PowerPoint), care să vă ajute la susţinerea prezentării. Puteţi chiar organiza împreună cu cadrul didactic, un concurs la nivelul clasei sau al şcolii, la care să invitaţi şi alţi profesori din şcoală. Nu uitaţi să documentaţi fiecare presupunere pe care aţi făcut-o în realizarea proiectului! Tema 1: „Campionatul Naţional de Fotbal”. O bază de date memorează informaţii despre jucătorii şi cluburile din cele patru divizii din campionatul naţional de fotbal. Fiecare club de fotbal are un nume unic în întregul campionat. Un club de fotbal poate avea mai multe echipe în campionat. Pentru fiecare echipă se cunoaşte căpitanul său, care este unul dintre jucători. Jucătorii au asociat un identificator unic, un nume, nu neapărat unic şi sunt angajaţi la diferitele echipe. În baza de date se păstrează şi detalii privind nivelul abilităţilor (notă cuprinsă între 1 şi 10) fiecărui jucător pentru fiecare dintre poziţii de joc (portar, apărător, mijlocaş, etc). De exemplu, jucătorul Ionescu poate avea nivelul 10 pe postul de portar, 7 pentru poziţia de apărător, etc. Este important ca în baza de date să se memoreze un istoric al tuturor jucătorilor, la ce echipe au jucat, în ce perioadă, etc. Se va memora şi un istoric al golurilor marcate de fiecare jucător de-a lungul carierei. Pentru fiecare gol se va şti data, meciul în care a fost marcat, minutul, etc. Tema 2: „Firmă de închirieri de maşini”. Trebuie să proiectaţi baza de date a unei firme care oferă spre închiriere maşini de diferite tipuri. Trebuie să păstraţi informaţii despre maşinile firmei, firmele cu care firma are contracte de colaborare (de exemplu, garaje), maşinile închiriate, veniturile firmei şi bineînţeles date despre clienţii firmei. Maşinile sunt descrise prin date precum: producătorul, modelul, anul de fabricaţie, mărimea motorului, tipul de combustibil, numărul de pasageri, numărul de înmatriculare, preţul de cumpărare, data cumpărării, preţul de închiriere şi detalii privind asigurarea maşinii.
46
Manual de Informatică pentru clasa a XII-a
Toate reparaţiile importante asupra maşinilor firmei sunt făcute de firme cu care colaborează. Unele firme solicită plata serviciilor de service imediat după ce reparaţia a fost făcută, altele acceptă plata în rate a serviciilor. Trebuie ţinută evidenţa clară a fiecărei maşini, a celor închiriate, a celor aflate în reparaţii, etc. Se păstrează de asemenea evidenţa tuturor veniturilor şi cheltuielilor firmei: cumpărarea de noi maşini, închirierea de maşini, cheltuieli de reparaţii, vânzarea unor maşini mai vechi din parcul auto (firma preferă să nu păstreze în parcul auto o maşină mai mult de un an), taxe de asigurare a maşinilor etc. Firma deţine un portofoliu de clienţi destul de stabil. Pentru clienţii privilegiaţi oferă reduceri la închirierea de maşini. Aceşti clienţi au de asemenea posibilitatea de a rezerva o maşină din timp. O maşină poate fi închiriată pentru o perioadă de timp de la o zi la un an. Plata pentru închirierea unei maşini se poate face cash sau cu credit card. Se acceptă orice tip de card. Datele importante despre clienţi precum numele, adresa, numărul de telefon, seria permisului de conducere, etc. vor fi şi ele memorate în baza de date. Tema 3: „Firmă IT”. Trebuie să proiectaţi baza de date a unei companii de dimensiune medie din domeniul IT. Firma livrează diferite produse clienţilor săi, de la simple aplicaţii create la cerere, până la instalări de echipamente hardware şi software particularizat. Firma are ca angajaţi diverşi experţi, consultanţi şi personal auxiliar. Întregul personal este angajat pe termen nelimitat, nu există angajaţi temporari sau colaboratori. Compania este împărţită în mai multe departamente, fiecare departament fiind condus de către un angajat din cadrul departamentului respectiv. Pentru un proiect care trebuie dezvoltat în cadrul firmei, se formează o echipă de persoane selectate din mai multe departamente. Managerul de proiect este pe deplin şi exclusiv responsabil de conducerea proiectului, independent de ierarhia de conducere din cadrul firmei. Tema 4: „Spital”. Un spital este format din mai multe secţii, precum Pediatrie, Oncologie, Dermatologie etc. În fiecare secţie sunt internaţi mai mulţi pacienţi, pe baza recomandării medicului de familie şi a confirmării făcute de către un specialist al spitalului. La internare, sunt înregistrate datele personale ale pacienţilor. O fişă separată ţine evidenţa investigaţiilor făcute pacientului pe toată perioada internării, rezultatele acestor investigaţii, tratamentul aplicat pacientului şi rezultatele obţinute în urma tratamentelor efectuate. Un pacient este repartizat unui anumit medic care coordonează toate investigaţiile şi tratamentele aplicate pacientului, însă acesta poate solicita şi altor colegi să examineze pacientul său. Medicii sunt specialişti în diverse ramuri ale medicinii, şi pot avea în supraveghere mai mulţi pacienţi, nu neapărat toţi din aceeaşi secţie. Tema 5: „Editură”. O editură editează cărţi ştiinţifice din diferite domenii. Cărţile sunt scrise de autori specializaţi într-un anumit domeniu. Firma are angajaţi mai mulţi editori care nu sunt neapărat specialişti în diferitele domenii, fiecare editor fiind responsabil pentru mai multe publicaţii. O carte acoperă unul din domeniile în care este specialist autorul, fiecare autor lucrează cu un editor, dar poate avea spre publicare o altă carte de care este responsabil un alt editor.
PARTEA A II-A
CAPITOLUL Limbajul MySQL
În acest capitol veţi învăţa MySQL, limbaj de programare specializat pentru gestiunea bazelor de date relaţionale pe Internet. Cu ajutorul programului EasyPHP, veţi putea lucra uşor pe calculatorul dvs. Ce este şi de ce învăţăm MySQL ?
Cum rulăm MySQL pe propriul calculator ? Cum creăm o bază de date ?
Tabele – noţiuni elementare
Tipuri de date, operatori şi funcţii
Afişarea c oloanelor care rezultă în urma unui calcul
Valoarea NULL. Valori implicite
Ce sunt cheile primare şi cheile unice ?
Autoincrementare
Cum sortăm şi cum filtrăm datele ?
Cum actualizăm datele dintr-un tabel ?
Funcţii agregate
Utilizarea subinterogărilor
Cum putem grupa datele ?
Ce sunt uniunile de tabele ?
Cuvinte cheie: tipuri de date, operatori, funcţii, valoare implicită, cheie primară, cheie unică, autoincrementare, sortare, filtrare, actualizare, funcţii agregate, subinterogări, grupare, uniune
48
Manual de Informatică pentru clasa a XII-a
2.1. Ce este şi de ce învăţăm MySQL ? În ultimii ani, utilizarea bazelor de date pe Internet a luat o amploare deosebită. Există o mulţime de aplicaţii, extrem de utile (care le utilizează), cum ar fi: -
Aplicaţii de contorizare, aplicaţii prin care cei care au creat un site au posibilitatea să-şi contorizeze numărul de vizitatori ai site-ului respectiv sau, mai mult, contorizarea se poate extinde la nivel de pagină afişată. Pentru a evita cu un vizitator, care a deschis de mai multe ori pagina respectivă, să nu fie contorizat de mai multe ori, se va reţine adresa IP a acestuia.
-
Comerţ electronic, aplicaţii prin care anumite firme îşi promovează şi vând produsele de care dispun. În acest caz, bazele date vor reţine, pe de o parte, informaţii despre produse, iar pe de altă parte, comenzile clienţilor. Avantajele comerţului electronic sunt uriaşe pentru că nu implică cheltuieli pentru spaţiile de desfacere (magazine) şi, teoretic, oferta se adresează clienţilor din toată lumea.
-
Votul electronic, aplicaţii prin care se poate afla părerea vizitatorilor site-ului respectiv referitoare la tema supusă votului. Şi aici este important ca un vizitator să nu voteze de mai multe ori, motiv pentru care baza de date reţine adresa IP a vizitatorului.
-
Aplicaţii de comunicare - aplicaţii prin care diverşi vizitatori ai site-ului respectiv dezbat o anumită problemă, supusă discuţiei. În astfel de cazuri, bazele de date vor reţine informaţii despre cei care scriu (de multe ori, aceştia, mai întâi, trebuie să se înscrie în baza de date a site-ului) şi mesajele acestora.
Există o mulţime de alte aplicaţii ale bazelor de date: site-urile diverselor ziare, posturi de televiziune, bazele de date create şi exploatate de motoarele de căutare, etc. Şirul acestora este practic infinit. Iată motivul pentru care ne vom iniţia în crearea şi exploatarea bazelor de date pe Internet. Ce este SQL ? În practica creării şi utilizării bazelor de date relaţionale s-a impus necesitatea existenţei unui limbaj standard care permite efectuarea acestor operaţii. Astfel, a apărut SQL - Structured Query Language. Limbajul este supervizat de comisia de standardizare ANSI (American National Standards Institute), motiv pentru care se mai numeşte şi ANSI SQL. SQL nu este un limbaj de firmă, el este implementat de o mulţime de SGBD-uri, de această dată consacrate, cum ar fi: Microsoft Access, Oracle, Microsoft SQL Server şi, bineînţeles, MySQL. 1
Ce este MySQL ? MySQL este un limbaj specializat pentru gestiunea bazelor de date relaţionale pe Internet. Aşa cum s-a mai spus, are la bază limbajul SQL. MySQL gestionează baze de date care se găsesc pe server, iar comenzile pot fi date cu ajutorul limbajului PHP, dar şi cu alte limbaje, de exemplu Java. Revedeţi “Capitolul 1. Proiectarea bazelor de date” deoarece stă la baza tuturor noţiunilor prezentate aici! 1
Capitolul 2. Limbajul MySQL
⇒
49
Prin utilizarea pachetului EasyPHP putem să instalăm MySQL pe calculatorul nostru. Vedeţi Anexa 1! Exact în acest mod vom proceda pentru studiul limbajului MySQL, adică vom crea baze de date pe calculatorul nostru.
2.2. Cum rulăm MySQL pe propriul calculator ? Mai întâi, instalaţi pachetul EasyPHP, urmând paşii prezentaţi în Anexa 1. Există două modalităţi prin care se pot da comenzi MySQL pe calculatorul nostru. A) Prin utilizarea unei ferestre MS-DOS. Pentru aceasta va trebui să identificaţi programul ”cmd.exe” care simulează sistemul de operare amintit şi să creaţi un shortcut către acesta. Pentru comoditatea apelului, este indicat ca shortcut-ul să se găsească pe Desktop. În cazul nostru, va trebui ca fereastra CMD să fie deschisă în subfolder-ul bin, al folder-ului care conţine MySQL. Executaţi clic cu butonul drept al mouse-ului şi selectaţi Properties. În edit-ul Start in, al ferestrei care apare, introduceţi calea către subfolder-ul bin al folder-ului mysql. De exemplu, pe calculatorul pe care experimentăm utilizarea MySQL-ului, această cale este: "C:\Program Files\EasyPHP1-8\mysql\bin" Lansaţi în executare programul EasyPHP din meniu: Start, Programs, EasyPHP şi executaţi dublu-clic pe shortcut-ul către CMD. Daţi comanda: mysql -u root -p şi introduceţi parola aleasă. Să observăm că MySQL afişează prompter-ul ”mysql>” (vedeţi în figura de mai jos fereastra CMD):
Figura 2.1. Prompter-ul MySQL din fereastra CMD
De acum putem da comenzi MySQL! Această modalitate de lucru prezintă avantajul că orice eveniment are loc numai ca urmare a unei comenzi date de la tastatură şi pentru început, din considerente pedagogice, este bine să procedăm aşa. Desigur, există şi numeroase dezavantaje, cum ar fi faptul că de multe ori se pierde timpul tastând, pentru că în cazul unei comenzi greşite aceasta trebuie reluată, ş.a.m.d.
50
Manual de Informatică pentru clasa a XII-a
B) Se poate utiliza şi un ansamblu de script-uri PHP aflate în fişierul ”index.php” din folder-ul de phpmyadmin. Daţi browser-ului pe care-l utilizaţi comanda: http://localhost/phpmyadmin/. Va fi afişată o fereastră în care vi se va cere parola (vezi Fig. 2.2.). De acum puteţi lucra cu MySQL prin utilizarea unui mediu vizual.
Figura 2.2. Fereastra de autentificare
Observaţie ! Din considerente pedagogice şi pentru generalitatea prezentării, în această carte vom folosi prima formă, cea în care se lucrează prin utilizarea unei ferestre MS-DOS.
2.3. Crearea unei baze de date ⇒
În MySQL, pentru a crea o bază de date se dă comanda: CREATE DATABASE nume_baza;
În urma acestei comenzi, teoretic, se creează baza de date cu numele indicat. În fapt, se creează un folder cu numele bazei de date în subfolder-ul data al folder-ului MySQL: C:\Program Files\EasyPHP1-8\mysql\data. Dacă există deja o bază de date cu acest nume, se refuză crearea uneia noi. ⇒
În cazul în care, după deschiderea aplicaţiei sau în timpul sesiunii de lucru, se doreşte lucrul cu o anumită bază de date, se dă comada de mai jos: USE nume_baza;
⇒
Pentru ştergerea unei baze de date se utilizează comanda: DROP DATABASE nume_baza
⇒
Uneori, din anumite motive, dorim o listă a bazelor de date existente. În acest caz, se utilizează comanda de mai jos: SHOW DATABASES
Capitolul 2. Limbajul MySQL
51
2.4. Tabele. Noţiuni elementare Într-un tabel coloanele sunt identificabile prin nume, iar rândurile, prin valorile pe care le memorează. Toate datele dintr-o coloană au acelaşi tip. Un tabel are un număr specificat de coloane, dar are un număr nespecificat de rânduri. Uneori, când ne referim la un rând, folosim şi termenul de înregistrare, iar atunci când ne referim la data din rând, situată într-o anumită coloană, folosim 1 şi termenul de câmp . ⇒
O instrucţiune prin care se poate crea un tabel este prezentată mai jos, unde 2 ceea ce este trecut între paranteze drepte este considerat facultativ :
CREATE TABLE nume_tabel ( nume_coloana1 tip_data nume_coloana2 tip_data ... nume_coloanan tip_data );
[specificatori], [specificatori], [specificatori]
Specificatorii se referă la cheia primară, valori distincte, valori implicite, autoincrementare, dacă printre valorile reţinute se poate găsi sau nu valoarea NULL. Toate acestea sunt tratate separat. Exemplul 2.1. Se creează un tabel cu 3 coloane: prima conţine codul materialului şi poate reţine cel mult 5 caractere, a doua conţine denumirea materialului şi poate reţine până la 20 de caractere, iar ultima reţine cantitatea din fiecare material (în bucăţi) şi poate reţine un număr natural cu maximum 3 cifre: CREATE TABLE materiale (cod char(5), denumire char(20), cantitate_buc INT(3) );
⇒
Pentru introducerea rândurilor în tabel se utilizează comanda de mai jos, unde se introduc, pe rând, toate câmpurile unei linii, în ordinea în care au fost declarate coloanele: INSERT INTO nume_tabel VALUES (data1, data2...datan);
Exemplul 2.2. Se inserează în tabel două linii: INSERT IMTO materiale VALUES(‘001’, ‘panouri’,78); INSERT IMTO materiale VALUES(‘007’, ‘placi’,0); Noţiunea de tabel este prezentată pe scurt. O prezentare amănunţită se găseşte în capitolul anterior, “Proiectarea bazelor de date”.
1
Specificatorii vor fi trataţi separat. Tabelul astfel creat nu conţine nicio înregistrare. Pentru adăugarea înregistrărilor utilizăm altă instrucţiune MySQL.
2
52
Manual de Informatică pentru clasa a XII-a
În practica utilizării bazelor de date, instrucţiunea anterioară este considerată ca generatoare de erori, prin faptul că se poate greşi ordinea de introducere a datelor, iar efectul este acela că tabelul va conţine date eronate. Din acest motiv, se preferă forma de mai jos a instrucţiunii, deşi este necesar să scriem mai mult… ⇒
Se inserează în tabel valori pentru coloanele indicate în ordinea în care au fost declarate coloanele: INSERT INTO nume_tabel (nume_coloana1,... nume_coloanak) VALUES (data1,...datak);
⇒
Pentru a afişa întreg tabelul se utilizează comanda: SELECT * FROM nume_tabel
Exemplul 2.3. Pentru tabelul creat anterior se dă comanda: SELECT * FROM materiale
Figura 2.3. Exemplu de tabel
Există posibilitatea să afişăm numai anumite coloane ale tabelului, în ordinea pe care o dorim, dacă folosim instrucţiunea de mai jos: SELECT nume_coloana1,... nume_coloanak FROM nume_tabel
Să observăm faptul că, atunci când afişăm un tabel, în capul său se trece numele coloanelor din tabel. Dacă dorim ca în capul de tabel să figureze alt nume pentru o coloană, atunci, în instrucţiunea de mai sus, în loc de a scrie numai numele coloanei, vom scrie numele coloanei urmat de cuvântul cheie AS şi de numele care dorim să fie afişat în capul de tabel. Astfel, utilizăm alias-uri pentru numele coloanelor.
Exemplul 2.4. Pentru tabelul de mai sus vom scrie: SELECT cod AS codul, denumire AS nume, cantitate_buc AS cantitate FROM materiale;
⇒
Putem vizualiza numele tabelelor existente în baza de date prin utilizarea instrucţiunii următoare: SHOW TABLES [FROM nume_baza]
⇒
În caz că am uitat care sunt coloanele dintr-un anumit tabel al bazei de date şi tipul acestora, putem utiliza instrucţiunea: SHOW COLUMNS FROM nume_tabel
Capitolul 2. Limbajul MySQL
53
2.5. Tipuri de date în MySQL Aşa cum am văzut, coloanele au un anumit tip. Până în prezent, am utilizat câteva tipuri fără a oferi o prezentare unitară a acestora. Este momentul s-o facem acum. În linii mari, tipurile de date din MySQL se împart în: a) tipuri care reţin şiruri de caractere; b) tipuri numerice; c) tipuri care reţin data, ora. În continuare, vom prezenta detaliat pe fiecare în parte.
2.5.1. Tipuri de date care reţin şiruri de caractere Tipurile care reţin şiruri de caractere sunt prezentate mai jos: Tip
Descriere
CHAR[(n)]
VARCHAR TINYTEXT TEXT
MEDIUMTEXT
LONGTEXT
ENUM
SET
Un câmp de acest tip reţine un şir de caractere de lungime n (fixă). În caz că n nu este precizat, reţine un caracter. Ocupă n octeţi. Un câmp de acest tip reţine şiruri de cel mult 255 de caractere. Un octet reţine lungimea efectivă a şirului. Ocupă n+1 octeţi. La fel ca mai sus. Un câmp de acest tip reţine şiruri de cel mult 65535 de caractere. Doi octeţi reţin lungimea efectivă a şirului. Ocupă n+2 octeţi, unde n este numărul de caractere al şirului. Un câmp de acest tip reţine şiruri de cel mult 16.777.215 caractere. Trei octeţi reţin lungimea efectivă a şirului. Ocupă n+3 octeţi. Un câmp de acest tip reţine şiruri de cel mult 4.294.967.295 de caractere. Patru octeţi reţin lungimea efectivă a şirului. Ocupă n+4 octeţi. Baza va reţine un vector de şiruri de caractere. Un câmp de acest tip poate reţine un singur şir de caractere din vector. De altfel, coloana reţine indicele din şir. Vedeţi exemplul 2.5! Baza va reţine un vector de şiruri de caractere.. Un câmp de acest tip poate reţine unul sau mai multe şiruri de caractere din vector. De altfel, se reţine vectorul caracteristic al şirurilor. Vedeţi exemplul 2.6!
Tabelul 2.1. Tipuri de date care reţin şiruri de caractere
54
Manual de Informatică pentru clasa a XII-a
Exemplul 2.5. Se creează tabelul ”tstA” care are două coloane: prima reţine un şir de cel mult 65.535 de caractere şi a doua, un şir din mulţimea şirurilor ”luni”, ”marti”, ”miercuri”. În tabel se inserează 3 linii şi, la sfârşit, tabelul este afişat. Să observăm că în cazul coloanelor de tip SET, dacă se încearcă memorarea unui şir inexistent în definiţia coloanei (în exemplu, şirul ”joi”), atunci acea coloană va reţine şirul vid. Figura 2.4. Tabelul “tstA”
CREATE TABLE tstA ( v1 TEXT, v2 ENUM (‘luni’,‘marti’,‘miercuri’) ); INSERT INTO tstA VALUES (‘un sir’,’miercuri’); INSERT INTO tstA VALUES (‘un sir’,’joi’); INSERT INTO tstA VALUES (‘alt sir’,’luni’); SELECT * FROM tstA; Exemplul 2.6. Se creează tabelul ”tstB” care conţine două coloane c1, de lungime fixă de 3 caractere şi c2 de tip SET. Un element al coloanei poate reţine o submulţime a mulţimii {”dimineata”, ”pranz”, ”seara”}. Pentru a vedea cum se introduce submulţimea, analizaţi cele trei instrucţiuni INSERT. În figura alăturată puteţi observa tabelul rezultat în urma introducerii datelor. Observaţi faptul că, la ultima inserare, se încearcă introducerea unui şir, ”noaptea”, care nu este prezent în definiţia tipului coloanei. Nu se semnalează eroare, dar şirul nu este introdus.
Figura 2.5. Tabelul “tstB”
CREATE TABLE tstB (c1 char(3), c2 SET (‘dimineata’, ‘pranz’, ‘seara’) ); INSERT INSERT INSERT INSERT
INTO INTO INTO INTO
tstB tstB tstB tstB
VALUES VALUES VALUES VALUES
SELECT c1,c2 FROM tstB;
(‘abc’,‘dimineata,seara’); (‘abc’,‘seara,pranz’); (‘abc’,‘seara’); (‘abc’,‘seara,noaptea’);
Capitolul 2. Limbajul MySQL
55
2.5.2. Tipuri de date numerice Tipurile numerice se împart la rândul lor în tipuri întregi şi tipuri reale. Tipurile întregi se găsesc în tabelul de mai jos: Tip TINYINT
SMALLINT
MEDIUMINT
INT
BIGINT
Descriere Un câmp de acest tip ocupă 1 octet. Reţine numere întregi cuprinse în intervalul [-128,127], iar dacă este urmat de UNSIGNED reţine numere naturale cuprinse în intervalul [0,255]. Un câmp de acest tip ocupă 2 octeţi. Reţine numere întregi cuprinse în intervalul [-32768,32767], iar dacă este urmat de UNSIGNED, reţine numere naturale cuprinse în intervalul [0,65535]. Un câmp de acest tip ocupă 3 octeti. Reţine numere întregi cuprinse în intervalul [-8.388.608, 8.388.607], iar dacă este urmat de UNSIGNED, reţine numere naturale cuprinse în intervalul [0, 16.777.215]. Un câmp de acest tip ocupă 4 octet.i Reţine numere întregi cuprinse în intervalul [-2.147.483.648, 2.147.483.647], iar dacă este urmat de UNSIGNED, reţine numere naturale cuprinse în intervalul [0, 4294967295]. Un câmp de acest tip ocupă 8 octet.i Reţine numere întregi cuprinse în intervalul [-9.223.372.036.854.775.808, 9.223.372.036.854.775.807], iar dacă este urmat de UNSIGNED, reţine numere naturale cuprinse în intervalul [0, 18.446.744.073.709.551.615]. Tabelul 2.2. Tipuri de date numerice întregi
Observaţie ! Uneori veţi folosi declaraţii de tip de genul int(4). Aceasta înseamnă că în coloană se rezervă automat o lăţime de 4 caractere pentru afişarea numerelor. De exemplu, dacă numărul reţinut este 1, atunci el este afişat ca bbb1, unde prin b am notat blank-ul. Aceasta nu afectează valorile care pot fi memorate. De exemplu, dacă dorim să memorăm numărul 12345, acesta va fi memorat şi se va afişa 12345. Dar, astfel este afectată lăţimea întregii coloane. Tipurile reale se găsesc în tabelul de mai jos: Tip FLOAT DOUBLE
Descriere Ocupă 4 octeţi. Ocupă 8 octeţi.
56
Manual de Informatică pentru clasa a XII-a
DECIMAL(n,d)
Numărul este stocat ca şir de caractere. Parametrul n reprezintă numărul de cifre nenule aflate înaintea virgulei, plus, dacă este cazul, 1, pentru semnul -, iar d reprezintă numărul de zecimale. Dacă numărul introdus are înaintea virgulei un număr de cifre +1 (pentru semn) mai mare decât n, acesta este trunchiat, iar dacă numărul de zecimale este mai mare ca d, atunci se reţin exact d zecimale. În acest din urmă caz, numărul se rotunjeşte la exact d zecimale. Tabelul 2.3. Tipuri de date numerice reale
Exemplul 2.7. O coloană are tipul decimal(2,3): Se introduce 1.1 23.4567 1 -5 -15
Se memorează şi afişează 1.100 23.457 1.000 -5.000 -9.999
Tabelul 2.4. Cum se memorează şi se afişează diverse valori cu zecimale
2.5.3. Tipuri de date care reţin anul, data şi ora În tabelul următor aveţi tipurile care reţin anul, data şi ora: Tip YEAR
TIME DATE DATETIME
Descriere Un câmp de acest tip reţine ani. O dată se introduce ca şir de caractere. De exemplu, pentru anul 2001 se poate introduce ‘2001’ sau ‘1’, iar pentru anul 1989 se poate introduce ‘1989’ sau ‘89’. Un câmp de acest tip reţine ora din zi - se introduce ca şir de caractere sub forma ‘hh:mm:ss’. Un câmp de acest tip reţine data. Aceasta se introduce sub forma ‘yyyy-mm-dd’. De exemplu, ‘1999-11-24’. Un câmp de acest tip reţine date de forma dată şi oră. O dată se introduce ca şir de forma: ‘yyyy-mm-dd hh:mm:ss’ Tabelul 2.5. Tipuri de date care reţin anul, data şi ora
Capitolul 2. Limbajul MySQL
57
2.6. Operatori utilizaţi în MySQL Începem prin a prezenta principalii operatori în ordinea crescătoare a priorităţii lor. Utilitatea operatorilor va fi evidenţiată în paragrafele următoare, deocamdată doar îi prezentăm: 1. ||, OR, XOR 2. &&, AND 3. BETWEEN, CASE WHEN, THEN, ELSE 4. ==,>=,= =
sau !=
mai mic. mai mic sau egal mai mare mai mare sau egal egalitate
diferit
Rezultat 2 < 1 ⇒ 0; 1 =7 ⇒ 1; 7 XOR 8 ⇒ 0; 7=7⇒1 ‘un’=’UN’⇒1 12⇒1; 1!=2⇒1; 11⇒0’ 1!=1⇒0;
Tabelul 2.7. Operatori de comparare
Observaţie ! Se pot compara şi date de tipul TIME, DATE, etc. În fapt, o astfel de comparare este lexicografică. Vedeţi exemplul 2.9!
Capitolul 2. Limbajul MySQL
59
Exemplul 2.9. Analizaţi operaţiile de comparare de mai jos: ‘1:12:3’=8 ORDER BY nume;
Figura 2.29. Exemplu de filtrare
74
Manual de Informatică pentru clasa a XII-a
3. Se cere să se afişeze numele elevilor care au promovat la fiecare materie şi media generală pe care aceştia o au.
SELECT nume, (matematica+engleza+informatica)/3 AS media FROM elevi WHERE matematica>4 AND engleza>4 AND informatica>4;
Figura 2.30. Exemplu de filtrare
Observaţie ! Filtrarea datelor este un caz considerat particular al unui concept cu mult mai general, interogarea! De obicei, interogăm o bază de date cu ajutorul instrucţiunii SELECT.
2.15. Actualizări într-un tabel În general, prin actualizarea unui tabel înţelegem modificarea datelor reţinute de acesta şi/sau modificarea structurii sau numelui tabelului. A) Prin actualizarea datelor dintr-un tabel înţelegem operaţii precum inserarea unor linii, modificarea valorilor unor câmpuri şi ştergerea unor rânduri. A1) Pentru inserare, putem utiliza instrucţiunile de mai jos: 1. INSERT INTO nume_tabel [(nume_col1, nume_col2..) VALUES(expresie1, expresie2...) Această instrucţiune a fost deja prezentată, nu vom mai reveni asupra ei. 2. INSERT INTO [DISTINCT} nume_tabel [(nume_col1, nume_col2..) SELECT .... Într-un tabel se pot insera linii dintr-un alt tabel. Pentru aceasta se foloseşte instrucţiunea de mai sus (vezi Exemplul 2.38, pct. 1). Dacă se doreşte inserarea numai a liniilor distincte din tabelul sursă, utilizaţi specificatorul DISTINCT. A2) Pentru a modifica valorile reţinute de un câmp sau mai multe, se utilizează instrucţiunea de mai jos (vezi Exemplul 2.38, pct. 2): UPDATE nume_tabel SET coloana1=expresie1, ... coloanak=expresiek [WHERE conditie];
Capitolul 2. Limbajul MySQL
75
În urma executării acestei comenzi, pentru fiecare rând din tabel care îndeplineşte condiţia din WHERE, se actualizează coloanele indicate de SET cu expresiile corespunzătoare. Observaţie ! În absenţa clauzei WHERE sunt afectate toate rândurile din tabel. A3) Ştergerea unui rând sau a mai multor rânduri se face cu instrucţiunea de mai jos (vezi Exemplul 2.38, pct. 3 şi pct. 4): DELETE FROM nume_tabel [WHERE conditie] Observaţie ! În absenţa clauzei WHERE sunt şterse toate rândurile din tabel. B) Modificări ale numelui tabelului sau a structurii acestuia. B1) Pentru a modifica numele unui tabel se utilizează instrucţiunea: RENAME TABLE nume_vechi TO nume_nou B2) Pentru ştergerea unei coloane, chiar dacă conţine date, se utilizează instrucţiunea: ALTER TABLE nume_tabel DROP COLUMN nume_coloana B3) Pentru adăugarea unei coloane cu un tip de date, se utilizează instrucţiunea: ALTER TABLE nume_tabel ADD nume_col tip; Exemplul 2.38. Fie tabelele de mai jos, ambele cu aceleaşi coloane, de acelaşi tip:
Figura 2.31. Tabelul “prs”
Figura 2.32. Tabelul “prs1”
1. Se cere să se insereze în tabelul ”prs”, acele persoane din ”prs1” care sunt din ”Craiova”. Alăturat, vedeţi tabelul ”prs” actualizat. INSERT INTO prs (nume, oras) SELECT nume, oras FROM prs1 WHERE oras=’craiova’;
Figura 2.33. Tabelul “prs” actualizat
76
Manual de Informatică pentru clasa a XII-a
2. S-a observat că Ioana şi Florin sunt de fapt din braila. Corectaţi datele din tabel! Alăturat aveţi afişat tabelul cu datele actualizate. UPDATE prs SET oras=’braila’ WHERE nume IN (‘ioana’, ‘florin’);
Figura 2.34. Tabelul actualizat
3. Ştergeţi din tabelul ”prs” înregistrarea în care numele este Mirela (vezi figura alăturată): DELETE FROM prs WHERE nume=’Mirela’;
Figura 2.35.
4. Creaţi un nou tabel ”prs2”, cu aceeaşi structură ca şi ”prs”, care să conţină numai persoanele din ”prs” care sunt din Braila şi Ploiesti. CREATE TABLE prs2 AS SELECT nume, oras FROM prs WHERE nume IN (‘braila’, ‘ploiesti’);
Figura 2.36. Tabelul nou “prs2”
Exemplul 2.39. În tabelul alăturat, ”prs”, există mai multe înregistrări identice. Se cere să se elimine duplicatele. a) Creăm un alt tabel, de manevră, numit ”mand”, care conţine aceleaşi înregistrări cu ”prs”, doar că au fost eliminate duplicatele: CREATE mand AS SELECT distinct nume, oras FROM prs; b) Ştergem tabelul ”prs”: DROP TABLE prs;
Figura 2.37. Tabelul “prs”
c) Redenumim tabelul ”mand” ca ”prs” şi-l afişăm pe ”prs”: RENAME TABLE mans TO PRD; SELECT * FROM prs;
Figura 2.38. Tabelul rezultat
Observaţie! Mare atenţie când efectuaţi astfel de operaţii. În cazurile reale, în care tabelele au mii de rânduri, se pot produce pierderi de date. Din acest motiv, înainte de a actualiza un tabel, este bine să-i creaţi o copie de siguranţă pe care, după ce aţi rezolvat problema, s-o ştergeţi.
Capitolul 2. Limbajul MySQL
77
2.16. Funcţii agregate Toate calculele făcute până în prezent au avut ca operanzi doar câmpurile unui aceluiaşi rând. Întrebarea este: se pot efectua calcule cu valorile reţinute de o coloană? Răspunsul este afirmativ. Pentru astfel de calcule se utilizează aşa-numitele “funcţii agregate”. În cele ce urmează, prezentăm aceste funcţii, iar pentru exemplificare utilizăm tabelul ”elevi”, tabel pe care l-am creat în paragraful 2.14. Funcţiile agregate sunt prezentate în tabelul de mai jos: Nume funcţie COUNT() MIN() MAX() SUM() AVG()
Ce realizează Sub forma COUNT(*), afişează numărul de linii ale tabelului. Sub forma COUNT(nume_coloana), numără valorile, din coloana de nume dat, care nu sunt NULL. Sub forma MIN(nume_coloana), calculează cea mai mică valoare din coloană. Valorile NULL sunt ignorate. Sub forma MAX(nume_coloana), calculează cea mai mare valoare din coloană. Valorile NULL sunt ignorate. Sub forma SUM(nume_coloana), calculează suma valorilor dintr-o coloană. Valorile NULL sunt ignorate. Sub forma AVG(nume_coloana), calculează media aritmetică a valorilor dintr-o coloană. Valorile NULL sunt ignorate. Tabelul 2.14. Funcţii agregate
Exemplul 2.40. Câţi elevi sunt în tabel? SELECT COUNT(*) AS numar_elevi FROM elevi;
Figura 2.39.
Exemplul 2.41. Care este numărul de note la engleză? Se afişează 4, pentru că un elev nu are notă la această disciplină (NULL). SELECT COUNT(engleza) AS numar_note_engleza FROM elevi;
Figura 2.40.
Exemplul 2.42. Care este media notelor la informatică? SELECT AVG(informatica) AS media_note_informatica FROM elevi; Figura 2.41.
Exemplul 2.43. Câţi elevi au nota 10 la engleză? SELECT COUNT(engleza) AS elevi_de_zece FROM elevi WHERE engleza=10; Figura 2.42.
78
Manual de Informatică pentru clasa a XII-a
Exemplul 2.44. Câţi elevi au media generală peste 8? SELECT COUNT(nume) AS elevi_peste_8 WHERE (matematica+engleza+informatica)/3>8; Figura 2.43. Rezultat
2.17. Utilizarea subinterogărilor Aşa cum am arătat, filtrările sunt cazuri particulare de interogări. În general, orice rezultat care este obţinut cu ajutorul unei instrucţiuni SELECT este o interogare. La modul general, o interogare poate returna: A) o coloană, eventual cu un singur rând; B) mai multe coloane - în acest caz se poate spune că interogarea returnează un tabel. Problema care se pune în continuare este următoarea: pot fi utilizate datele returnate de o interogare pentru a efectua o nouă interogare? Răspunsul este, în general afirmativ şi este valabil începând cu versiunea MySQL incorporată în versiunea EasyPHP 1.8. În aceste cazuri, prima interogare care se efectuează este interogarea subordonată. Rezultatul ei este utilizat pentru a efectua o nouă interogare. Vom considera, pe rând, cazurile în care interogarea subordonată returnează o valoare, o coloană şi un tabel (mai multe coloane). Toate exemplele care urmează vor avea ca bază de plecare tabelul elevi, utilizat şi în paragrafele anterioare. A) Interogarea subordonată returnează o coloană cu un singur rând Exemplul 2.45. Se cere să se determine numele elevilor care au cea mai mare notă la matematică. Figura 2.44. Rezultatul dorit
Practic, ar trebui să vedem care este cea mai mare notă la matematică, o primă interogare, problemă pe care o rezolvăm utilizând funcţia agregată MAX(), apoi într-o nouă interogare, aflăm numele elevilor care au această notă. În acest caz, interogarea subordonată returnează o valoare, cea maximă. SELECT nume, matematica FROM elevi WHERE matematica=(SELECT MAX(matematica) FROM elevi); Mai întâi, se execută interogarea subordonată, apoi cea care o subordonează. În acest caz, interogarea subordonată calculează nota maximă obţinută la matematică (să observăm că aceasta nu este în mod obligatoriu 10), iar cealaltă interogare returnează numele elevilor cu această notă.
Capitolul 2. Limbajul MySQL
79
Exemplul 2.46. Se cer numele elevilor care au cea mai mare medie la obiectele matematică şi informatică. Vom proceda în acelaşi mod. În primul rând, selectăm media maximă la obiectele amintite, apoi numele elevilor cu această medie. SELECT nume, (matematica+informatica)/2 AS media FROM elevi WHERE (matematica+informatica)/2= (SELECT MAX((matematica+informatica)/2) FROM elevi);
Figura 2.45. Rezultatul obţinut
Exemplul 2.47. Se cer numele elevilor şi media generală, unde media generală a lor este strict mai mare decât media elevilor din tabel. Se cere, de asemenea, ca elevii să fie ordonaţi în ordinea crescătoare a mediilor. Interogarea subordonată calculează media generală a elevilor, iar prima interogare afişează elevii care au media generală peste aceasta. SELECT nume, (matematica+informatica+engleza)/3 AS media FROM elevi where (matematica+engleza+informatica)/3> (SELECT AVG((matematica+engleza+informatica)/3) FROM elevi) ORDER BY media DESC;
Figura 2.46. Rezultatul obţinut
Exemplul 2.48. Care este numele elevilor care au aceeaşi notă la matematică ca şi elevul Popescu Marius? În acest caz, interogarea subordonată returnează nota la matematică a elevului Popescu Marius, iar interogarea care o subordonează returnează numele elevilor care au această notă: SELECT nume FROM elevi WHERE matematica= (SELECT matematica FROM elevi WHERE nume=’Popescu Marius’); Figura 2.47.
Rezultatul obţinut
B) Interogarea subordonată returnează un tabel În acest caz, tabelul returnat de interogarea subordonată trebuie să aibă un nume. Acesta se dă cu ajutorul clauzei AS. De asemenea, interogarea care subordonează adresează câmpurile tabelului, pornind de la numele său, urmat de ‘.’ şi de numele coloanei. Exemplul 2.49. Care este media generală la matematică şi la informatică a elevilor care au cel puţin 8 la una dintre discipline?
80
Manual de Informatică pentru clasa a XII-a
Tabelul returnat de interogarea subordonată conţine notele la matematică şi la informatică ale elevilor care au cel puţin 8 la una dintre aceste discipline. Acest tabel se numeşte virtual. Interogarea principală calculează mediile la matematică şi informatică ale acestor elevi. SELECT AVG(virtual.matematica) AS medie_mate, AVG(virtual.informatica) AS medie_info FROM (SELECT matematica, informatica FROM elevi WHERE matematica>=8 OR informatica>=8) AS virtual;
Figura 2.48. Rezultatul obţinut
2.18. Gruparea datelor Datele dintr-un tabel pot fi grupate în funcţie de valorile dintr-o anumită coloană. De exemplu, datele din tabelul din Fig. 2.49 pot fi grupate după valorile din coloana ”data”. Astfel, un grup este alcătuit din rândurile de tabel corespunzătoare datei ‘2006-03-15‘, altul, corespunzătoare datei ‘2006-03-16‘, ..., altul corespunzător unei date necunoscute (NULL). Prelucrările datelor din fiecare grup se fac cu ajutorul funcţiilor agregate, aşa cum suntem deja obişnuiţi. Pentru a grupa datele din tabel după valorile unei coloane se utilizează clauza GROUP BY nume_coloana, adăugată după numele tabelului. Exemplele care urmează vă vor lămuri! Exemplul 2.50. Se consideră tabelul “vanzari” cu structura de mai jos care conţine data vânzării, numele produsului vândut şi valoarea vânzării din produsul respectiv: CREATE TABLE vanzari ( data DATE, produs CHAR(15), valoare INT); Figura 2.49. Tabelul “vanzari”
Întrebări: 1. Care este numărul de vânzări din fiecare zi? Grupăm datele după dată şi numărăm vânzările pentru fiecare grup.
Capitolul 2. Limbajul MySQL
81
SELECT data, COUNT(*) AS numar_vanzari FROM vanzari GROUP BY data;
Figura 2.50. Numărul de vânzări din fiecare zi
2. Care este suma vânzărilor zilnice? Grupăm datele după dată şi însumăm vânzările pentru fiecare dată în parte: SELECT data, SUM(valoare) AS suma_vanzari FROM vanzari GROUP BY data; Figura 2.51. Suma vânzărilor zilnice
3. Care este numărul de vânzări şi suma vânzărilor în fiecare zi (se va afişa un singur tabel)? SELECT data, COUNT(*) AS nr_vanzari, SUM(valoare) AS suma_incasata FROM vanzari GROUP BY data;
Figura 2.52. Numărul de vânzări şi suma încasată din fiecare zi
4. Care este data în care am am vânzări în valoare maximă, câte vânzări au fost şi care este suma încasată? Ar trebui să obţinem un tabel care să conţină data şi suma vânzărilor zilnice, apoi, din aceasta să selectăm vănzarea maximă şi, apoi, data la care s-a efectuat vânzarea zilnică. În MySQL, în varianta de care dispunem, nu este permisă mai mult de o interogare cu subordonata sa. Din acest motiv, vom crea un tabel de manevră (“manevra“) care conţine data şi suma vânzărilor zilnice (ca la punctul 2). Apoi din acesta, utilizând o interogare cu subinterogare, vom extrage datele cerute. În final, vom şterge tabelul “manevra“. CREATE TABLE manevra AS SELECT data, SUM(valoare) AS vanzare FROM vanzari GROUP BY data; Pentru probă, afişăm tabelul manevra. SELECT * FROM manevra; Figura 2.53. Tabelul “manevra”
82
Manual de Informatică pentru clasa a XII-a
Pornind de la “manevra”, obţinem datele cerute. SELECT data, vanzare FROM manevra WHERE vanzare= (SELECT MAX(vanzare) FROM manevra); Ştergem tabelul ”manevra”:
Figura 2.54. Rezultatul final
DROP TABLE manevra;
2.19. Uniuni de tabele Un punct de maximă importanţă şi eficienţă în utilizarea bazelor de date este dat de uniunea de tabele. Uniunea este alcătuită din două sau mai multe tabele între care există o legătură. De cele mai multe ori, legătura este dată de valorile existente în câte o coloană a fiecărui tabel din uniune. Pentru tabelele care alcătuiesc uniunea se pot utiliza alias-uri de nume, sub forma nume_tabel AS alias_nume, introduse în clauza FROM. Alias-urile pot fi utilizate în orice parte a instrucţiunii select. În aceste cazuri, adresarea unei coloane a tabelului se face sub forma: alias_nume.nume_col. Avantajele utilizării alias-urilor sunt: - se pot asigura nume scurte pentru tabele, gen A, B,..., etc. - în cazul auto-uniunilor, caz care este prezentat în actualul paragraf, un singur tabel poate avea alias-uri diferite, fapt care permite anumite interogări speciale ca şi cum am avea mai multe tabele: A, B, etc. În astfel de cazuri, atunci când ne referim la o coloană, pentru a nu se crea confuzie, trebuie precizat tabelul, cum ar fi de exemplu: A.nume_col, B.nume_col, etc. 1) O primă formă de realizare a unei uniuni este utilizarea instrucţiunii SELECT în care la clauza FROM se trec, pe rând, toate tabelele care o alcătuiesc, iar legătura este precizată cu ajutorul clauzei WHERE. Vezi exemplele 2.51, pct. 1.a), 4, 5. 2) Atunci când uniunea este alcătuită din două tabele, se poate preciza o legătură de tip INNER sub forma de mai jos. În astfel de cazuri, se afişează datele din tabel1 şi din tabel2, pentru care este îndeplinită condiţia din ON. O astfel de uniune se mai numeşte şi uniune interioară. Vezi exemplul 2.51, pct. 1.b)! nume_tabel1 [AS...]INNER JOIN nume_tabel2 [AS...] ON conditia de uniune 3) Atunci când uniunea este alcătuită din două tabele, se poate preciza o legătură de tip LEFT OUTER sub forma de mai jos. În astfel de cazuri, se afişează toate datele din tabel1, iar datele din tabel2 se afişează numai dacă este
Capitolul 2. Limbajul MySQL
83
îndeplinită condiţia din ON, altfel, în locul lor se afişează valoarea implicită (NULL, de cele mai multe ori). O astfel de uniune se mai numeşte şi uniune exterioară stânga. Vezi exemplul 2.51, pct. 2. nume_tabel1 [AS...]LEFT JOIN nume_tabel2 [AS...] ON conditia de uniune 4) Atunci când uniunea este alcătuită din două tabele, se poate preciza o legătură de tip RIGHT OUTER sub forma de mai jos. În astfel de cazuri, se afişează toate datele din tabel2, iar datele din tabel1 se afişează numai dacă este îndeplinită condiţia din ON, altfel, în locul lor se afişează valoarea implicită (NULL, de cele mai multe ori). O astfel de uniune se mai numeşte şi uniune exterioară dreapta. Vezi exemplul 2.51, pct. 3. nume_tabel1 [AS...]LEFT JOIN nume_tabel2 [AS...] ON conditia de uniune Exemplul 2.51. Priviţi tabelele de mai jos, numite "produse" (cel din stânga) şi "date_produse" (cel din dreapta). Logic, legătura dintre ele este dată de coloanele "cod", din fiecare tabel. Astfel, pentru un cod dat, din tabelul "produse" se poate extrage cantitatea existentă într-un magazin dintr-un anumit produs şi denumirea produsului, producătorul său din tabelul "date_produse".
Figura 2.55. Cele două tabele propuse ca exemplu
1. Pentru fiecare produs existent în magazin, care este trecut în tabelul "date_produse", să se afişeze denumirea şi cantitatea. Pentru a rezolva această problemă, vom utiliza două forme de interogare şi ambele dau acelaşi rezultat. a) SELECT B.denumire, A.cantitate FROM produse AS A, date_produse AS B WHERE A.cod=B.cod; b)
SELECT B.denumire, A.cantitate FROM produse AS A INNER JOIN date_produse AS B ON A.cod=B.cod;
Figura 2.56. Rezultatul interogărilor
84
Manual de Informatică pentru clasa a XII-a
2. La fel ca la punctul anterior, numai că se vor trece datele existente pentru toate produsele din tabelul ”produse”: SELECT B.denumire, A.cantitate FROM produse AS A LEFT OUTER JOIN date_produse AS B ON A.cod=B.cod;
Figura 2.57. Rezultat
3. La fel ca mai sus, numai că se vor trece datele existente pentru toate produsele din tabelul ”date_produse”:
SELECT B.denumire, A.cantitate FROM produse AS A RIGHT OUTER JOIN date_produse AS B ON A.cod=B.cod;
Figura 2.58. Rezultat
4. O problemă serioasă care apare în cerinţele de acest tip este dată de faptul că nu întotdeauna, orice cod din primul tabel, în exemplu ”produse”, se află printre codurile din al doilea tabel, în exemplu, ”date_produse”. Se cere să afişăm codurile din tabelul ”produse” care nu se regăsesc între codurile din tabelul ”date_produse”. Analizaţi interogarea de mai jos, este şi un exemplu de utilizare a operatorului NOT IN: SELECT cod FROM produse WHERE cod NOT IN (SELECT cod FROM date_produse);
Figura 2.59.
5. Selectaţi codurile de produse din tabelul ”date_produse” care nu 1 se regăsesc printre codurile din tabelul ”produse” .
SELECT cod FROM date_produse WHERE cod NOT IN (SELECT cod FROM produse);
Figura 2.60.
Auto-uniuni. Se pot obţine rezultate interesante dacă cele două tabele sunt, de fapt, unul şi acelaşi, dar au aliasuri diferite şi se consideră unite printr-o coloană. Exemplul 2.52. În tabelul alăturat, numit “st_or“ (referitor la localităţile din care provin studenţii unei grupe dintr-o facultate), care sunt persoanele care locuiesc în acelaşi oraş cu Ioana?
Figura 2.61. Tabelul “st_or”
În cazul în care considerăm tabelul ”produse” drept tabel tată şi tabelul ”date_produse” drept tabel fiu, pentru a fi respectată integritatea referenţială, ar trebui ca mulţimea acestor coduri să fie vidă. 1
Capitolul 2. Limbajul MySQL
85
Privim acelaşi tabel ca pe două tabele diferite legate prin câmpul oras. Unul dintre tabele are numele A şi al doilea are numele B. Interogarea constă în afişarea tuturor numelor din B care au aceeaşi valoare în câmpul oras cu înregistrarea din A care, pentru câmpul nume, reţine ‘Ioana’. SELECT B.nume FROM st_or AS A INNER JOIN st_or AS B ON A.oras=B.oras AND A.nume=’Ioana’;
Figura 2.62. Rezultatul interogării
Observaţie ! Evident, aceeaşi problemă poate fi rezolvată prin utilizarea mecanismului subinterogărilor. Exerciţiu!
2.20. Elemente care privesc securitatea bazelor de date Asigurarea securităţii bazelor de date este o problemă extrem de serioasă. Paragraful are numai rolul de a vă iniţia în această activitate. În realitate, problema este cu mult mai complexă. Sistemul de privilegii MySQL. O primă problemă care apare este de a securiza, pe cât posibil, bazele de date. Din acest punct de vedere, în afara administratorului, există posibilitatea ca la bazele de date să aibă acces şi alte persoane, identificabile prin nume şi parole. Totuşi, aceste persoane au acces numai la anumite operaţii cu bazele de date. Pentru ca o astfel de persoană (care nu este utilizator) să acceseze baza de date este necesar ca administratorul să introducă numele ei, parola şi operaţiile pe care le poate efectua. Astfel, administratorul va utiliza instrucţiunea MySQL numită GRANT, a cărei formă simplificată o prezentăm mai jos: GRANT operaţii ON nume_bază TO nume_utilizator IDENTIFIED BY ‘parola’; Operaţiile permise sunt: SELECT, UPDATE, INSERT, INDEX, ALTER, CREATE, DROP şi trebuie să fie separate prin virgule. Atunci când accesul utilizatorului este permis pentru orice bază de date, se utilizează *.*. Exemplul 5.70. De acum, utilizatorul lavinia cu parola puful are acces la operaţii de tip SELECT şi INSERT pentru orice bază de date. GRANT SELECT, INSERT ON *.* TO lavinia IDENTIFIED BY ‘puful’
86
Manual de Informatică pentru clasa a XII-a
Pentru a revoca unele drepturi ale unui utilizator sau chiar toate, administratorul foloseşte instrucţiunea REVOKE. Pentru a revoca toate operaţiile permise, se utilizează ALL. REVOKE operaţii ON nume_bază FROM nume_utilizator Exerciţiu. Acordaţi drepturi unor utilizatori, verificaţi dacă le au, revocaţi anumite drepturi şi verificaţi apoi dacă le mai au.
1. ”Materiale”. O firmă dispune de mai multe depozite. În fiecare depozit există mai multe materiale. Pentru fiecare material se cunoaşte preţul şi cantitatea. Se cere să se răspundă la întrebările de mai jos. Tabelul se numeşte ”materiale”.
Figura 2.63. Tabelul “materiale”
1.1. Care sunt materialele existente într-un anumit depozit (în exemplu, ‘Depozit 2’) ? 1.2. Care sunt depozitele în care există un anumit material (în exemplu, ‘material 3’? Se presupune că numele materialului poate fi precedat de blank-uri. 1.3. Care este valoarea totală a tuturor materialelor din depozite? 1.4. Care este valoarea totală a materialelor din fiecare depozit? 1.5. Presupunem că ‘material 1’ se scumpeşte cu 10%. Actualizaţi datele din tabel. 1.6. Să se şteargă un anumit material (‘material 2’) din tabel. 2. “Împrumuturi”. Există persoane care au credite, în acelaşi timp, la mai multe bănci. O astfel de situaţie este prezentată în tabelul de mai jos, numit ”imprumuturi”. Se cere să se răspundă la următoarele întrebări:
Capitolul 2. Limbajul MySQL
87
Figura 2.64. Tabelul “imprumuturi”
2.1. Care sunt persoanele care au împrumutat de la ‘Banca 1’? 2.2. Care este suma împrumutată de fiecare bancă populaţiei? 2.3. Afişaţi, pentru fiecare persoană, numărul împrumuturilor pe care le-a efectuat. 2.4. Care sunt persoanele care au împrumutat o sumă maximă şi care este această sumă? 2.5. Care sunt persoanele care au împrumutat bani cel puţin de la o bancă la care a împrumutat şi ‘Ionescu Grigore’? 3. “Proprietari, proprietăţi”. Se dă un tabel (“proprietari“), în care pentru fiecare persoană se cunoaşte codul (cod) şi numele (nume). Se dă şi un alt tabel (“proprietati“) în care se cunoaşte codul proprietarului (cod_proprietar), tipul proprietăţii (tip_p) şi valoarea proprietăţii (valoare):
Figura 2.65. Tabelul “proprietari” Figura 2.66. Tabelul “proprietati”
3.1. Afişaţi, pentru fiecare proprietar care are cel puţin o proprietate, numărul proprietăţilor. 3.2. Afişaţi numele proprietarilor care nu au proprietăţi. 3.3. Afişaţi codurile proprietarilor din tabelul “proprietati“ care nu au corespondent în tabelul “proprietari“. 3.4. Afişaţi valoarea proprietăţilor pe care le are fiecare proprietar. Datele vor fi afişate în ordinea descrescătoare a proprietăţilor. 4. “Prietenii”. Se dau două tabele (“baieti” şi “fete”) în care pentru fiecare persoană se cunoaşte codul (cod), numele (nume) şi vârsta (varsta). De asemenea, mai există un tabel, numit “prietenii”, în care sunt reţinute relaţiile dintre băieţi şi fete.
88
Manual de Informatică pentru clasa a XII-a
Figura 2.67. Tabelul ” baieti”
Figura 2.68. Tabelul ” fete”
4.1 Care sunt prietenele lui Mihai, cel care are 18 ani? Observaţie ! Se presupune că există un singur băiat Mihai care are 18 ani. 4.2 Afişaţi numele fetelor care nu au prieten. 4.3 Pentru fiecare băiat care are cel puţin o prietenă, afişaţi numele prietenelor pe care acesta le are. 4.4 Afişaţi numele unei fete cu un număr maxim de prieteni şi numărul prietenilor ei. 4.5 Afişaţi media de vârstă a băieţilor şi a fetelor. Figura 2.69. Tabelul ” prietenii”
5. ”Angajaţi”. O firmă doreşte să reţină într-o bază de date un tabel referitor la angajaţi. Motivul este dat de faptul că se vrea obţinerea rapidă a răspunsurilor la întrebările de mai jos. Ce date va reţine tabelul? Cum obţinem răspunsul la întrebări? 5.1 Care sunt numele angajaţilor (în ordine alfabetică)? 5.2 Care sunt angajaţii cu vârsta sub 30 de ani? 5.3 Realizaţi o listă a femeilor angajate şi o alta a bărbaţilor angajaţi. 5.4 Realizaţi o listă a angajaţilor care au studii superioare. 5.5 Care sunt angajatele care sunt în concediu de maternitate? 5.6 Care sunt angajaţii cu o vechime în meseria pe care o practică la firmă de sub trei ani? 5.7 Care sunt angajaţii care au salariul minim pe economie? 5.8 Care sunt angajaţii care au salariul brut mai mare decât cel minim, dar mai mic decât 1000 de lei? 5.9 Care sunt angajaţii care ies la pensie anul următor? 5.10 Care sunt angajaţii care au copii şi câţi copii au? 5.11 Mâine este Sfânta Maria. Care este lista sărbatoritelor? 5.12 Găsiţi angajaţii care îşi sărbătoresc mâine ziua de naştere! 6. ”Cheltuieli / Venituri”. George este o persoană căreia îi place să-şi ţină evidenţa veniturilor şi cheltuielilor. El are un tabel cu următoarele câmpuri: Data, Cheltuiala/Venit, Suma cheltuită sau încasată, Explicaţii (Text). Să presupunem că George şi-a completat tabelul câteva luni, în fiecare zi. Fiecare sumă cheltuită sau încasată este înregistrată pe o linie a tabelului. Se cere: 6.1 Care sunt veniturile totale ale lui George şi care sunt cheltuielile sale pe toată perioada cât a ţinut evidenţa?
Capitolul 2. Limbajul MySQL
89
6.2 A reuşit George să economisească o sumă de bani în această perioadă sau a fost nevoit să se împrumute? Care este suma economisită sau împrumutată? 6.3 În care lună George a cheltuit cea mai mare sumă? 6.4 În care lună George a avut cele mai mari încasări? 6.5 Care este luna în care George a economisit cea mai mare sumă? 6.6 Creaţi un tabel care să conţină toate veniturile lui George pe întreaga perioadă şi un altul care să conţină toate cheltuieliule în aceeaşi perioadă. 6.7 Creaţi un tabel care să conţină, pentru fiecare lună în parte, suma încasărilor şi suma cheltuielilor. 7. ”Biblioteca”. Ioana s-a angajat la o bibliotecă şi doreşte să ţină evidenţa cărţilor pe calculator. 7.1 Ioana doreşte, în primul rând, să ţină evidenţa titlurilor pe care le are la bibliotecă. Pentru aceasta, Ioana codifică toate titlurile şi reţine pentru fiecare titlul, editura şi autorul. 7.2 Pentru a ţine evidenţa numărului de exemplare din fiecare titlu, existente în gestiune, este nevoie de un alt tabel, numit Nr Exemplare. Creaţi-l!. 7.3 Care este legătura între cele două tabele? 7.4 În continuare, trebuie creat un tabel, numit Cititori, care conţine persoanele care împrumută cărţi de la bibliotecă (Nume, Adresa, Nr. telefon) Înainte de a împrumuta o carte, cititorul este înscris în acest tabel. Creaţi-l!. 7.5 De asemenea, trebuie creat un tabel (Imprumuturi) în care, pentru fiecare carte împrumutată, este scrisă o înregistrare care conţine numele cititorului şi codul cărţii (o înregistrare conţine un singur exemplar dintr-un titlu). Creaţi-l! 7.6 Se cere o situaţie în care sunt afişaţi cititorii care au împrumutat o carte de mai mult de două săptămâni. 7.7 Câte exemplare sunt împrumutate din fiecare carte? 7.8 Câte exemplare sunt împrumutate din cartea care are codul x? 7.9 Pentru fiecare carte împrumutată, se cere codul cărţii, tilul şi numărul exemplarelor aflate la cititori. 7.10 Un cititor solicită un anumit titlu. Ioana vrea să vadă dacă există exemplare neîmprumutate din acesta. 8. Problemă pentru lucrul în colectiv! “Grilă“. Scrieţi o grilă cu 18 itemi (18 întrebări la care răspunsul corect este unul singur, ales dintre 4 răspunsuri). În final se va afişa nota obţinută de cel care este testat prin utilizarea acestei grile. Fiecare răspuns corect este punctat cu 0.5 puncte şi un punct se acordă din oficiu. Desigur, dacă este necesar, itemii vor fi însoţiţi de imagini. Problema va fi rezolvată de echipe diferite, pe diverse domenii: informatică, matematică, biologie, limbi străine, chimie, istorie, ş.a.m.d. Un set de astfel de probleme va fi util elevilor din toată ţara! 9. Problemă pentru lucrul în colectiv! “Magazin“. Creaţi un site prin care o firmă vinde calculatoare şi diverese componente de calculatoare. Comenzile se pot face prin intermediul site-ului şi ele sunt stocate în baza de date. Se cere să se efectueze validarea datelor de intrare. De asemenea, reprezentanţii firmelor pot extrage din baza de date comenzile dintr-o anumită zi şi pot memora date referitoare la expedierea produselor. (pentru verificare, rezolvările se găsesc la pag. 381)
CAPITOLUL Primii paşi către construcţia unui site
În acest capitol recapitulăm noţiunile referitoare la Internet care au fost studiate la ”Tehnologia Informaţiei şi a Comunicaţiilor”. De asemenea, vom învăţa să instalăm şi să utilizăm un program FTP prin intermediul căruia vom putea transfera fişiere între calculatorul personal şi server.
Ce este Internet-ul ?
Protocolul TCP / IP
Ce trebuie să ştim despre site-uri ?
Un program FTP
Cum scriem un fişier HTML?
Cuvinte cheie: pagină web, site web, host, ISP, protocol, TCP/IP, DNS, URL, FTP, SMTP, client, server, proxy, HTML, browser
Capitolul 3. Primi paşi către construcţia unui site
91
3.1. Ce este Internet-ul ? ⇒
Prin Internet înţelegem totalitatea calculatoarelor, aflate oriunde în lume, care comunică între ele.
Spunem că două calculatoare comunică dacă între ele are loc un schimb de date. Convenim să numim “host“ (în română, gazdă) un calculator care participă la schimbul de date.
Reţeaua Internet conţine calculatoare de mare viteză, care comunică prin fibră optică şi/sau prin satelit şi au rolul de a transmite rapid informaţia, oriunde în lume. Anumite firme, numite ISP (Internet Service Provider, pe scurt “provider“), dispun de calculatoare performante, numite “server“-e, legate la unul dintre calculatoarele cu rol de transmitere a informaţiei. Provider-ul oferă, contra cost sau din alte raţiuni, diverşilor clienţi posibilitatea cuplării propriilor PC-uri la server, adică accesul la Internet. Provider-ul oferă şi alte servicii, cum ar fi “webhosting“-ul (spaţiu pe hard-disc pentru găzduirea paginilor web, conturi pentru e-mail, precum şi soft specializat pentru manipularea acestora). ⇒
Pentru a accesa Internet-ul de la un oarecare calculator, acesta trebuie să fie conectat la server-ul unui provider. Există mai multe variante de conectare. Precizăm faptul că modalităţile de conectare sunt prezentate în ordinea crescătoare a vitezei de transmisie a datelor. Nu vom prezenta vitezele de transmisie, deoarece acestea sunt într-o continuă creştere, mărginindu-ne numai la a preciza faptul că rata (viteza) de transfer (“Transfer Rate“) a datelor se exprimă în “Mbps“ (mega biţi pe secundă).
Principalele tipuri de conexiuni la Internet 1) Conectare prin intermediul cablului telefonic. Practic, calculatorul se conectează temporar la un server, prin intermediul unui dispozitiv numit “modem“. Prin formarea unui număr de telefon de acces, se obţine conexiunea cu acesta. Cât timp calculatorul este conectat, nu se mai poate utiliza telefonul. 2) Conectare prin ISDN (“Integrated Services Digital Network“) este un serviciu pus la dispoziţie de firma de telefonie fixă. Şi aici, conexiunea este temporară, deci se plăteşte în funcţie de timpul în care suntem conectaţi. Faţă de modalitatea anterioară, în afara vitezei mai mari pentru schimbul de date, aceasta prezintă avantajul că se poate utiliza în acelaşi timp şi telefonul. 3) Conectare prin intermediul liniilor telefonice închiriate. În acest caz, conexiunea este permanentă. Practic, utilizatorul face un contract cu furnizorul de telefonie fixă, care montează o linie telefonică între calculatoarele utilizatorului şi server-ul provider-ului. 4) Conectare prin cablu TV (coaxial). Conectarea permite transmisia datelor şi recepţia programelor TV în acelaşi timp.
92
Manual de Informatică pentru clasa a XII-a
5) Conectare prin fibră optică. Mediul fizic prin care sunt transferate datele este fibra optică, obţinând o rată de transfer mult mai ridicată decât cele anterioare. 6) Conectare prin cablu UTP (Unshielded Twisted Pair) - una dintre cele mai frecvente conexiuni la Internet. Principiul de bază este simplu: mai multe PC-uri se interconectează prin intermediul unui hub/switch, formând o reţea locală. Această reţea de calculatoare se conectează, la rândul ei, printr-o conexiune rapidă (de exemplu, prin fibră optică), cu provider-ul de Internet. 7) Conectare prin unde electro-magnetice terestre sau prin satelit. Aceste tehnologii sunt numite “wireless“ (fără fir). În acest caz, echipamentele sunt mult mai costisitoare şi necesită operaţii complexe de instalare. ⇒
În linii mari, putem considera că Internet-ul oferă următoarele servicii: • World Wide Web (www) - putem crea şi vizita diverse pagini web; • E-mail - serviciu de poştă electronică; • Chat - modalitate prin care doi sau mai mulţi utilizatori pot discuta în acelaşi timp.
Bineînţeles, acestea trei sunt doar baza de la care pornesc o multitudine de alte servicii, cum ar fi: e-commerce (comerţ pe Internet), e-banking (management financiar, plăţi on-line), diverse tipuri de liste de discuţii (forum, newsgroup), etc.
3.2. Protocolul TCP/IP Pentru ca două sau mai multe calculatoare să poată comunica este necesar să existe un “protocol“, adică un ansamblu de norme care trebuie respectate de calculatoare (de programale care rulează pe ele) pentru ca schimbul de date să aibă loc. Normele se referă la: • găsirea calculatorului destinatar al transferului de date; • transmiterea efectivă a datelor; • modalităţi prin care expeditorul comunică faptul că au fost transmise toate datele, iar destinatarul că le-a recepţionat; • compresia datelor - prin aplicarea anumitor algoritmi matematici, datele care urmează să fie expediate sunt prelucrate, de aşa natură, încât să fie memorate prin utilizarea unui spaţiu mai mic de memorie. Prin urmare, transmiterea lor durează mai puţin. Invers, la destinaţie sunt decompresate prin utilizarea aceloraşi algoritmi matematici.
Capitolul 3. Primi paşi către construcţia unui site
93
• identificarea erorilor care pot interveni în transmiterea datelor. Problema este următoarea: de unde “ştie” calculatorul care a recepţionat date dacă acestea sunt corecte? Şi aici există mai mulţi algoritmi care permit identificarea şi corectarea erorilor. ⇒
Pe Internet se foloseşte protocolul TCP/IP (Transmission Control Protocol/Internet Protocol). Protocolul este, de fapt, numele comun al unei familii de protocoale utilizate pentru transferul datelor în reţea. În continuare vom prezenta pe scurt câteva dintre protocoalele din familia TCP/IP.
Orice calculator conectat la Internet are o adresă, numită adresă IP (Internet Protocol Adress). O adresă IP este alcătuită din 4 numere între 0 şi 255. Prin urmare, o astfel de adresă ocupă 4 octeţi. Cum transmisia datelor se face între două calculatoare, datele se transmit de la o adresă IP la alta.
Protocolul IP (Internet Protocol) reglementează transmiterea datelelor de la o adresă IP la alta. Datele sunt transmise divizate în pachete (packets). Fiecare pachet conţine IP-ul expeditorului şi IP-ul destinatarului.
Prin protocolul TCP (Transmission Control Protocol) se verifică corectitudinea transmisiei.
În Internet se pot accesa anumite resurse, fişiere de orice tip (html, imagine, date, etc). Orice resursă are, aşa cum ştim, o anumită adresă, numită adresa URL (Uniform Resource Locator). De exemplu, dacă adresa unui site este “http://www.exemplu.ro“, ea este o adresă URL. De fapt, este adresa fişierului index, care are adresa completă “http://www.exemplu.ro/index.html“, în cazul în care fişierul index are extensia html. De asemenea, un fişier imagine, să spunem “iepure.jpg“, aflat în folder-ul “img“ al site-ului din exemplu, are adresa URL: “http://www.exemplu.ro/img/iepure.jpg“.
DNS (Domain Name System) asigură legătura dintre adresa URL a unui site şi adresa IP a acestuia. Practic, în edit-ul browser-ului se tastează adresa URL, acesta o transmite, dar prin algoritmul impus de acest protocol se găseşte adresa IP asociată. Transferul datelor se efectuează, aşa cum s-a arătat, utilizând adresa IP găsită.
FTP (File Transfer Protocol) are rolul de a reglementa transferul fişierelor între două calculatoare. Există programe specializate care, prin utilizarea acestui protocol, transferă fişiere. De regulă, utilizarea lor se face în situaţia în care o persoană gestionează un site web aflat pe un alt calculator (server). Atunci când aceasta actualizează site-ul, transferă fişiere către server.
94
Manual de Informatică pentru clasa a XII-a
SMTP (Simple Mail Transfer Protocol) are rolul de a reglementa transferul e-mail-urilor.
Din cele prezentate până în acest moment, rezultă că fiecare calculator care participă la schimbul de date pe Internet are o adresă IP permanentă. În realitate nu este chiar aşa… Unele calculatoare au într-adevăr o adresă IP permanentă, însă altele nu. Să prezentăm două cazuri: 1) Ne conectăm de la PC-ul de acasă, prin linie telefonică, la Internet. În acest caz, calculatorul nostru se numeşte client, iar cel al provider-ului server. Provider-ul dispune de o mulţime de adrese IP care urmează să fie alocate. Calculatorului nostru i se alocă, automat, o adresă IP care este disponibilă în acel moment. Un astfel de server rulează un soft special, care utilizează protocolul DHCP (Dynamic Host Configuration Protocol). După închiderea conexiunii, acea adresă IP se va putea aloca altui client. 2) Dispunem de o reţea de calculatoare şi dorim ca de pe fiecare calculator din reţea să putem accesa Internet-ul. În acest caz, se obişnuieşte ca un calculator al reţelei, numit “server proxy“, să fie cuplat la Internet printr-o linie închiriată (aceasta asigură o viteză de transfer suficient de mare). Toate celelalte calculatoare ale reţelei accesează Internet-ul prin intermediul său. Evident, pe server-ul proxy trebuie să existe un soft specializat. Toate calculatoarele din reţea au şi ele adrese IP, dar interne, nerecunoscute decât în reţeaua locală, nu şi pe Internet, dar server-ul proxy utilizează o adresă IP recunoscută pe Internet.
3.3. Despre site-uri ⇒
⇒
Dacă o persoană (sau societate comercială), care are acces la Internet, doreşte să aibă un site, va apela la serviciile unei firme specializate (numită “provider“). Provider-ul dispune (sau a închiriat la rândul lui) de unul sau mai multe calculatoare extrem de performante, cuplate la Internet prin linii care permit transferul rapid al datelor şi care rulează programe specializate, numite “server“-e şi pune la dispoziţie: •
spaţiu pe hard-disc-ul server-ului de cel puţin 10Mb;
•
o adresă de Internet (de exemplu, www.adresa.ro ). 1
În spaţiul rezervat, persoana (firma) pune mai multe fişiere care conţin, de regulă, fişiere HTML (Hyper Text Markup Language), dar şi alte fişiere (gif, jpeg, doc). Prin aceste fişiere se poate descrie activitatea firmei, se poate face comerţ electronic, se poate prezenta o anumită temă, etc).
Aveţi posibilitatea ca site-ul să aibă asociată o adresa URL oferită gratuit de provider sau să cumpăraţi o astfel de adresă.
1
Capitolul 3. Primi paşi către construcţia unui site ⇒
95
Pentru a putea vizita o pagină, este necesar un program specializat, numit generic “browser“. Acesta trebuie să se găsească pe calculatorul celui care doreşte să viziteze pagina respectivă şi, în linii mari, are funcţiile: 1. permite utilizatorului să introducă adresa URL a paginii respective şi transmite cererea către server, pentru ca acesta să-i furnizeze fişierul HTML care conţine codul respectivei pagini, dar şi fişierele care reţin imaginile din pagină (cu extensia jpeg, gif, etc). 2. după ce primeşte codul HTML al paginii respective, interpretează comenzile pe care le conţine şi îl afişează.
Evident, conţinutul site-ului poate fi accesat de pe orice alt calculator conectat la Internet. Terminologie. Calculatorul pe care se găseşte site-ul se numeşte, aşa cum am precizat, “server“, iar calculatoarele care accesează conţinutul site-ului se numesc, în acest caz, “client“. Un astfel de model de transmisie a datelor poartă denumirea de “client-server“ (vezi Fig. 3.1).
Server
Cerere
Răspuns
Răspuns
Cerere
Cerere Răspuns
Client 3
Client 1
Client 2 Figura 3.1. Exemplu de model de tip client-server
Întrebările fireşti în acest moment sunt este: ce software este necesar să existe pe calculatorul client şi ce software trebuie să existe pe server?
96
Manual de Informatică pentru clasa a XII-a
3.3.1. Software-ul necesar pentru calculatorul “client” Orice calculator client trebuie să dispună de un browser, cu ajutorul căruia să se poată vizualiza fişierele HTML. Există mai multe programe de tip browser, cum ar fi: Internet Explorer, Firefox, Mozilla, Opera, Netscape, fiecare dintre acestea având mai multe versiuni. Din păcate, între acestea există anumite diferenţe atunci când afişează fişierele HTML. Evident, există multe puncte comune. Este recomandabil, ca atunci când scriem codul necesar unei pagini web, să utilizăm specificaţiile de HTML standard şi, mai ales, să testăm pagina utilizând cât mai multe tipuri de browser-e. Pentru a gestiona un site web, aflat evident pe server, utilizatorul are nevoie de un program FTP prin care să poată efectua mai multe operaţii asupra spaţiului rezervat pe server: transfer sau ştergere de fişiere şi creare, modificare sau ştergere de folder-e.
3.3.2. Software-ul necesar pentru calculatorul “server” În primul rând, pe server trebuie să se găsească un program care răspunde cererilor browser-rui aflat, aşa cum s-a spus, pe calculatorul client. Un astfel de program se numeşte program de tip server. Atunci când, de exemplu, dorim să vizualizăm o anumită pagină, tastăm adresa URL în edit-ul browser-ului şi apăsăm tasta Enter sau efectuăm clic pe butonul GO. Browser-ul emite o cerere către server pentru ca acesta să-i trimită fişierul respectv. Evident, dacă este posibil, server-ul va furniza browser-ului fişierul solicitat. Cererea efectuată de browser şi răspunsul server-ului se fac prin respectarea unui anumit protocol. Acest proticol se numeşte HTTP (Hyper Text Transfer Protocol). Prin urmare, un program de tip server răspunde cererilor care se conformează protocolului HTTP. Există mai multe programe de tip server, cel mai popular fiind Apache, care lucrează pe server-e cu sistemul de operare Linux, dar şi pentru cele cu sistemul de operare Windows. El este dezvoltat de Apache Software Foundation şi 1 este de tip “open source“ . Un alt program de tip server este Microsoft IIS (Microsoft Internet Information Services), destinat sistemelor de operare de tip Windows. Facultativ, pe server se găsesc programele PHP şi MySQL. Bineînţeles, închirierea unui spaţiu pe un server care deţine aceste programe este mai scumpă. PHP-ul permite ca paginile web sa fie personalizate, iar cu ajutorul MySQL-ului se pot crea baze de date pe Internet. De asemenea, cu ajutorul PHP-ului se pot da comenzi MySQL-ului pentru crearea şi actualizarea bazelor de date. Termenul descrie accesul gratuit la codul sursă al unui produs software, care este disponibil spre a fi copiat, modificat şi personalizat de către oricine, fără a fi impuse drepturi intelectuale restrictive asupra programului.
1
Capitolul 3. Primi paşi către construcţia unui site
97
Observaţie. Puteţi să obţineţi gratuit spaţiu pe server şi adresa URL pentru site-ul dvs., pentru că există firme care oferă aceasta utilizatorilor. Căutaţi cu Google! Din păcate, este puţin probabil să găsiţi gratuit un server care are PHP şi MySQL. Oricum, chiar şi în aceste condiţii, se pot crea site-uri reuşite utilizând doar limbajul HTML. Dacă doriţi un site care să conţină PHP şi MySQL, limbaje care vor fi prezentate în această carte, atunci trebuie să plătiţi acest serviciu suplimentar. Modalitatea de instalare a programelor Apache, PHP şi MySQL este detaliată în Anexa 1, care se găseşte la pag. 370.
3.4. Un program care lucrează sub FTP Să presupunem că am obţinut un anumit spaţiu pe un server, avem o adresă URL pentru site şi acum vrem să-l construim şi să-l putem întreţine. Problema care se pune în continuare este transferul fişierelor de pe calculatorul personal (client) către server şi invers. În această carte vom utiliza un program care lucrează sub protocolul FTP şi anume “WS_FTP95“. Acest program poate fi descărcat de pe pagina web “www.uottawa.ca/help/ws_ftpe.html“, iar dacă această adresă nu mai este actuală, identificaţi o nouă locaţie de unde poate fi download-at (cu Google, textul “ws_ftp95 download“). După ce aţi instalat programul, va apărea o cutie de dialog în care trebuie să introduceţi datele de identificare. Am presupus că adresa URL a site-ului este: “www.invatare.b0x.com“ (vezi Fig. 3.2).
Figura 3.2. Fereastra de introducere a datelor de identificare
Dacă introducerea datelor de identificare s-a făcut în mod corect, automat programul va afişa conţinutul fişierelor din site în cadrul din partea dreaptă şi a unui folder de pe propriul calculator în stânga. De aici şi modalitatea de lucru: vom avea pe hard-disc un folder care reţine fişierele care trebuie să fie transferate pe site. Acesta este folder-ul (în exemplu, “PTest“) care este afişat de programul FTP (vezi Fig. 3.3). Pe server avem două fişiere, iar cel care ne interesează iniţial este “index.html“.
98
Manual de Informatică pentru clasa a XII-a
Trecerea unui fişier de pe propriul calculator pe site se face prin operaţia Drag and Drop (se mută cursorul grafic asupra sa, apăsăm butonul stâng şi-l “tragem” către panoul din dreapta) sau selectăm fişierul şi-l transferăm cu ajutorul butonului săgeată. Analog, se poate muta un fişier de pe site pe calculatorul nostru.
Figura 3.3. Fereastra programului WS_FTP95 ⇒
Ştergerea unui fişier sau folder se face cu butonul Delete.
⇒
Crearea unui folder (director) se face prin apăsarea butonului MkDir.
⇒
Apăsarea săgeţii are ca efect trecerea în folder-ul părinte.
⇒
Schimbarea unităţii de disc pe propriul calculator se face prin executarea unui clic asupra numelui ei (vezi fig. alăturată). Figura 3.4. Lista unităţilor de disc de pe calculatorul client
După cum observaţi, este foarte simplu să lucrăm cu un program FTP. Pentru transfer, bifaţi butonul ASCII. Veţi fi scutiţi astfel de anumite erori care pot apărea la executare.
Capitolul 3. Primi paşi către construcţia unui site
99
3.5. Cum scriem un fişier HTML ? Presupunem că avem un site web şi putem să transferăm fişiere de la calculatorul nostru către el şi invers. Ştim că, pentru a scrie o pagină web, trebuie să cunoaştem limbajul HTML (HyperText Markup Language). Acesta este prezentat detaliat în Capitolul 4. Întrebarea la care răspundem în acest moment este următoarea: cum se scrie codul HTML? ⇒
Browser-ul poate afişa un fişier HTML aflat pe calculatorul nostru. Un astfel de fişier are una dintre extensiile: htm sau html. Puteţi căuta cu Find un astfel de fişier şi executaţi dublu clic pe icon-ul său. Imediat va fi apelat browser-ul, iar acesta va afişa fişierul.
⇒
Mai ştim că, atunci când browser-ul afişează un astfel de fişier, putem vedea codul său sursă (din meniul View, apelăm comanda Source). Automat, se va lansa programul NOTEPAD care realizează aceasta.
De aici rezultă şi modul în care vom scrie astfel de fişiere: a)
Vizualizăm cu My Computer folder-ul unde dorim să se găsească fişierul.
b)
Apelăm la meniul flotant (clic cu butonul drept al mouse-ului) şi alegem New şi Text Document. Programul NOTEPAD va crea un fişier fără conţinut, cu extensia txt.
c)
Modificăm numele şi extensia fişierului. La fel, atunci când cursorul grafic se găseşte deasupra icon-ului său, apăsăm butonul drept al mouse-ului şi alegem Rename. Vom scrie un nume dorit de noi, iar extensia va fi html. Fie numele său ”primul.html”. Întrucât extensia html este asociată browser-ului (Internet Explorer, la noi), fişierul va avea de această dată icon-ul browser-ului (vezi Fig. 3.4).
Figura 3.4. Exemplu de fişier HTML
d)
Executarea unui dublu clic asupra icon-ului are ca efect lansarea browser-ului care va afişa fişierul. Evident, în această fază, conţinutul său este vid.
e)
Apelaţi din meniu View şi Source. Programul NOTEPAD va încărca codul HTML al fişierului (conţinutul este vid), deschizând-ul astfel pentru editare.
100
Manual de Informatică pentru clasa a XII-a
f)
Scrieţi un text la alegerea dvs. Exemplu: “Acesta este primul text”. Salvaţi-l!
g)
În fereastra browser-ului apăsaţi butonul Refresh. Prin această operaţie am comandat reîncărcarea fişierului, întrucât i-am schimbat conţinutul. Textul va fi afişat de browser:
Figura 3.5. Vizualizarea fişierului prin browser
Observaţii
Procedând astfel, putem scrie uşor cod HTML. Din când în când, vizualizăm efectul modificărilor şi identificăm eventualele erori.
După cum vă puteţi da seama, operaţia de scriere a codului nu presupune accesul la Internet.
Validatoare HTML Am văzut cum se scrie, în mod clasic, codul HTML. Dacă dorim, în scrierea codului se pot utiliza diverse validatoare (programe specializate) HTML. Care este rostul lor? •
Validatoarele HTML lucrează la fel de uşor ca NOTEPAD-ul. Ele scriu direct fişiere cu una din extensiile htm sau html.
•
Apăsarea unui buton al validatorului are ca efect lansarea browser-ului care afişează fişierul (procedând astfel, lucrăm mai eficient).
•
Putem valida fişierele HTML (adică verificăm corectitudinea din punct de vedere sintactic - la identificarea unei erori, ne este indicată locaţia sa).
Capitolul 3. Primi paşi către construcţia unui site
101
De ce este utilă operaţia de validare a fişierelor HTML? Trebuie urmărit modul în care procedează browser-ul atunci când codul HTML nu este corect. Browser-ul va afişa ceea ce “distinge” din cod, deci nu va semnala eroarea. Uneori, o eroare poate trece neobservată deoarece browser-ul de care dispunem trece peste ea. Dar, cum nu există un singur program de tip browser, un alt tip ar putea afişa informaţia incorect.
Un exemplu de astfel de validator, gratuit, este CSE HTML Validator Lite, care poate fi descărcat de pe pagina: “www.htmlvalidator.com/lite“.
Nimeni nu vă opreşte să căutaţi şi alte validatoare HTML. Folosiţi motorul de căutare GOOGLE!
Comentarii în documentul HTML Un document HTML poate conţine comentarii. Un comentariu arată ca mai jos şi poate fi aşezat oriunde în document. Evident, comentariile nu sunt afişate de către browser.
În cazul unor pagini complexe, cu multe elemente, comentariile sunt extrem de utile pentru realizatorul site-ului. Indicând printr-un comentariu o anumită porţiune din fişier, el va şti mult mai uşor locaţia codului respectiv pentru a efectua modificarea.
Prin Internet înţelegem totalitatea calculatoarelor, aflate oriunde în lume, care comunică între ele. Pentru a comunica ele pot fi conectate printr-una dintre formele de mai jos:
cablul telefonic; ISDN (Integrated Services Digital Network); linii telefonice închiriate; cablu TV (coaxial); cablu UTP (Unshielded Twisted Pair); fibră optică; unde electro-magnetice terestre sau prin satelit.
102
Manual de Informatică pentru clasa a XII-a
Pentru ca două sau mai multe calculatoare să poată comunica este necesar să existe un ”protocol”, adică un ansamblu de norme care trebuie respectate de către calculatoare (de programale care rulează pe ele) pentru ca schimbul de date să aibă loc. Protocolul TCP/IP (Transmission Control Protocol/Internet Protocol) este numele comun al unei familii de protocoale utilizate pentru transferul datelor în reţeaua Internet. Dintre acestea, cele mai importante sunt:
Orice calculator conectat la Internet are o adresă, numită IP, alcătuită din 4 numere între 0 şi 255. Protocolul IP (Internet Protocol) este răspunzător de transmiterea datelor de la o adresă IP la alta. Datele sunt transmise divizate în pachete (packets). Fiecare pachet conţine IP-ul expeditorului şi IP-ul destinatarului.
Prin protocolul TCP (Transmission Control Protocol) se verifică corectitudinea transmisiei.
DNS (Domain Name System) asigură legătura dintre adresa URL a unui site şi adresa IP a acestuia.
FTP (File Transfer Protocol) are rolul de a reglementa transferul fişierelor între două calculatoare.
SMTP (Simple Mail Transfer Protocol) are rolul de a reglementa transferul e-mail-urilor.
În cazul site-urilor web folosim următoarea terminologie: calculatorul pe care se găseşte site-ul se numeşte ”server”, iar calculatoarele care accesează conţinutul site-ului se numesc ”clienţi”. Acest model de transmisie a datelor se numeşte “client-server”. 1. Pe calculatorul client trebuie să avem instalat un browser, program cu ajutorul căruia să putem vizualiza fişiere HTML. Există mai multe programe de tip browser, cum ar fi: Internet Explorer, Firefox, Mozilla, Opera sau Netscape. În cazul în care o persoană gestionează un site, aflat evident, pe sever, atunci aceasta trebuie să dispună pe calculatorul său de un program FTP prin care să transfere fişiere pe server, şă steargă fişiere aflate pe acesta, să creeze şi să şteargă folder-e de pe server. În această carte folosim programul ws_ftp95. 2. Pe server trebuie să avem instalat un program specializat care să răspundă cererilor browser-rului. Un astfel de program se numeşte program de tip server. Cel mai des utilizat este Apache. Conversaţia între browser şi programul de tip server respectă protocolul HTTP (Hyper Text Transfer Protocol). De asemenea, pentru a studia materia din această carte trebuie să avem instalate PHP şi MySQL. Toate acestea se găsesc în pachetul EasyPHP care trebuie descărcat şi instalat pe calculatorul nostru.
Fişierele HTML pot fi scrise cu ajutorul programului NOTEPAD, dar se pot folosi şi validatoare HTML. Acestea din urmă pot fi descărcate de pe Internet.
Capitolul 3. Primi paşi către construcţia unui site
103
1. Stabiliţi legăturile logice dintre protocoale (stânga) şi ce reglementează ele (dreapta): 1. DNS
a) transfer de fişiere
2. HTTP
b) controlul transmisiei
3. TCP
c) legătura dintre URL şi IP
4. FTP
d) dialogul între client şi server
2. Stabiliţi legătura dintre coloanele din stânga şi cele din dreapta: 1. server
a) program FTP
2. client
b) Apache
3. Stabiliţi legătura dintre coloanele din stânga şi cele din dreapta: 1. server
a) MySQL
2. client
b) browser
4. Vizualizaţi codul HTML al unei pagini web aleasă de dvs. Multe puteţi învăţa privind modul în care au făcut alţii... 5. Creaţi-vă un site gratuit. Reţineţi adresa, numele de autentificare (user ID) şi parola. Acest site îl veţi utiliza pentru teste. 6. Creaţi un fişier pe hard-disc-ul dvs. un director numit ”PTest”. Folder-ul va conţine un fişier numit ”index.html”, iar în interiorul fişierului, textul: ”Asteptati sa invat in capitolul urmator HTML”. 7. Upload-aţi fişierul pe site (adică treceţi fişierul de pe calculatorul dvs. pe server). Verificaţi operaţia prin afişarea fişierului de către browser. 8. Creaţi pe site-ul dvs. două folder-e: ”Images” şi ”Personal”. În viitor, primul va reţine fişierele imagine, iar al doilea, fişierele HTML auxiliare. 9. Lucrare de tip referat. Întocmiţi un referat despre un validator HTML. 10. Lucrare de tip referat. Întocmiţi un referat despre un program FTP. (pentru verificare, rezolvările exerciţiilor 1-3 se găsesc la pag. 383)
CAPITOLUL HTML, CSS – primele noţiuni
În acest capitol vom învăţa să creăm pagini Web utilizând limbajele HTML şi CSS, esenţiale în dezvoltarea oricărei aplicaţii hipermedia.
Care este structura de bază a unei pagini HTML+CSS ?
Elemente HTML pentru afişarea textelor
Atribute CSS pentru font-uri şi texte
Care este structura unui element HTML ?
Cum realizăm o listă ?
Atribute de culoare şi fond
Atribute pentru margini, padding şi bordură
Cum introducem o imagine ?
Dar un tabel ?
Hiperlegături (link-uri)
Ce rol au elementele BASE, META, SCRIPT ?
Hărţi imagine
Ce sunt cadrele ? La ce folosesc ?
Care sunt modalităţile de aşezare în pagină a elementelor ?
Caractere HTML
Aspecte generale ale proiectării interfeţelor web
Cuvinte cheie: HTML, CSS, element, tag, atribut, id, class, stil, listă, tabel, hiperlegătură, download, hartă imagine, cadru, bordură, margine, ţesătură, etichetă, proiectare
Capitolul 4 – HTML, CSS - primele noţiuni
105
În cele ce urmează vom învăţa să creăm pagini web utilizând limbajul HTML. Pentru aceasta, vom recapitula cunoştinţele dobândite la orele de “Tehnologia Informaţiei şi a Comunicării”, dar vom învăţa si multe lucruri noi. Desigur, o pagină astfel creată, poate arăta foarte bine, dar, din păcate, lucrând numai cu HTML-ul, textele şi imaginile nu pot fi personalizate pe cât am dori, iar tehnicile prin care putem crea animaţie aproape că lipsesc. De asemenea, server-ul oferă vizitatorului o pagină care nu ţine cont şi de preferinţele acestuia şi nu-i oferă posibilitatea să “scrie” date pe site. Cu toate acestea, pentru a crea pagini web, studiul limbajului HTML este indispensabil, iar neajunsurile arătate pot fi eliminate studiind acest capitol.
4.1. Structura de bază a unei pagini HTML+CSS Mai jos, puteţi observa o pagină aşa cum este scrisă în Notepad şi aşa cum este afişată de browser-ul Internet Explorer:
a) În Notepad
b) În Internet Explorer Figura 4.1. Exemplu de pagină web
Din analiza exemplului de mai sus, observăm că:
•
pagina începe cu tag -ul şi se termină cu tag-ul ;
•
pagina conţine un antet (HEAD) şi corpul propriu-zis (BODY);
•
antetul este cuprins între etichetele şi ;
•
corpul este conţinut între etichetele şi .
1
Opţional, antetul poate conţine titlul paginii cuprins între tag-urile şi . Titlul apare pe bara de titlu a ferestrei afişată de Explorer (pentru noi, acesta este "Exemplul 1").
Termenul tag provine din limba engleză şi semnifică “etichetă”. În acest manual vom folosi ambii termeni: element si tag.
1
106
Manual de Informatică pentru clasa a XII-a
Dvs. aţi studiat câteva noţiuni despre HTML în clasa a-IX-a. Acum trebuie să le recapitulăm, dar şi să le prezentăm într-o formă nouă, utilizând limbajul CSS (Cascading Style Sheets), limbaj recunoscut de către browser. Conform CSS, vom imagina elementele HTML ca având formă dreptungiulară. Pentru fiecare element HTML se poate selecta dimensiunea lui, culoarea, mărimea şi stilul de scriere a font-ului, culoarea de fond, culorile marginilor... şi, după cum vom vedea, chiar poziţia în document. A stabili toate acestea pentru un element sau pentru toate elementele de acelaşi tip (de exemplu, toate paragrafele) înseamnă a stabili un stil. Un fişier HTML + CSS poate conţine mai multe stiluri. Modul în care se stabilesc stilurile va fi tratat în amănunt, deocamdată ne mărginim să exemplificăm modul în care se pot preciza stilurile într-un fişier HTML. A) Prin utilizarea elementului , care va fi conţinut de antet. În interiorul său se pot descrie stiluri pentru un grup de elemente, de exemplu P, pentru paragrafe sau pentru un singur element de un tip oarecare. A1. Toate elementele de un anumit tip au acelaşi stil. Exemplul 4.1. Paragraful are înălţimea de 4 cm, lăţimea de 3 cm, font-ul cu mărimea de 20 de puncte, culoarea de fond - galben, culoarea textului - roşu, iar scrisul italic. Oricâte paragrafe ar conţine documentul, toate vor avea acelaşi stil.
Acesta este primul exemplu de pagina...
Un paragraf care are atasat un stil
alt paragraf
Un paragraf care are atasat un stil
alt paragraf
Un paragraf care are atasat un stil
alt paragraf
Un paragraf care are atasat un stil
alt paragraf
conţinut paragraf
Observaţii ! .
În Notepad, WordPad sau Word, paragrafele se separă prin tastarea unui Enter. În schimb, în HTML, Enter-ul nu are nici un efect. Vedeţi în exemplul anterior, al doilea paragraf (aşa cum a fost tastat în Notepad). El conţine un Enter (de fapt, în Notepad, sunt două paragrafe). Acesta a fost ignorat de Explorer.
Fără o altă comandă, un rând al unui paragraf are lăţimea ferestrei afişată de browser. De exemplu, dacă micşorăm fereastra browser-ului, acelaşi paragraf va ocupa mai multe rânduri.
Dacă două cuvinte ale unui paragraf sunt separate prin mai multe spaţii, browser-ul afişează doar un singur spaţiu.
Elementul   Câteodată, avem nevoie să prevenim trecerea unui cuvânt pe linia următoare. Folosim elementul   pentru a evita acest lucru, prin scrierea sa înaintea cuvântului de interes. În cazul în care nu încape pe linie, se coboară şi cuvântul precedent pe linia următoare. Exemplul 4.6. Testaţi forma de mai jos:
Acest paragraf a fost afisat de Internet Explorer.
În figura alăturată se observă faptul că browser-ul a fost forţat să treacă cuvântul ”Internet” pe rândul următor. Figura 4.4. Exemplu de utilizare a elementului   Mama merge
la piata
Ceea ce-ti trebuie vei gasi in ceea ce ai!
Ceea ce-ti trebuie vei gasi in ceea ce ai!
Ceea ce-ti trebuie vei gasi in ceea ce ai!
Ceea ce-ti trebuie vei gasi in ceea ce ai!
Un paragraf care foloseste elementul BIG !
Exemplu de text marit !
Un paragraf care foloseste elementul SMALL !
Un paragraf care foloseste elementul TT !
Un paragraf care foloseste elementul DEL !
3x*ln(x)
ai,j
Figura 4.15. Exemplu de utilizare a elementuluiLenesul gaseste in orice sarbatoare un prilej sa nu munceasca !
Figura 4.16. Exemplu de utilizare a elementuluiUn exemplu...
Un exemplu ...
Acest text a fost scris spatierea intre randuri.
Acest text a fost scris spatierea intre randuri.
Cine nu ... nu castiga!
Periferice esentiale:
Echipa castigatoare:
sau... numai prin
.
120
Manual de Informatică pentru clasa a XII-a
Elementul DL (Definition Lists) - are rolul de a descrie o listă de definiţii, delimitată de tag-urile şi .
Elementul DT (Definition Term) - defineşte termenul din listă care trebuie
descris. Se utilizează tag-ul .
Elementul DD (Definition Description) - are rolul de a reţine descrierea
termenului. Se utilizează tag-ul .
Exemplul 4.27. Priviţi lista de definiţii de mai jos:
to elapse a trece, a se scurge I've never seen n-am (mai) vazut (niciodata)
Figura 4.25. Exemplu de listă de definiţii
4.6. Structura unui element HTML În general, un element HTML, P, OL, H6, etc. este alcătuit sub formă de cutie (box), cu structura următoare:
Conţinut Ţesătură (padding) Bordură (border) Margine (margin) Figura 4.26. Structura unui element HTML
Capitolul 4 – HTML, CSS - primele noţiuni
121
Marginea (margin) – nu este vizibilă de vizitatorul paginii. Rostul ei este de a păstra distanţa dintre cutie şi celelalte elemente.
Bordura (border) – în cazul în care creatorul paginii doreşte, aceasta poate fi făcută vizibilă (de exemplu i se stabileşte o altă culoare).
“Ţesătura” (padding) poate fi dimensionată, dar nu poate fi făcută vizibilă printr-o culoare distinctă. Vom prefera termenul de padding.
Conţinutul este dat de text şi/sau imagine.
Observaţii !
În ansamblu, părţile unor elemente de acelaşi tip pot fi dimensionate. Vedeţi paragrafele următoare!
În general, pentru majoritatea elementelor se poate trece spaţiul ocupat de acestea: lăţimea (width) şi înălţimea (height). Înălţimea şi lăţimea cutiei include bordura, dar nu include marginile. În cazul în care conţinutul nu încape în cutie, nu se respectă înălţimea şi lăţimea dată de aceste atribute.
În continuare, vom da exemple de elemente pentru care a fost scris un stil. În acest mod, vă puteţi face de la început o idee despre puterea limbajului CSS. De multe ori, putem face ca un element să arate cu totul altfel decât arată în forma implicită. În paragrafele următoare vor fi prezentate toate atributele, dar acum, vă prezentăm câteva elemente HTML cu înfăţişare “neobişnuită”. Exemplul 4.28. Am creat un stil pentru un element H1. Bordura are culoare distinctă, iar textul este aliniat la stânga. Faptul că există un spaţiu între bordură şi text confirmă existenţa padding-ului (de 0.5 cm). H1 {border:solid 10pt red; background-color:green; padding:0.5cm 0.5cm 0.5cm 0.5cm; text-align:left; width:3cm;} ... Un element H1 Figura 4.27. Exemplu de element H1 stilizat
Exemplul 4.29. Am creat un stil pentru paragrafe. În acest caz, bordura are o formă specială. Fontul utilizat este din famila "Arial", scris îngroşat (bold) şi înclinat (italic). Textul este aliniat la centru (center): Figura 4.28. Exemplu de paragraf stilizat
122
Manual de Informatică pentru clasa a XII-a
P {border:groove 1cm red; background-color:yellow; padding: 1cm 1cm 1cm 1cm; width:5cm; height:5cm; text-align:right; font-family:arial; font-weight:bold; font-style:italic;} ...
Un exemplu de paragraf
Exemplul 4.30. O listă pentru care s-a stabilit dimensiunea font-ului, culoarea de fond, culoarea, etc.: OL {font-size:20pt; font-weight:bold; color:black; background-color:blue;} ...Un exemplu de catelus
Acest paragraf este scris pentru a verifica modul de aliniere pe orizontala in cazul unui element IMG, care este de tip INLINE , deci se insereaza exact ca un cuvant intr-un paragraf
Paragraful este un element de tip BLOC, asa ca se insereaza pe o linie noua!
Figura 4.37. Exemplu de pagină web
128
Manual de Informatică pentru clasa a XII-a
4.12. Tabele În cadrul unei pagini web se pot introduce şi tabele, extrem de utile pentru evidenţierea unor date sau, pur şi simplu, pentru a delimita spaţiul paginii. Desigur, tabelul rezultat poate fi privit în mod clasic, cu linii şi coloane, aşa cum suntem obişnuiţi, dar poate fi folosit şi în alte scopuri, cum ar fi: aliniarea imaginilor (elemente de tip IMG în raport cu textul) sau scrierea în coloane. Din acest motiv, în sens larg, prin tabel vom înţelege o grupare în linii şi coloane a mai multor elemente HTML.
Elementul TABLE - descrie un tabel, utilizând etichetele:
Un text | Un text cu mult mai lung! |
Text | Text |
O noua celula | Un text | Un text cu mult mai lung! |
Text | Text |
Un text cu mult mai lung! | |
Text | Txt |
T11 | T13 |
T21 | T23 |
T31 | T33 |
T11 | T12 | |
T21 | T22 | T23 |
T31 | T32 | T33 |
T11 | T12 | T13 |
T21 | T22 | T23 |
T31 | T32 | T33 |
T11 | T12 | T13 |
T21 | T22 | |
T31 | T32 | T33 |
T11 | T12 | |
T21 | ||
T31 | T32 | T33 |
Nume tip | Numar octeti | Valoare |
float | 4 | 3.4*10 -38 si 3.4*10 38 |
double | 8 | 1.7*10 -308 si 1.7*10 308 |
long double | 10 | 3.4*10-4932 si 3.4*104932 |
Un text; Un text; Un text; Un text; Un text; Un text; Un text; Un text; Un text; Un text; Un text; Un text; Un text; Un text; Un text; |
Scrierea pe coloane | |
Un text scris pe doua coloane. Formam un tabel cu o singura linie si doua celule de date. | Trebuie sa ne asiguram ca textul este impartit de asa natura astfel incat sa ocupe aproximativ acelasi spatiu in cele doua coloane. |
Pentru mai multe informatii,
vizitati site-ul NASA !
Acesta este un paragraf
Acest paragraf este scris pentru a verifica modul de aliniere pe orizontala in cazul unui element IMG, care este de tip INLINE , deci se insereaza exact ca un cuvant intr-un paragraf
Paragraful este un element de tip BLOC, asa ca se insereaza pe o linie noua!
Un text oarecare
A11 | |
A21 | A22 |
Un text oarecare
A11 | |
A21 | A22 |
Un text oarecare
A11 | A21 |
A21 | A22 |
Un text oarecare
A11 | A21 |
A21 | A22 |
A11 | A21 |
A21 | A22 |
A11 | A21 |
A21 | A22 |
Un text oarecare
Un text oarecare
Alt text oarecare