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
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.