BAZE DE DATE - TERMINOLOGIE 

1. primary key - A column or columns that uniquely identifies a row in a table
Definition: The primary key of a relational table uniquely identifies each record in the table. It can either be a normal attribute that is guaranteed to be unique (such as Social Security Number in a table with no more than one record per person) or it can be generated by the DBMS (such as a globally unique identifier, or GUID, in Microsoft SQL Server)


2. foreign key - The commonly accepted definition of a foreign key is when one table�fs primary key occurs in another table. But is this really accurate?
A foreign key is a column or set of columns in one table that matches a candidate key in another table. Some developers interpret this to mean a foreign key is simply an indexed column(s) in one table transferred to a related table. But this completely removes the primary key from the definition.


To clear up any confusion, let�fs define the other key terms before we continue:
A superkey is any column or set of columns that uniquely identifies each record in a table. Not every superkey is a good candidate key.
A candidate key is a superkey containing the minimum number of columns to uniquely identify each record in a table. Not every candidate key is a good primary key.
A primary key is the candidate key used to uniquely identify each record in a table.
An alternate key is a candidate key not chosen as the primary key.


Stored Procedures - Compiled code residing on an intelligent database server that reduces the processing burden on the client.


Compilation - Compilation is the process of creating an executable program from source code.; The act or process of compiling or gathering together from various sources.

       O baza de date poate contine una sau mai multe tabele. O tabela este unitatea de baza intr-un RDBMS (Relational Database Management System). Pentru tabela EMP de mai sus:

       O linie sau un uplu reprezinta toate datele cerute pentru un angajat anume. Fiecare linie intr-o tabela ar trebuie identificata printr-o cheie primara (primary key) care sa ia valori distincte pentru uple distincte. Ordinea uplelor este nesemnificativa, ordinea lor se specifica atunci cind datele sint aportate.

       O coloana sau atribut, EMPNO, contine marca angajatului si este cheie primara. Marca angajatului identifica in mod unic un angajat in tabela EMP. Cimpul corespunzator unei chei primare(PK) trebuie sa contina o valoare diferita de NULL.

       Coloana MGR nu poate constitui cheie unica. Ordinea coloanelor este nesemnificativa in stocarea datelor. Se specifica ordinea coloanelor cind datele sint aportate.

       Coloana ce contine numarul departamentului este o cheie externa (foreign key). O cheie externa este o coloana ce descrie modul in care tabelele sint puse in relatie. O cheie externa face referire la o cheie primara sau unica dintr-o alta tabela. In exemplu, DEPTNO identifica in mod unic un departament in tabela DEPT.

       Un cimp este dat de intersectia dintre o linie si o coloana. Poate fi o singura valoare in el.

       Un cimp poate sa nu contina o valoare definita. Acest tip special de valoare este numita valoare NULL (NULL reprezinta o valoare inaccesibila, indisponibila sau nedefinita). In tabela EMP, numai angajatii cu rol de comis voiajor au o valoare definita in cimpul COMM.

       Punerea in relatie a tabelelor

 

       Un RDBMS permite crearea relatiilor intre tabele, folosind cheile externe. O cheie externa(FK), este o coloana sau o multime de coloane ce se refera la o cheie primara sau unica a aceleiasi tabele sau a unei alte tabele.

       Reguli asupra cheilor primare si externe:

    • Pentru o cheie primara nu sint admise valorile duplicate;
    • PK nu pot fi schimbate in general;
    • FK reprezinta pointeri logici, nu fizici;
    • Valoarea pentru o FK trebuie sa corespunda valorii unei PK sau a unei chei unice(UNIQUE KEY, UK), sau sa fie NULL.
 

Proprietatile bazelor de date relationale 

O baza de date relationala

    • Poate fi accesata si modificata prin executarea instructiunilor SQL (Structured Query Language) ;
    • Contine o multime de tabele fara pointeri fizici ;
    • Foloseste o multime de operatori .

