E N D
BAZA DE DATE RELAŢIONALĂ • Chiar dacă F.E. Codd, ca matematician, a construit un model riguros, cu concepte matematice, baza de date relaţională este percepută de utilizatorii săi ca o colecţie de tabele (tablouri bidimensionale de date, numite şi relaţii), noţiune care nu necesită definiţii suplimentare. • Sunt aici patru concepte care trebuie reţinute şi înţelese: • tabelele • coloanele tabelului • rândurile tabelului • câmpurile din tabel, de pe o anumită coloană şi linie.
Exemplu Tabela CLIENŢI -------------------------------------------------- | NrS NUME STARE ORAS | |------------------------------------------------| | S1 Ionescu 20 LONDRA | | S2 Popescu 10 PARIS | | S3 Teodorescu 30 PARIS | -------------------------------------------------- Tabela PIESE --------------------------------------------------------- | NrP NUMEP CULOARE GREUTATE ORAS | |-------------------------------------------------------| | P1 NIT ROSU 12 LONDRA | | P2 PIRON VERDE 17 PARIS | | P3 SURUB ALBASTRU 17 ROME | | P4 SURUB ROSU 14 LONDON | ---------------------------------------------------------
Exemplu Tabela CUMPARATURI ------------------- | NrS NrP QTY | |-----------------| | S1 P1 300 | | S1 P2 200 | rând--------->| S1 P3 400 | | S2 P1 300 | | S2 P2 400 --|----câmp | S3 P3 200 | -------------------
Modelul relaţional • Modelul relaţional al bazei de date imită procesele unei ramuri a algebrei, cunoscute sub numele de "Algebră relaţională". Aceste procese implică: • o colecţie de obiecte cunoscute sub numele de RELAŢII • o mulţime de operatori care acţionează asupra relaţiilor pentru a produce noi relaţii. • O relaţie, în cazul discret, poate fi privită şi înţeleasă ca o Tabela. Modificarea datelor se realizează prin operaţii relaţionale aplicate asupra tabelelor. Spre exemplu, restricţia unei relaţii, a unui tabel, va fi un nou tabel în care se păstrează doar anumite linii. Iar proiecţia unei relaţii - unui tabel - va fi un nou tabel în care se păstrează doar anumite coloane.
Operatorii relaţionali Operatorii relaţionali (în cadrul bazelor de date relaţionale) sunt definiţi în tabelul următor:
Proprietăţi ale bazelor de date relaţionale • O bază de date relaţională apare ca o colecţie de relaţii (tabele) • Există o mulţime de operatori pentru transformarea şi combinarea relaţiilor: • selecţia, • proiecţia, • produsul, • join-ul, • reuniunea, • intersecţia, • diferenţa • Nu apar pointeri; conexiunile sunt făcute numai pe baza datelor. • Există o independenţă totală a datelor. • Limbajul utilizat pentru interogarea bazei de date este non-procedural şi similar limbii engleze. • Utilizatorul nu specifică calea de acces şi nu are nevoie să ştie cum este aranjată fizic informaţia. • Comenzile pentru selecţia sau refacerea datelor, cât şi acelea pentru realizarea schimbărilor în baza de date sunt incluse într-un singur limbaj, standardizat acum ca SQL.
Proprietăţile relaţiilor tabelare Fiecare tabelă, individual, are următoarele proprietăţi: • Nu există rânduri duplicate • Nu există nume de coloane identice (duplicate) • Ordinea rândurilor este neimportantă • Ordinea coloanelor este neimportantă • Valorile (câmpurile) sunt atomice (nedecompozabile).
SQL • este limbajul utilizat pentru a accesa o bază de date relaţională; • poate fi utilizat atunci când accesul la baza de date este necesar, de fiecare instrument de gestiune a bazelor de date (Access, Oracle, SQL-Server, MySQL,...); • este un limbaj simplu, ne-procedural, cu comenzi intuitive în limba engleză; • este un limbaj standard pentru bazele de date.
Trăsături caracteristice ale limbajului SQL • SQL, ca şi majoritatea limbajelor de programare, foloseşte cuvinte din limba engleză. In mod special cuvintele select, insert, delete ca elemente ale setului de comenzi. • SQL este un limbaj neprocedural: specifică care sunt informaţiile dorite, nu cum se obţin acestea. Cu alte cuvinte, SQL nu cere să fie specificată metoda de acces la date. • Execuţia comenzilor SQL asupra înregistrărilor nu se poate face decât secvenţial, asupra câte unei singure înregistrări. Setul de înregistrări fiind văzut ca set de linii ale unui tabel. • SQL poate fi folosit de un şir de utilizatori, incluzând administratorul bazei de date, programatorii de aplicaţii, personalul de management şi multe alte tipuri de utilizatori. • SQL include comenzi pentru o varietate de sarcini, incluzând: • selecţia unor date • inserarea, extragerea şi ştergerea rândurilor dintr-un tabel • crearea, modificarea şi ştergerea obiectelor de tip bază de date • controlul accesului la baza de date şi la obiectele de tip bază de date • verificarea - garantarea consistenţei bazei de date
Setul de comenzi SQL • Comenzile de definire a datelor (DDL): CREATE, ALTER, DROP • aceste trei comenzi sunt utilizate dinamic pentru a crea, utiliza şi şterge orice structură de date, în particular tabele. • Comenzile de manipulare a datelor (DML): INSERT, UPDATE, DELETE şi SELECT • utilizate pentru a introduce noi rânduri, pentru a schimba (actualiza) rândurile existente, pentru a şterge rândurile nedorite din baza de date respectivă, şi, în fine, SELECT - comanda cea mai utilizată, folosită pentru a căuta, a selecta înregistrări din tabel sau dintr-o combinaţie de tabele ale bazei de date. • Comenzile de control (grupul DCL), la dispoziţia administratorului(DBA): GRANT, REVOKE • utilizate pentru a da sau a lua drepturi de acces (la comenzi DML, deci la operarea unor modificări a bazei de date).
Exemplu CREATE TABLE CUSTOMER ( CustomerID Integer PRIMARY KEY FirstName Character (15),LastName Character (20) NOT NULL,Title Character (5),Street Character (25),City Character (25),State Character (2),Phone Character (15) ); INSERT INTO CUSTOMER (CustomerID, FirstName, LastName) VALUES (:vcustid, 'Dana', 'Popescu'); GRANT SELECT INSERT ON CUSTOMER TO Ana, Victor
Scrierea comenzilor SQL • Comenzile SQL pot fi scrise pe una sau mai multe linii. • Clauzele sunt uzual plasate pe linii separate. • Poate fi folosită tabelarea. • Cuvintele de comandă nu pot fi separate pe mai multe linii. • Comenzile SQL pot fi scrise fie cu majuscule fie cu minuscule (nu sunt 'case sensitive'). • O comandă SQL este introdusă la prompterul SQL, iar liniile subsecvenţelor sunt numerotate. • O singură declaraţie poate fi considerată curentă, cât timp ea este într-un buffer şi poate fi rulată într-un anumit număr de moduri : • plasând un punct şi virgulă(;) la sfârşitul ultimei clauze. • plasând un punct şi virgulă urmat de semnul / (slash) pe ultima linie în buffer. • plasând un slash (/) la prompterul SQL. • scriind comanda SQL R[UN] la prompterul SQL.
Blocul de interogare de bază • Declaraţia SELECT regăseşte informaţia din baza de date, putând îngloba şi unul sau mai mulţi operatori din algebra relaţională. • In cele mai simple forme trebuie să conţină: • O clauză SELECT, care listează coloanele pentru afişare astfel încât este esenţiala o Proiecţie. • O clauză FROM care specifică tabela implicată.
Exemple • SELECT * FROM EMP; • SELECT ENAME, SAL*12, COMM FROM EMP; • SELECT ENAME, SAL*12 ANNSAL, COMM FROM EMP; • SELECT EMPNO||ENAME EMPLOYEE FROM EMP; • SELECT DISTINCT DEPTNO FROM EMP; • SELECT ENAME, JOB, SAL*12, DEPTNO FROM EMP ORDER BY ENAME; • SELECT ENAME, JOB, HIREDATE FROM EMP ORDER BY HIREDATE DESC;
Sa nu ne stresam foarte tare Utilizam serverul de baze date MySQL Interfata phpmyadmin
Conectarea la baza de date conect.php <?php $host = "localhost"; $user = "root"; $passw = “"; $db = “studentil"; $link= mysql_connect($hoste,$user,$passw) or die("Nu raspunde serverul MySQL!"); mysql_select_db($dbe,$link) or die("Nu gasesc baza de date!"); ?>
Afisarea inregistrarilor SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr ...] [ FROM table_references [ WHERE where_condition] [ GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)] [INTO OUTFILE 'file_name' export_options | INTO DUMPFILE 'file_name' | INTO var_name [, var_name]] [FOR UPDATE | LOCK IN SHARE MODE]] SELECT * FROM studenti SELECT nume FROM studenti SELECT nume, data_n FROM studenti ORDER BY nume ASC
Si surpriza • Exemplul