Documente Academic
Documente Profesional
Documente Cultură
Crearea unui tabel n baza de date presupune n extenso definirea urmtoarelor elemente:
denumirea tabelului;
denumirea coloanelor tabelului;
tipurile de date memorate de fiecare coloan;
dimensiunea maxim a fiecrei coloane;
definirea indecilor: primari, unici, strini (secundari);
acceptarea de ctre o coloan de valori NULL sau nu;
definirea constrngerilor;
definirea declanatorilor;
definirea procedurilor stocate;
Pentru crearea unui tabel n pagina HOME a instanei bazei de date se merge n pagina
Administration, grupul de aplicaii Schema Database Objects Tables i se acioneaz
butonul Create.
Exist dou tipuri de tabele care se pot crea:
Standard, Heap Organized tabele standard pentru care indecii sunt memorai n
structuri separate de cea a tabelei. Astfel, accesul la tabel folosind indecii se face n
doi pai: accesarea tabelei de index, urmat de accesarea tabelei. Dac datele
memorate n aceste tabele nu necesit s fie stocate permanent pe hard disk se poate
bifa opiunea Temporary. Datele dintr-un tabel temporar sunt memorate doar pe
parcursul derulrii unei sesiuni sau unei tranzacii.
Index Organized Table (IOT) Tabelele organizate ca indeci stocheaz toate datele
unei tabele ntr-o structur de b-arbore (B-tree) organizat ca un index bazat pe cheia
primar. Blocurile frunz dintr-o astfel de structur conin coloanele diferite de cheia
primar n loc s conin ROWID-urile nregistrrilor corespunztoare, aa cum era n
cazul indecilor obinuii. Printr-o astfel de structur, numrul de segmente necesare
pentru stocarea tabelei i indexului asociat acesteia s-a redus la unul singur. Prin
urmare, accesul la un astfel de tip de tabel se limiteaz la o singur citire, ne mai
fiind nevoie de un acces suplimentar n index. O astfel de tabel organizat ca un
index difer de o tabel obinuit prin urmtoarele:
o liniile dintr-o tabel IOT (Index-Organized Table) sunt identificate n mod
unic numai prin cheia primar i nu i prin ROWID;
Universitatea Dunrea de Jos Galai
Laborator 3-4
Laborator 3-4
n cazul coloanelor de tip numeric, numrul cifrelor de precizie este luat din numrul
total al cifrelor stabilit n rubrica SIZE. n cazul coloanei cants de exemplu, vor putea
fi introduse 5 cifre pentru partea ntreag i 2 cifre pentru partea fracionar;
n rubrica DEFAULT VALUE pot fi introduse valori implicite pentru cmpurile
respective. De exemplu, pentru unitatea de msur poate fi introdus valoarea buc,
pentru termenul de garanie 30 (considerat 30 zile).
Laborator 3-4
Laborator 3-4
OBSERVAIE:
Indecii primari i secundari sunt tratai de ctre Oracle ca i constrngeri. Tipul de
constrngere PRIMARY respectiv FOREIGN. Pentru detalii a se vedea pasul 4.
ATENIE!
O constrngere de validare sau de unicitate odat definit nu mai poate fi modificat. Ele pot
fi doar terse i recreate.
Laborator 3-4
Laborator 3-4
OBSERVAIE:
Indecii unici sunt utilizai i la crearea legturilor 1:1 ntre dou tabele. n acest caz, coloanei
definit ca i index secundar i se adaug i o constrngere de unicitate.
PAS 5 ncheierea procesului de creare a unei tabele
Salvarea tabelei astfel create se face dnd click pe butonul APPLY din fereastra de editare a
tabelei.
)
CREATE TABLE FACTURI
(
NR_FACT VARCHAR2(10) NOT NULL,
DATA_F DATE DEFAULT SYSDATE,
DISCOUNT NUMBER(4,2) DEFAULT 0,
DATAS DATE DEFAULT SYSDATE,
CONSTRAINT FACTURI_PK PRIMARY KEY (NR_FACT)
Laborator 3-4
Laborator 3-4
C) Crearea indecilor
Un index este un obiect al schemei unei baze de date care faciliteaz accesul mai rapid la
datele unei tabele. Indecii nu sunt obligatorii pentru crearea unei tabele dar n absena lor,
performanele accesului la date sunt mai reduse. Un index furnizeaz o cale direct i rapid
pentru a accesa nregistrrile unei tabele, reducnd numrul de operaii de I/O. Modificrile
datelor din tabel sunt automat ncorporate n toi indecii, procesul fiind complet transparent
utilizatorului.
Crearea unui index pe una sau mai multe coloane ale unui tabel se face cu comanda CREATE
INDEX care are sintaxa:
CREATE [UNIQUE] INDEX <nume_index>
ON <nume_tabel> (<nume_col> [ASC/DESC], <nume_col> [ASC/DESC], ....)
Opiunea UNIQUE impune o restricie de unicitate valorilor din coloanele care intr n
alctuirea indexului, adic creeaz un index unic ce nu va permite valori duplicate n
coloanele respective.
tergerea unui index se face cu comanda DROP INDEX. tergerea unui index nu va afecta
sub nici o form tabela. Indecii nu pot fi modificai ei pot fi doar teri si recreai.
EXEMPLE:
Crearea indexului unic Den_prod_unic_idx pentru denumirea produselor din tabela Produs se
va face cu comanda:
CREATE UNIQUE INDEX Den_prod_unic_idx ON Produse (DenP ASC)
tergerea (distrugerea) indexului creat anterior se face cu comanda:
DROP INDEX Den_prod_unic_idx;
OBSERVAIE:
Nu se recomand definirea unui index n urmtoarele situaii:
tabelul este mic (accesul secvenial este mai rapid);
pentru coloanele tabelei care nu sunt folosite frecvent n condiiile cererilor
(interogrilor);
cnd tabela este reactualizat frecvent;
pentru coloanele care conin multe valori NULL iar cererile nu se refer la valorile
NON NULL;
n cazul cererilor care au ca rezultat mai mult de 2% - 4% din nregistrrile tabelei;
pentru coloanele care conin date asemntoare (puine valori distincte);
Se recomand crearea unui index n urmtoarele situaii:
pentru coloanele folosite frecvent n clauza WHERE, n clauza ORDER BY sau n
condiii JOIN;
pentru coloanele care conin un numr mare de valori NULL iar cererile se refer la
valorile NON NULL;
Laborator 3-4
10
cnd tabelul este mare i cererile au ca rezultat mai puin de 2%-4% din nregistrrile
tabelului;
cnd coloanele conin un domeniu larg de valori distincte;
DESCRIBE nume_tabel
EXEMPLE: s se afieze structura tabelelor Produse i Facturi
DESCRIBE Produse;
DESC Facturi;
E) Adugarea unui comentariu tabelei se face cu comanda COMMENT - permite
adugarea unor explicaii referitoare la tabel
EXEMPLE:
1. Pentru adugarea comentariului Facturi emise dup anul 2000 la tabela Facturi2000
creat anterior se folosete comanda:
COMMENT ON TABLE Facturi2000
IS 'Facturi emise dup anul 2000';
2. Pentru adugarea unui comentariu pentru o coloan a tabelei se folosete comanda:
COMMENT ON COLUMN Facturi2000.DataFact
IS 'Data facturii';
3. Pentru vizualizarea unui comentariu ataat unei tabele sau unei coloane se folosesc una
din vederile dicionarului: ALL_TAB_COMMENTS (conine comentariile definite pentru
tabelele asupra crora utilizatorul curent are drepturi), USER_TAB_COMMENTS
(conine doar comentariile definite de utilizatorul curent asupra tabelelor create de el),
respectiv ALL_COL_COMMENTS, USER_COL_COMMENTS
ATENIE!
Pentru a executa comenzile urmtoare trebuie s v conectai la baza de date fr clauza
SYSDBA. (CONNECT numeutilizator/parola@instanta_BD;). Altfel, sistemul va afia toate
comentariile utilizatorului SYS incluznd toate tabelele de sistem;
SELECT * FROM USER_TAB_COMMENTS;
SELECT * FROM USER_COL_COMMENTS;
4. Pentru tergerea unui comentariu ataat tabelei sau coloanei se folosete aceeai comand
ca la adugarea unui comentariu, doar c de data aceasta comentariul este vid:
Universitatea Dunrea de Jos Galai
Laborator 3-4
11
Laborator 3-4
12
Laborator 3-4
13
4. S se recreeze tabelul Test de la punctul 2 i s i se adauge acestuia coloanele: Nota_test
cu tipul Numeric de maxim 2 cifre i coloana Situaie care va trebui s stocheze doar
valorile Admis/Respins.
ALTER TABLE Test ADD (Nota_test NUMBER(2),
Situatie VARCHAR2(7) CONSTRAINT valori
('Admis','Respins')));
CHECK
(Situatie
IN
Laborator 3-4
14
La adugarea unei noi constrngeri, n mod implicit sunt verificare i datele deja introduse n
tabel. Dac acestea nu respect constrngerea respectiv, ea nu va putea fi salvat.
9. S se dezactiveze constrngerea check_nota, s se reactiveze i apoi s se tearg din
tabel.
ALTER TABLE Test
DISABLE CONSTRAINT check_nota;
ALTER TABLE Test
ENABLE CONSTRAINT check_nota;
ALTER TABLE Test
DROP CONSTRAINT check_nota;
10. S se stabileasc pentru coloana Situaie valoarea implicit Admis.
ALTER TABLE Test
MODIFY (Situatie DEFAULT 'Admis');
11. S se vizualizeze indecii i constrngerile definite asupra tabelelor create:
SELECT * FROM USER_INDEXES;
respectiv
SELECT * FROM USER_CONSTRAINTS;
OBSERVAIE:
USER_INDEXES i USER_CONSTRAINTS sunt tabele ale dicionarului de date. Cu DESC
USER_INDEXES respectiv DESC USER_CONSTRAINTS se poate vizualiza structura celor
dou tabele i se pot astfel selecta doar anumite coloane.
PROBLEME DE REZOLVAT
1. S se defineasc tabelele bazei de date propuse n Laboratorul 1 ca exemplu pentru lucru
la laborator;
2. S se defineasc indecii necesari realizrii relaiilor ntre tabele i s se realizeze relaiile
ntre tabele;
3. S se defineasc pentru tabela Agenti comentariul Agentii organizaiei iar pentru
coloanele Data_n i Data_ang, Data naterii respectiv Data angajarii.
4. S se vizualizeze comentariile definite i apoi s se tearg aceste comentarii. S se
vizualizeze din nou comentariile adugate coloanelor respectiv tabelei;
5. S se defineasc urmtoarele constrngeri de unicitate: denumirea produsului, denumirea
categoriei i denumirea clientului s fie unice;
Universitatea Dunrea de Jos Galai
Laborator 3-4
15
6. S nu se permit introducerea n coloana Sex din tabela Agent dect a valorilor F sau M,
n coloana Studii valorile Medii, Superioare, Postuniversitare iar n coloana Tip_doc din
tabela DocInc valorile CHF, OP i CEC;
7. S nu se permit introducerea unei date pentru factur i pentru documente mai mare
dect data curent;
8. Pentru facturi i pentru documentele de ncasare s se stabileasc data curent ca valoare
implicit pentru coloanele DataFact i DataDoc;
9. Pentru coloana Regiune din tabela Clieni nu permitei introducerea dect a valorilor:
Moldova, Muntenia, Transilvania, Banat;
10. Pentru coloanele CantS, PreS i Discount s se stabileasc valoarea 0 ca valoare
implicit;
11. Pentru coloanele Localitate, Jude i Regiune stabilii valorile implicite: Galai, Galai,
respectiv Moldova;
12. Creai tabela Clienti_moldova cu coloanele: CUI, Denumire, Jude, Regiune care s
conin toi clienii din regiunea Moldova;
13. Stabilii urmtoarele tipuri de date pentru coloanele tabelei Clienti_moldova: pentru
Denumire VARCHAR2 (45) cu restricia s nu accepte dect valori unice, iar pentru
coloana Regiune stabilii tipul VARCHAR2(30) cu valoarea implicit Moldova i nu
permitei introducerea nici unei alte valori n aceast coloana;
14. Dezactivai coloana Regiune din tabela Clieni_moldova i restricia de unicitate pentru
denumire. Activai din nou restricia de unicitate pentru denumire;
15. tergei coloana Regiune din tabela Clieni_moldova i toate constrngerile definite
pentru aceast coloan;
16. S se creeze pentru tabela Clieni_moldova indexul descresctor Denumire_idx i apoi s
se vizualizeze structura tabelei;
17. S se tearg indexul definit la punctul 16 i s se vizualizeze din nou structura tabelei.
REZOLVRI