Documente Academic
Documente Profesional
Documente Cultură
Obiecte ale bazei de date BAZE DE DATE Gestiunea altor obiecte ale bazei de date
Tabele virtuale (VIEWS) Secvene (SEQUENCES) Sinonime (SYNONYMS) Indeci (INDEXES) Clustere (CLUSTERS)
etc.
Tabele virtuale
O tabel virtual desemneaz o comand SELECT stocat n baza de date sub un anumit nume O tabel virtual poate fi referit ca i orice alt tabel de baz Principala utilitate a tabelelor virtuale - asigurarea securitii unei baze de date
BUCURETI 2013-2014
Tabele virtuale
Tabele virtuale
O tabel virtual trebuie s aib nume de coloane valide atenie la utilizarea expresiilor!
Tabele virtuale
CREATE OR REPLACE VIEW clerk AS SELECT id_angajat, nume, id_departament, id_functie FROM angajati WHERE id_functie = 'PU_CLERK' OR id_functie = 'SH_CLERK' OR id_functie = 'ST_CLERK';
simple (cu interogri asupra unei singure tabele, fr grupri sau expresii) complexe (cu interogri asupra mai multor tabele, cu grupri sau folosind expresii)
UPDATE clerk SET id_functie = 'PU_MAN' WHERE id_angajat = 115;
Asupra tabelelor virtuale simple pot fi utilizate comenzi de actualizare, cu condiia s nu se ncalce nicio restricie de integritate din tabela de baz.
4 5
Tabele virtuale
CREATE OR REPLACE VIEW clerk AS SELECT id_angajat, nume, id_departament, id_functie FROM angajati WHERE id_functie = 'PU_CLERK' OR id_functie = 'SH_CLERK' OR id_functie = 'ST_CLERK
Tabele virtuale
CREATE OR REPLACE VIEW clerk AS SELECT id_angajat, nume, id_departament, id_functie FROM angajati WHERE id_functie = 'PU_CLERK' OR id_functie = 'SH_CLERK' OR id_functie = 'ST_CLERK
Tabele virtuale
Tabele virtuale definite inline
O tabel virtual definit inline este reprezentat de o subcerere utilizat n clauza FROM a unei comenzi SELECT.
WITH CHECK OPTION; UPDATE clerk SET id_functie = 'PU_MAN' WHERE id_angajat = 115; ORA-01402: n vizualizarea WITH CHECK OPTION clauza WHERE este ncalcata UPDATE clerk SET id_functie = 'ST_CLERK' WHERE id_angajat = 116;
7
UPDATE clerk SET id_functie = 'ST_CLERK' WHERE id_angajat = 116; ORA-42399: nu se poate efectua o operatie DML asupra unei vederi read-only
Secvene
Secvene
Opiunile posibil de specificat la crearea unei secvene:
Secvene
Utilizarea secvenelor presupune referirea a dou pseudocoloane:
O secven desemneaz un obiect al bazei de date, independent de tabele, care este utilizat pentru a genera iruri de numere Principalul scop al utilizrii unei secvene: generarea de valori distincte pentru cmpul cheie primar dintr-o tabel
NEXTVAL
incrementeaz secvena ctre urmtorul numr, n concordan cu directivele indicate la crearea secvenei returneaz noua valoare apelul iniial al lui NEXVAL va returna prima valoare din secven
CURRVAL
afieaz valoarea curent din secven poate fi utilizat numai dac anterior a fost deja referit pseudocoloana NEXTVAL
12
Secvene
Secvene
Secvene
Modificarea secvenelor:
tergerea secvenelor:
INSERT INTO angajati (id_angajat, nume, id_departament) VALUES (seq_ang.NEXTVAL, 'Gigi', seq_dep.CURRVAL);
13
15
Sinonime
Sinonime
Indeci
Un sinonim reprezint un nume alternativ (alias) pentru un alt obiect al bazei de date. Exist dou tipuri de sinonime:
private
Crearea sinonimelor:
private publice
Un index este un obiect asociat unei tabele sau unui grup de tabele (cluster), care se creeaz n mod explicit folosind comanda SQL CREATE INDEX pentru a mri viteza de acces la datele unei tabele. Coloanele care au ataate restricii PRIMARY KEY sau UNIQUE au indeci creai automat. Indecii pot fi unici sau nu. Crearea unui index unic se face cu comanda CREATE UNIQUE INDEX sau prin definirea unei restricii de integritate UNIQUE sau PRIMARY KEY.
publice
tergerea sinonimelor:
private publice
sunt deinute de utilizatorul PUBLIC i sunt n mod automat vizibile tuturor utilizatorilor
absena sau prezena unui index nu influeneaz n niciun fel structura comenzilor SQL de regsire a datelor din baza de date; pentru creterea vitezei de execuie a operaiilor de jonciune, se recomand indexarea coloanelor care particip la join; dac se distrug indecii, aplicaia cu baze de date continu s funcioneze, dar cu performane mai mici; indecii sunt logic i fizic independeni de datele tabelelor cu care sunt asociai;
numrul indecilor ce pot fi creai pentru o tabel poate fi orict de mare, cu toate acestea numrul lor trebuie corelat cu tipul operaiile majoritare ce se vor executa asupra tabelei; un index se creeaz dup ce datele au fost ncrcate n tabel, altfel acesta va trebui actualizat de fiecare dat cnd se ncarc un rnd n tabel; Oracle ntreine n mod automat indecii creai, astfel nct n acetia se reflect toate actualizrile (adugri, modificri sau tergeri de nregistrri) efectuate asupra datelor tabelelor cu care sunt asociai.
Un index poate fi creat n mod implicit, odat cu activarea constrngerilor de integritate UNIQUE sau PRIMARY KEY sau explicit, prin folosirea comenzii SQL CREATE INDEX. Crearea implicit se face astfel:
CREATE TABLE angajati (marca NUMBER(3) PRIMARY KEY, CNP VARCHAR2(13) UNIQUE nume VARCHAR2(30));
19
20
21
Tipuri de indeci
Tip index Descriere
Tipul de index creat la executarea unei comenzi standard CREATE INDEX. Un arbore B este un arbore n care pentru gsirea oricrei valori este necesar acelai numr de pai, indiferent de valoarea cutat. Index bazat pe coloanele comune ale unui cluster Tip de index folositor numai n cazul cutrii n arbore a unor valori exacte Se recomand atunci cnd numrul de valori distincte ale coloanei indexate este relativ mic (de exemplu, n cazul unei coloane care conine starea civil a unei persoane, unitatea de msur a unui produs etc.)
Actualizarea unui index se face prin comanda SQL ALTER INDEX. Un index poate fi distrus atunci cnd: nu mai este necesar sau nu a adus performanele anticipate; aplicaia nu mai folosete indexul pentru regsirea datelor; indexul a devenit invalid sau spaiul su de memorie este prea fragmentat i trebuie distrus pentru a fi recreat; tergerea unui index se face prin comanda DROP INDEX.
Index de tip arbore B (B-tree index) Index de cluster (index de grup) Index cu cheie invers (reversekey index) Index de tip bitmap
22
23
24
Cheia unui cluster este definit ca fiind coloana sau coloanele pe care tabelele grupate le au n comun. Cheia unui cluster nu trebuie confundat cu cheile primare ale tabelelor grupate. Valorile cheii clusterului sunt stocate o singur dat n schem, reducndu-se astfel spaiul de stocare necesar i procesrile suplimentare. Clusterul este un mecanism transparent aplicaiilor care utilizeaz tabelele acestuia. Datele din tabele sunt manipulate ca i cnd acestea ar fi stocate ntr-un tabel normal, ns n momentul interogrii se va observa o cretere semnificativ a performanelor.
Pentru a crea o tabel ntr-un cluster se parcurg n mod obligatoriu urmtorii pai:
1. 2. 3.
Pentru crearea clusterului se folosete comanda SQL CREATE CLUSTER n care trebuie specificate coloana sau grupul de coloane dup care sunt grupate tabelele. Sintaxa simplificat a comenzii de creare: CREATE CLUSTER nume_cluster (nume_coloana tip_data [, nume_coloana tip_data])
Adaugarea tabelelor la cluster se poate face i dup ce indexul de cluster a fost creat.
25
26
27
Exemplificare SQL-Oracle
Crearea clusterului sal_dept, cu indicarea gruprii dup coloanele cod_dept i cod_tara
Datorit faptului c tabelele clusterului folosesc alocarea de spaiu a acestuia, la folosirea comenzii CREATE TABLE cu opiunea CLUSTER nu trebuie specificai ali parametri de stocare. Nu se poate asocia un cluster unei tabele care exist deja. Dac se dorete totui acest lucru, se creeaz o nou tabel care va fi inclus n cluster i care va conine nregistrrile tabelei existente (folosind optiunea AS SELECT).
28
CREATE TABLE departament (cod_dept NUMBER(10), cod_tara NUMBER(10), nume_dept VARCHAR2(10), PRIMARY KEY(cod_dept, cod_tara) ) CLUSTER sal_dept(cod_dept, cod_tara);
CREATE TABLE salariat (cod_salariat NUMBER(10) PRIMARY KEY, nume VARCHAR2(10) NOT NULL, prenume VARCHAR2(10), data_nastere DATE, salariu NUMBER(10), cod_dept NUMBER(10), cod_tara NUMBER(10), FOREIGN KEY(cod_dept, cod_tara) REFERENCES departament(cod_dept,cod_tara)) CLUSTER sal_dept(cod_dept,cod_tara);
30
CURSUL 12...
Comanda ALTER CLUSTER poate fi folosit pentru a modifica parametrii de stocare ai clusterului. Pentru distrugerea unui cluster se folosete comanda SQL DROP CLUSTER. Totui, folosind comanda de mai sus clusterul nu poate fi distrus dac exist tabele n el. Pentru a permite acest lucru se folosete clauza opional INCLUDING TABLES: DROP CLUSTER sal_dept INCLUDING TABLES; In plus, dac exist tabele din afara clusterului care conin restricii de integritate care se refer la chei din tabelele clusterului, acestea trebuie de asemenea eliminate. Pentru acest lucru se folosete clauza opional CASCADE CONSTRAINTS; DROP CLUSTER sal_dept INCLUDING TABLES CASCADE CONSTRAINTS;
31