Notiuni fundamentale despre bazele de date si SQL (1)

Acesta lectie explica bazele de date relationale si modul de utilizare a acestora.
Spre deosebire de fisiere, bazele de date prezinta multe avantaje, inclusiv o mai mare protectie a integritatii datelor si asigurarea partajarii datelor.
In aceasta lectie va fi prezentat SQL, limbajul standard pentru crearea, accesul si manipularea bazelor de date relationale. Detaliile (cu precadere sintaxa SQL sunt cele referitoare la MySQL, cel mai popular limbaj de baze de date folosit cu PHP.

1. Structura unei baze de date relationale

O baza de date relationale stocheaza datele în tabele, iar fiecare tabel stocheaza in coloane informatii despre un anumit tip de element.
In continuare puteti vedea un tabel caracteristic dintr-o baza de date relationala care prezinta personalitati istorice ale Americii.

PersoanaID Nume AnNastere
001 George Washington 1732
002 John Adams 1735
003 Thomas Jefferson 1743
Primul rând al tabelului atribuie nume pentru fiecare coloana.
Fiecare rând al tabelului, altul decât primul rând, descrie o singura personalitate. De exemplu, al doilea rând descrie o personalitati pe nume George Washington.
Fiecare coloana, descrie un anumit atribut al personalitatii De exemplu, a doua coloana contine numele personalitatilor, iar a treia coloana contine anii în care s-au nascut acestia.
Pentru a se putea face referire, mai usor, la un anumit rând al tabelului, se obisnuieste ca fiecare tabel sa contina o coloana care identifica în mod unic fiecare rând. Aceasta coloana se numeste "cheia primara" a tabelului. In exemplul prezentat, coloana numita "PersoanaID" serveste drept cheie primara.
Daca nici o coloana nu contine o valoare unica pentru fiecare rând, se pot combina valorile mai multor coloane pentru a crea o "cheie primara compusa".
O baza de date relationala se numeste astfel datorita capacitatii sale de a stabili relatii între date din mai multe tabele.
Urmatorul exemplu prezinta doua tabele si o relatie între acestea.
PersoanaID Nume AnNastere
001 George Washington 1732
002 John Adams 1735
003 Thomas Jefferson 1743
Meserie PersoanaID
Arhitect 003
General 001
Filozof 002
Al doilea tabel contine informatii despre meseriile caracteristice ale persoanelor prezentate in exemplul anterior. Mai precis, tabelul identifica persoana cu o anumita meserie. Numele meseriei serveste drept cheie primara a tabelului, care mai contine, în afara de aceasta, o singura coloana.
Coloana respectiva stocheaza atributul "PersoanaID" din primul tabel, al persoanei care cunoaste meseria descrisa de un anumit rând. De exemplu, angajatul cu numarul 003 este arhitect.
Retineti ca "PersoanaID" este atât cheia primara a tabelului original, dar si o coloana din noul tabel. Coloana "PersoanaID" a noului tabel se numeste "cheie externa"; desi nu este cheia primara a noului tabel, este cheia primara a unui alt tabel.

Aplicatia software care gazduieste o baza de date se numeste "sistem de gestiune a bazelor de date" (SGBD). Exista multe sisteme de gestiune a bazelor de date, printre cele mai populare asemenea sisteme se numara: DB2 , Interbase , MySQL , Oracle , Postgresql , SQL Server , Sybase .
MySQL este cel mai popular sistem de gestiune a bazelor de date destinat utilizarii cu PHP, în mare masura deoarece este gratuit. Totusi, prin intermediul PHP este posibil accesul la aproape orice SGBD modern.

Bazele de date relationale înteleg SQL (Structured Query Language), un limbaj relativ simplu, folosit pentru solicitarea datelor. In ciuda simplitatii sale, SQL este un limbaj foarte puternic, care poate obtine accesul la date stocate în mai multe tabele, poate filtra datele dorite si poate sorta, rezuma si afisa rezultatele.
În general, bazele de date relationale îsi stocheaza datele într-un singur fisier sau catalog. Aceasta caracteristica de organizare faciliteaza administrarea datelor, deoarece executarea copiei de siguranta, respectiv restaurarea unui singur fisier sau catalog se realizeaza mai usor.
Sistemele de gestiune a bazelor de date relationale necesita mai multe cicluri de procesor pentru a satisface o cerere de date decât cele necesare pentru accesul la un fisier normal, dar ofera protectie sporita a datelor, iar pentru accesul la distanta usureaza traficul deoarece majoritatea operatiilor sunt efectuate de programul SQL, astfel singurele date transmise in retea ar fi rezultatul cerut.

2. Proiectarea unei baze de date

Cand creati un tabel intr-o baza de date, este important sa tineti cont de "cheia primara" si sa va bazati pe aceasta. Coloanele dintr-un tabel trebuie sa se bazeze pe cheia primara în totalitatea sa.
O alta operatie importanta este specificarea unui tip de date pentru fiecare coloana. Majoritatea bazelor de date relationale accepta urmatoarele tipuri de date generale:

Tabelul urmator rezuma tipurile de date cele mai frecvent utilizate, acceptate de MySQL si de majoritatea bazelor de date relationale. MySQL accepta multe alte tipuri de date, dar acestea sunt cele mai folosite.
Principalele tipuri de date din MySQL
Tip de date Descriere
BLOB - Date binare arbitrare, cu o lungime maxima de 65535 octeti
CHAR(m) - Un sir de caractere de lungime fixa, cu un maxim de m caractere, unde m este mai mic decât 256. Pentru obtinerea lungimii dorite, se insereaza spatii finale
DATE - O data în format an-luna-zi; de exemplu 2008-10-15
DECIMAL
DECIMAL(m,d)
- Un numar zecimal, reprezentat sub forma de sir cu "m" cifre, din care "d" se afla la dreapta punctului zecimal. Daca "m" si "d" sunt omise, în mod prestabilit se vor utiliza valorile 10 si 0
DOUBLE
DOUBLE (m, d)
- Un numar cu virgula mobila, cu dubla precizie, având o latime de afisare egala cu "m" si un numar de "d" cifre dupa virgula.
FLOAT(m,d) - Un numar cu virgula mobila, cu simpla precizie, având o latime de afisare egala cu "m" si un numar de "d" cifre dupa virgula
INTEGER
INTEGER UNSIGNED
- Un întreg pe 32 de biti. Daca se specifica atributul UNSIGNED, domeniul de valori este cuprins între 0 si 4294967295; în caz contrar, domeniul este cuprins între valorile -2147483648 si 2147483647
NUMERIC
NUMERIC (m, d)
- Similar cu DECIMAL
REAL
REAL(m, d)
- Similar cu DOUBLE
SMALLINT
SMALLINT UNSIGNED
- Un întreg pe 16 biti. Daca se specifica atributul UNSIGNED, domeniul de valori este cuprins între 0 si 65535; în caz contrar, domeniul este cuprins între valorile –32768 si 32767
TIME
TIMESTAMP
TIMESTAMP(m)
- Ora în format ora-minut-secunda; de exemplu, 08-20-00. O valoare de tip data si ora, în format an-luna-zi ora-minut-secunda; de exemplu, 1976-01-05 00:00:00. Aceasta reprezentare este similara celei returnate de functiile UNIX. Pt. stocare valoarea este transformata din timpul curent in UTC si transformata invers la solicitarea datei.
VARCHAR(m) - Un sir caracter de lungime variabila, cu un maximum de "m" caractere, unde m este mai mic decât 256 pentru versiuni MySQL anterioare 5.0.3, iar pt. cele mai noi limita este 65 535 bytes. Spatiile finale au fost eliminate
Iata cateva indicatii pentru selectarea tipurilor de date:

3. Crearea unei baze de date MySQL si a unui tabel

Dupa atata teorie, sa trecem la lucruri mai practice.
La început, o baza de date nu contine tabele. Pentru a crea o baza de date si apoi un tabel într-o baza de date, folositi un sub-limbaj SQL special, cunoscut sub numele de Data Definition Language (DDL).
Puteti emite comenzi DDL si alte comenzi SQL prin intermediul unui interpretor SQL sau prin intermediul PHP. Pentru inceput va fi prezentat modul de emitere a comenzilor SQL folosind un interpretor SQL. In lectiile urmatoare va fi prezentat modul de emitere a comenzilor SQL utilizând PHP.
Dupa ce aveti instalat MySQL, deschideti iterpretorul "MySQL Command Line Client" (asemanator cu, "Command Promt") in care scrieti comenzile SQL (În general, SQL nu este sensibil la diferenta între majuscule si minuscule. Deci, puteti scrie comensile cum preferati, cu majuscule sau minuscule).
Ca regula, dupa scrierea comenzilor, la sfarsit trebue sa fie caracterul "punct si virgula" (;)
Pentru a crea o baza de date, folositi urmatoarea comanda:

Unde "nume_db" este numele bazei de date care va fi creata.
Inainte de a crea un tabel sau a lucra cu alte comenzi intr-o baza de date, trebuie sa intrati in baza de date existenta, acest lucru se face folosind comanda: Unde "nume_db" este numele bazei de date. Cu aceeasi comanda "USE nume_db" se schimba si baza de date in care vrem sa lucram.
Pentru a crea un tabel într-o baza de date, emiteti comanda "CREATE TABLE", care are urmatoarea forma: Unde "tabel" este numele tabelului, "coloana" este numele unei coloane, "tip" este tipul datelor incluse în coloana, se poate specifica un numar nedefinit de coloane.
De exemplu, comanda urmatoare creeaza un tabel numit "carte", care contine coloanele "carteid", "titlu" si "pret":
CREATE TABLE carte (carteid CHAR(10), titlu VARCHAR(255), pret decimal(5,2));
- În afara tipului de date, intre paranteze, puteti specifica si alte atribute optionale ale unei coloane: Iata un exemplu ceva mai complicat de creare a unui tabel, care foloseste unele din aceste atribute optionale:
CREATE TABLE carte (carteid CHAR(10) PRIMARY KEY,
titlu VARCHAR(255) NOT NULL,
pret DECIMAL(5,2) DEFAULT 50.00);

4. Stergerea si modificarea unui tabel

Stergerea unui tabel sau a unei coloane este un act irevocabil, datele fiind definitiv sterse.
Pentru a sterge un tabel, scrieti urmatoarea comanda:

Unde "tabel" este numele tabelului care va fi sters.
Dupa crearea unui tabel, îl puteti modifica prin emiterea unei comenzi "ALTER TABLE", care are mai multe forme.
Urmatoarea forma a comenzii va permite sa stergeti o coloana din tabel: Unde "tabel" este numele tabelului care va fi modificat, iar "coloana" este numele coloanei care va fi stearsa.
O alta forma a comenzii va permite sa adaugati o noua coloana în tabel: Unde "tabel" este numele tabelului care va fi modificat, "coloana" este numele coloanei care va fi adaugata, "tip" este tipul noii coloane, iar "[optiuni]" constituie toate optiunile dorite, precum PRIMARY KEY.
De exemplu, pentru a adauga coloana "pretnou" la tabelul "carte", scrieti comanda:
ALTER TABLE carte ADD pretnou DECIMAL(5,2) DEFAULT 50.00;
Pentru a vedea toate bazele de date create in MySQL, folositi urmatoarea comanda:
Pentru a vedea toate tabelele dintr-o baza de date din MySQL, folositi urmatoarea comanda:
Pentru a vedea toate coloanele dintr-un tabel, si atributele acestora, folositi urmatoarea comanda:
Optiuni pentru utilizarea caracterelor ... <<-- Anterior --- Urmator -->> Baze de date SQL ...

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Ce tag se foloseste pentru a adauga liste in elemente <ul> si <ol>?
<dt> <dd> <li>
<ul>
 <li>http://coursesweb.net/html/</li>
 <li>http://www.marplo.net/html/</li>
</ul>
Care valoare a proprietatii "display" seteaza elementul ca tip bloc si afiseaza un punct in fata?
block list-item inline-block
.some_class {
  display: list-item;
}
Care instructiune JavaScript transforma un obiect in sir JSON.
JSON.parse() JSON.stringify eval()
var obj = {
 "courses": ["php", "javascript", "ajax"]
};
var jsonstr = JSON.stringify(obj);
alert(jsonstr);    // {"courses":["php","javascript","ajax"]}
Indicati clasa PHP folosita pentru a lucra cu elemente HTML si XML in PHP.
stdClass PDO DOMDocument
$strhtml = '<body><div id="dv1">CoursesWeb.net</div></body>';
$dochtml = new DOMDocument();
$dochtml->loadHTML($strhtml);
$elm = $dochtml->getElementById("dv1");
echo $elm->nodeValue;    // CoursesWeb.net
Indicati forma de Prezent Continuu a verbului "to live" (a trai /a locui)
lived living liveing
I`m living here.
- Traiesc /Locuiesc aici.
Care este forma de Gerunziu (sau Participiu Prezent) a verbului "vivir" (a trai /a locui)?
vivió vivido viviendo
Estoy viviendo aquí.
- Traiesc /Locuiesc aici.
Notiuni fundamentale despre bazele de date SQL - Tutoriale PHP