Solutia ORACLE pentru modelul relational al bazelor de date

 

       Sistemul ORACLE de administrare a bazelor de date relationale  include serverul Oracle si unele utilitare pentru mentinerea, monitorizarea si utilizarea datelor. Dictionarul de date Oracle este una din componentele principale ale Serverului. El consta dintr-o multime de tabele si view-uri ce constituie o referinta read-only a bazei de date.

       RDBMS-ul indeplineste sarcini ca cele ce urmeaza:

    • administreaza stocarea si definirea datelor;
    • controleaza si restrictioneaza accesul concurent la date;
    • admite operatiuni de backup si recovery ;
    • interpreteaza instructiunile SQL si PL/SQL .
 

Nota: PL/SQL este un limbaj procedural ORACLE ce extinde SQL.  

Instructunile SQL: 

Instructiune

Descriere

SELECT

Aportarea de date

Aporteaza datele din baza de date

INSERT

UPDATE

DELETE

Data Manipulation Language (DML)

Introduce noi linii, schimba liniile existente, sterge linii din tabelele bazei de date, respectiv.

CREATE

ALTER

DROP

RENAME

TRUNCATE

Data Definition Language (DDL)

Creeaza, modifica si inlatura structuri ale bazei de date.

COMMIT

ROLLBACK

SAVEPOINT

Controlul Tranzactiilor

Administreaza modificarile efectuate asupra datelor de instructiunile DML. Actiunile asupra datelor pot fi grupate in tranzactii logice.

GRANT

REVOKE

Data Control Language (DCL)

Confera sau revoca drepturi de acces atit asupra bazei de date ORACLE cit si asupra structurilor continute.

 

SQL si SQL*Plus 

       SQL este un limbaj de comanda pentru comunicarea cu Serverul ORACLE din orice utilitar sau aplicatie. O instructiune SQL, odata introdusa, este stocata intr-o zona de memorie, bufferul SQL, unde ramine pina cind este introdusa o noua instructiune SQL sau un bloc PL/SQL.

       SQL*Plus este un utilitar ORACLE ce recunoaste si inainteaza instructiunile SQL Serverului ORACLE, utilitar ce contine propriul sau limbaj de comanda.

       Caracteristici ale SQL

 
    • Este un limbaj neprocedural
    • Este asemanator limbajului natural

       Caracteristici ale SQL*Plus

 
    • Accepta input SQL din fisiere;
    • Ofera un editor in mod linie pentru editarea instructiunilor SQL;
    • Controleaza setarile mediului;
    • Formateaaza rezultatele interogarilor pentru rapoarte elementare;
    • Acceseaza baze de date locale sau la distanta.

Instructiunile SQL vs. comenzile SQL*Plus

 

       SQL

       SQL*Plus

Este un limbaj de comunicare cu Serverul ORACLE pentru a accesa datele

Recunoaste instructiunile SQL si le trimite Serverului

Este bazat pe standardul ANSI pentru SQL

Este interfata proprietate ORACLE pentru executarea instructiunilor SQL

Manipuleaza datele si definitiile de tabele din baza de date

Nu permite manipularea valorilor din baza de date

Este introdus in bufferul SQL pe una sau mai multe linii

Este introdus cite o linie; nu este stocat in bufferul SQL

Nu are un caracter de continuare

Are cratima (-) drept caracter de continuare atunci cind comanda este mai lunga de o linie

Nu poate fi abreviat

Poate fi abreviat

Foloseste un caracter de terminare pentru executarea imediata a comenzii

Nu necesita caracter de terminare; comenzile sint executate imediat

Foloseste functii pentru a produce anumite formatari

Foloseste comenzi pentru a formata datele

       Formatarea outputului folosind SQL*Plus

 

Obiective :

    • Configurarea mediului SQL*Plus
    • Formatarea outputului
    • Salvarea configurarilor
    • Definirea variabilelor utilizator:
    • Comenzile DEFINE si ACCEPT
 

Definirea variabilelor utilizator: 

DEFINE variable = value 

       Creeaza o variabila utilizator de tip CHAR si ii asigneaza o valoare 

DEFINE variable 

       Afiseaza variabila, valoarea ei si tipul ei de data 

DEFINE 

       Afiseaza toate variabilele definite de utilizator impreuna cu valorile si tipurile de date corespunzatoare. 

ACCEPT variable [datatype] [FORMAT format]

       [PROMPT text] {HIDE} 

