Documente Academic
Documente Profesional
Documente Cultură
Proiect nr. 154/323 cod SMIS 4428 cofinanat de prin Fondul European de
Dezvoltare Regional Investiii pentru viitorul dumneavoastr.
Baze de date
Introducere
Comenzile pentru crearea i definirea de structuri tabelare sunt comenzi
de definire a datelor (Data Definition Language DDL) i permit crearea, dar
i relaionarea lor ntr-o baz de date.
Structura unei tabele este dat de urmtoarele specificaii de definire:
definirea coloanelor
definirea constrngerilor de integritate
definirea tablespace-lui unde se creeaz
definirea parametrilor
Constrngerile de integritate reprezint anumite reguli de funcionare, care
trebuie respectate la nivel de tabel, sau n relaiile cu alte tabele. Aceste reguli
sunt verificate automat, n cazul operaiilor de inserare, stergere sau
modificare i n cazul n care nu se valideaz, sistemul de gestiune genereaz
o eroare i tranzacia nu se efectueaz.
Exemplu:
Constrngerea UNIQUE
Se folosete cnd vrem ca o coloan, sau perechi de coloane, s nu conin
valori duplicate. Verificarea se face numai pentru nregistrri cu valori nenule,
deoarece constrngerea permite inserarea de valori nule n coloanele
respective.
n mod automat, se creeaz i un index pe coloanele definite cheii unice, ceea
ce duce la mrirea vitezei de interogare pe tabel.
Exemplu:
S crem tabela functii definind unicitate pe anumite coloane:
SQL>CREATE TABLE functii
( cod_functie number(2) CONSTRAINT UK_FUN UNIQUE,
den_functie varchar2(20) UNIQUE,
data_vigoare date ) ;
Putem s facem i urmtoarea construcie la nivel de tabel:
den_functie varchar2(20),
data_vigoare date,
Exemplu:
Dac vrem s crem un nomenclator de funcii, n care fiecare funcie s aib
cod unic, folosim urmtoarea construcie :
SQL>CREATE TABLE functii
( cod_functie number(2) CONSTRAINT PK PRIMARY KEY,
den_functie varchar2(20),
data_vigoare date );
Cnd dorim ca un cod de funcie s poat fi utilizat de mai multe ori, trebuie
s definim cheia pe mai multe coloane, de exemplu pe codul funciei i data la
care intr n vigoare codificarea, folosind construcia:
SQL>CREATE TABLE functii
( cod_functie number(2) ,
den_functie varchar2(20),
data_vigoare date,
CONSTRAINT PK_FUN PRIMARY KEY (cod_functie,data_vigoare) )
Exemplu:
Dac vrem s crem tabelul angajati i s o relaionm cu tabelele departamente i
funcii, trebuie s facem urmtoarea construcie la nivel de coloan:
PRIMARY KEY,
varchar2(30),
varchar2(20) REFERENCES functii(den_functie),
id_sef
number(4)
data_ang date,
REFERENCES angajati(id_ang),
salariu
number(7,2),
comision number(7,2),
id_dep
number(2) REFERENCES departamente(id_dep) );
Pentru a se putea face relaionarea, trebuie ca tabela functii s aib cheie primar sau
unic pe coloana den_functie, iar tabela departamente s aib cheie primar sau unic
pe coloana id_dep. Se observ c tabelul este relaionat cu el nsui dup coloanele
id_sef i id_ang.
Reguli de funcionare
Cnd se face relaionarea ntre dou tabele, trebuie avute n vedere
urmtoarele reguli de funcionare :
Inserarea unei linii ntr-un tabel relaionat (pe care am definit FOREIGN KEY)
nu se poate face dac nu exist dect o singur linie n tabelul de referin
( n care am definit PRIMARY KEY sau UNIQUE) corespunztor coloanelor de
relaionare;
tergerea unei linii din tabelul de referin nu se poate face atta timp ct
exist linii relaionate pe linia respectiv n tabelul relaionat;
Dac s-a folosit optiunea ON DELETE CASCADE, se poate terge o linie din
tabelul de referin, dar se terg automat toate liniile relaionate pe linia
respectiv, din toate tabelele relaionate;
n cazul unui tabel relaionat cu el nsui, cnd se terge o linie, care este
referit, toate coloanele devin nule n liniile relaionate;
Regulile de mai sus sunt valabile i n cazul relaionrii pe coloane.
Constrngerea CHECK
Exemplu:
Dac vrem ca n tabelul angajati, numele angajailor s fie nregistrate numai
cu litere mari, salariul s fie mai mare dect zero, iar comisionul s nu
depeasc salariul, folosim constrngerea CHECK :
SQL>CREATE TABLE angajati
( id_ang
number(4) PRIMARY KEY,
nume
varchar2(30) CONSTRAINT CK_NU CHECK(nume=UPPER(nume),
functie
varchar2(20) REFERENCES functii(den_functie),
id_sef
number(4) REFERENCES angajati(id_ang),
data_ang date,
salariu
number(7,2) CHECK (salariu>0),
comision number(7,2),
id_dep
number(2)
REFERENCES departamente(id_dep),
CONSTRAINT CK_COM CHECK (comision <= salariu) );