unde:

    • variable este numele variabilei in care va fi stocata valoarea;
    • datatype este fie NUMBER, fie CHAR fie DATE; CHAR are o lungime maxima de 240 octeti; DATE este citita cf.formatului si tipul la care este convertita este CHAR;
    • FOR[MAT] format specifica modelul de format, d.ex.A10 sau 9.999;
    • PROMPT afiseaza textul dupa care utilizatorul este chemat sa introduca valoarea;
    • HIDE ascunde textul introdus de utilizator (d.ex.o parola).

       Configurarea mediului SQL*Plus

 

       Se poate controla mediul in care opereaza SQL*Plus folosind comanda SET. 

SET system_variable value  

unde:

    • system_variable este variabila asociata unui anumit aspect al mediului sesiunii;
    • value este valoarea asociata.
 

Exemple de variabile folosite in comanda SET 

Variabile SET si valori ale acestora

       Descriere

COLSEP { |text}

Seteaza textul de tiparit intre coloane. Implicit blank.

HEA[DING] {ON|OFF}

Determina daca numele coloanelor este tiparit in raport

LIN[ESIZE] n

Seteaza numarul de caractere de tiparit pe o linie

PAGE[SIZE] n

Specifica numarul de linii pe o pagina de output

 

       Fisierul login.sql contine comenzi SET standard sau alte comenzi ce se doresc a fi executate in fiecare sesiune. Fisirul este citit si executat in momentul deschiderii sesiunii.

       Comenzile SQL*Plus de formatare

 

Se pot determina caracteristicile afisarii rezultatelor unei instructiuni SELECT 

       Comanda

       Descriere

COL[UMN] [column option]

Controleaza formatul coloanelor

TTI[TLE] [text|ON|OFF]

Specifica antetul ce va aparea la inceputul fiecarei pagini

BTI[TLE] [text|ON|OFF]

Specifica subsolul de pagina pentru fiecare pagina

BRE[AK] [ON report element]

Suprima afisarea valorilor duplicate si desparte liniile de date cu caractere linefeed

 

Comanda COLUMN controleaza modul de afisare a unei coloane 

COL[UMN] [{column|alias} [option]] 

option

descriere

CLE[AR]

sterge orice formatare asociata unei coloane

FOR[MAT] format

schimba afisarea datelor din coloana respectiva

HEA[DING] text

fixeaza titlul coloanei

 

Posibilitati de formatare a coloanelor

element

descriere

An

Impune o lungime de afisare egala cu n

9

Cifra (zerourile nu sint afisate)

0

Impune afisarea zerourilor nesemnificative

.

Pozitia punctului zecimal

 

Exercitii

Lansati SQL*Plus, conectati-va in contul SCOTT, parola TIGER, si exersati aspectele prezentate mai sus.

INSTRUCTIUNILE DML

OBIECTIVE:

    • Descrierea instructiunilor DML
    • Inserarea de linii intr-o tabela
    • Modificarea liniilor dintr-o tabela
    • Stergerea liniilor dintr-o tabela
    • Controlul tranzactiilor
 

Limbajul de manipulare a datelor:

    • O instructiune DML se executa cind:
    • Se adauga noi linii unei tabele
    • Se modifica linii din tabela
    • Se sterg linii din tabela
    • O tranzactie consta intr-o multime de instructiuni DML ce formeaza o unitate logica de prelucrare a datelor.

Limbajul de manipulare a datelor

       Cind se adauga, actualizeaza sau sterg date din baza de date, se foloseste o instructiune DML. O multime de instructiuni DML ce formeaza o unitate logica de prelucrare se numeste tranzactie.

       Fie o baza de date a unei banci. Cind un client transfera banii dintr-un cont de depozit intr-unul de cheltuieli, tranzactia ar putea consta in trei pasi: scaderea contului de depozit, cresterea contului de cheltuieli si inregistrarea tranzactiei in jurnalul de tranzactii. Serverul ORACLE trebuie sa garanteze ca toate cele trei instructiuni SQL sint executate cu succes. Cind ceva impiedica reusita executarii uneia din cele trei instructiuni SQL, efectul instructiunilor anterior executate trebuie anulat.

       Orice tabela are privilegii de INSERT, UPDATE, DELETE asociate ei. Aceste privilegii sint automat conferite creatorului tabelei, dar, in general, aceste privilegii trebuie sa fie explicit conferite altor utilizatori.

Instructiunea INSERT

 

INSERT INTO table [(column [, column ...])

VALUES (value [, value...]) ; 

O singura linie se insereaza cu aceasta sintaxa.

In sintaxa:

       table  este numele tabelei;

       column este numele coloanei in tabela de populat;

       value  este valoarea corespunzatoare coloanei.

Inserarea de linii cu valori NULL:

    • Metoda implicita: se omite numele coloanei din lista de coloane;
    • Metoda explicita: se specifica NULL in lista de valori.

Erori uzuale care pot apare la executarea unui INSERT:

    • Lipsa unei valori corepunzatoare unei coloane NOT NULL in lista de valori;
    • Valori duplicate ce violeaza restrictia UNIQUE;
    • Restrictia de cheie externa violata;
    • Restrictie CHECK violata;
    • Nepotrivire de tipuri de date;
    • Valoare prea mare pentru a putea fi stocata in coloana.
 

Inserarea de valori speciale:

       SYSDATE - functie ce returneaza data sistem

       USER - functie ce returneaza numele utilizatorului 

Pentru copierea de linii dintr-o alta tabela, in locul clauzei VALUES se scrie o subinterogare: 

INSERT INTO table [column(, column...)]

subquery  

Numarul de coloane si tipul lor de data in lista de coloane a clauzei INSERT trebuie sa se potriveasca cu numarul valorilor, respectiv cu tipul lor de data, din subinterogare.

Instructiunea UPDATE

 

UPDATE table

SET column=value [, column = value ...]

[WHERE condition] 

unde:

table  este numele tabelei

column numele coloanei in tabela

      value este valoarea cu care se actualizeaza  (eventual obtinuta printr-o subinterogare)

condition identifica liniile de actualizat 

Obs: Este recomandat sa se foloseasca coloane chei primare in clauza WHERE daca se doreste actualizarea doar a unei linii. 

Actualizare folosind subinterogari multicoloana: 

UPDATE table

SET (column, column, ...) =

       (SELECT column, column, ...

        FROM table

        WHERE condition)

WHERE condition

    NOTA: Daca se incearca o actualizare ce violeaza o restrictie de integritate, va apare eroare (d.ex. modificarea unei valorii unui cimp dintr-o coloana supusa unei restrictii FOREIGN KEY, a.i. valoarea rezultata nu se regaseste in tabela referita de restrictie).

Stergerea unei linii dintr-o tabela

 

Stergerea unei linii dintr-o tabela se poate face cu instructiunea DELETE.

Stergerea tuturor linilor unei tabele se poate face cu instructiunea TRUNCATE, mai rapida decit DELETE din urmatoarele motive:

    • instructiunea TRUNCATE este o instructiune DDL si nu genereaza informatie de rollback;
    • trunchierea unei tabele nu declanseaza trigger-ele DELETE ale tabelei;
    • daca tabela este parinte intr-o relatie de tip FOREIGN KEY, ea nu poate fi trunchiata. Restrictia de integritate trebuie dezactivata inainte.

Instructiunea DELETE

 

DELETE [FROM] table

[WHERE condition] 

    Nota: Daca se inceaca stergerea unei linii supusa unei restrictii de integritate (d.ex.stergerea unei linii referita ca parinte de linii dintr-o alta tabela, conform unei restrictii de integritate referentiala) va apare eroare. 

    Nota: Clauzele where din instructiunile DML pot contine logica oricit de complexa exact ca in cazul instructiunii SELECT.

 

CONTROLUL TRANZACTIILOR 
 

O tranzactie in baza de date poate consta in:

  • Instructiuni DML ce se constituie intr-o modificare consistenta a datelor;
  • O instructiune DDL;
  • O instructiune DCL.
 

Serverul ORACLE asigura pastrarea consistentei datelor prin mecanismul tranzactiilor. Tranzactiile confera flexibilitate si control asupra modificarii datelor si asigura consistenta datelor in eventualitatea caderilor de sistem sau a terminarilor anormale de proces.

Tipuri de tranzactii

 

Tip

Descriere

Data manipulation language (DML)

Consta in orice numar de instructiuni DML tratate de Serverul ORACLE drept o entitate indivizibila sau ca o unitate logica de procesare.

Data definition language (DDL)

Consta intr-o instructiune DDL.

Data control language (DCL)

Consta intr-o instructiune DCL.

Tranzactiile in baza de date

 
  • Incep cind prima instructiune executabila SQL este executata
  • Se incheie in urma unuia din urmatoarele evenimente:
  • COMMIT sau ROLLBACK;
  • O instructiune DDL sau DCL este executata (commit automat);
  • Iesire din sistem;
  • Cadere de sistem.
 

Dupa ce o tranzactie se incheie, urmatoarea instructiune executabila SQL porneste automat urmatoarea tranzactie.

O instructiune DDL sau DCL declanseaza in mod automat un commit, prin urmare ea incheie in mod implicit o tranzactie.

Controlul tranzactiilor

 

    |    INSERT    |    UPDATE    |    INSERT    |    DELETE    |

COMMIT         Savepoint A                   Savepoint B

                                                 ��--------------

                                                      ROLLBACK to Savepoint B

                   ��--------------------------------------------

                                                      ROLLBACK to Savepoint A

    ��-----------------------------------------------------------

                                                      ROLLBACK  

       

Instructiune

Descriere

COMMIT

Incheie tranzactia curenta, facind permanente modificarile initiate asupra datelor

SAVEPOINT name

Creeaza un punct de revenire in cadrul tranzactiei curente

ROLLBACK [TO SAVEPOINT_ name]

Incheie tranzactia curenta, anulind toate modificarile initiate asupra datelor. 

ROLLBACK TO SAVEPOINT_name anuleaza punctul de revenire si modificarile initiate ulterior acestuia.

 

Procesarea implicita a tranzactiilor:

  • Un commit automat apare in urmatoarele imprejurari
  • o instructiune DDL este lansata in executie;
  • o instructiune DCL este lansata in executie;
  • se iese normal din SQL*Plus, fara lansarea explicita a unui COMMIT sau ROLLBACK.
  • Un rollback automat apare in cazul unei terminari anormale a SQL*Plus sau al unei caderi de sistem.

Starea datelor inainte de COMMIT sau ROLLBACK

  • Starea anterioara a datelor poate fi refacuta;
  • Utilizatorul curent poate vedea efectele operatiunilor DML initiate
  • Alti utilizatori nu pot vedea efectele operatiunilor DML initiate de utilizatorul curent;
  • Liniile afectate sint blocate; alti utilizatori nu pot modifica datele din liniile afectate.

Starea datelor dupa COMMIT

  • Modificarile initiate asupra datelor sint facute permanente in baza de date;
  • Starea anterioara a datelor nu mai poate fi restaurata;
  • Toti utilizatorii pot vedea rezultatele;
  • Blocajele asupra liniilor afectate sint inlaturate; acele linii pot fi acum manipulate de alti utilizatori;
  • Toate punctele de revenire sint sterse.

Starea datelor dupa ROLLBACK

  • Toate modificarile initiate asupra datelor sint anulate;
  • Starea anterioara a datelor este restaurata;
  • Blocajele asupra liniilor afectate de aceste tramsformari sint inlaturate.
 

ROLLBACK la nivel de instructiune

  • Daca o singura instructiune DML esueaza in timpul executiei, numai pentru aceasta instructiune se sxecuta un ROLLBACK;
  • Serverul ORACLE implementeaza un punct de revenire implicit pentru fiecare instructiune DML;
  • Toate celelalte modificari initiate sint pastrate;
  • Utilizatorul ar trebuie sa incheie tranzactiile lansind explicit un COMMIT sau ROLLBACK.
 

   Serverul ORACLE lanseaza un commit implicit inainte si dupa lansarea in executie a unei instructiuni DDL. Chiar daca aceasta instructiune DDL esueaza, nu se poate executa rollback asupra instructiunii anterioare pentru ca serverul a lansat deja un commit. 

      Consistenta in citire (read consistency)

  • Este garantata o imagine consistenta asupra datelor in orice moment;
  • Schimbarile asupra datelor, initiate de un utilizator nu intra in conflict cu cele initiate de alt utilizator;
  • Asigura ca, asupra acelorasi date,
  • citirile nu asteapta scrierile;
  • scrierile nu asteapta citirile.
 

1