Documente Academic
Documente Profesional
Documente Cultură
Definirea constrângerilor
Sintaxa
1
Toate constrângerile sunt cuprinse într-un dicționar. Este ușor să se facă referință la constrângeri
dacă li se dau nume sugestive. Numele unei constrângeri trebuie să urmeze un anumit standard.
Dacă nu se denumește constrângerea, serverul Oracle generează un nume de forma SYS_Cn,
unde n este un număr întreg astfel încât numele constrângerii este unic.
Constrângerile definite pentru un anumit tabel pot fi vizualizate în USER_CONSTRAINTS
(dicționarul tabelului).
De obicei, constrângerile sunt create în același timp cu tabelul, dar pot fi și adăugate tabelului
după crearea lui.
Constrângerile pot fi definite pe două nivele:
Coloană - Face referire la o singură coloană; poate defini orice tip de constrângere de
integritate
Tabel - Face referire la una sau mai multe coloane; poate defini orice constrângere,
exceptând pe cea de tip NOT NUL.
Sintaxa
1. Constrângere la nivel de coloană
coloană,..
[CONSTRAINT nume_constrângere] tip_constrângere
(coloană,...),
Constrângerea NOT NULL ne asigură că valorile null nu sunt permise în coloana respectivă.
Coloanele fără constrângerea NOT NULL pot conține, implicit, valori null.
ang
A_NUME DATA_ANGAJARE SALARIU BONIFICAȚIE POST MATRICOL NR.DEPT
IONESCU 11 IAN 2000 5500 INGINER 1489 1
POPESCU 18 NOV 2011 1550 INGINER 7852 1
VASILESCU 23 AUG 2011 1800 ECONOMIST 2598 2
ANDRONACH 1 MAI 2017 2250 ECONOMIST 12358 3
E
GEORGESCU 2 SEPT 2000 3500 AGENT 2466 4
VÂNZĂRI
TACHE 22 IUL 2015 1450 ECONOMIST 1587 2
IONESCU 25 AUG 1999 4520 INGINER 675 3
2
Constrângerea NOT NULL definită la nivel de coloană
… nr.dept NUMBER(7,2)
CONSTRAINT ang_nr.dept_nn NOT NULL …
dept
nr.dept numedept localitate
1 cercetare București
2 operațiuni Timișoara
3 conturi Cluj
4 vânzări Iași
inserare
5 conturi Constanța
6 Craiova nu este permisă, există numedept conturi
permisă
O constrângere de integritate cheie unică cere ca fiecare valoare din coloana sau set de
coloane să fie unică – două înregistrări ale tabelului nu pot avea valori duplicat în coloana sau
setul de coloane care formează constrângerea. Coloana (setul de coloane) inclusă în definiția
cheii unice se numește cheie unică. Dacă cheia unică conține mai multe coloane se numește
cheie unică compusă.
Constrângerea cheie unică permite introducerea de valori null dacă nu a fost definită o
constrângere NOT NULL pentru acea coloană.
3
Orice număr de înregistrări pot include valori null în coloane fără constrângerea NOT
NULL.
O valoare null într-o coloană (sau în toate coloanele unei chei unice compuse)
întotdeauna satisface o constrângere de cheie unică.
Constrângerea cheie unică (unique key) definită la nivel de tabel sau coloană
inserare
3 marketing Constanța nu este permisă, există nr.dept 3
relații publice Craiova nu este permisă, deoarece nr.dept e NULL
4
Constrângerea cheii primare definită la nivel de coloană sau tabel
ang
A_NUME DATA_ANGAJARE SALARIU BONIFICAȚIE POST MATRICOL NR.DEPT
IONESCU 11 IAN 2000 5500 INGINER 1489 1
POPESCU 18 NOV 2011 1550 INGINER 7852 1
VASILESCU 23 AUG 2011 1800 ECONOMIST 2598 2
ANDRONACH 1 MAI 2017 2250 ECONOMIST 12358 3
E
GEORGESCU 2 SEPT 2000 3500 AGENT 2466 4
VÂNZĂRI
TACHE 22 IUL 2015 1450 ECONOMIST 1587 2
IONESCU 25 AUG 1999 4520 INGINER 675 3
inserare
nu este permisă, nu există nr.dept 7 în tabelul dept
permisă
5
Cheia externă, sau constrângerea de integritate referențială, desemnează o coloană sau o
combinație de coloane în funcția de cheie externă și stabilește o relație cu o cheie primară sau o
cheie unică în același tabel sau un tabel diferit.
În exemplu, nr.dept a fost definit cheie externă în tabelul ang (dependent sau tabel copil); ea
referă coloana nr.dept din tabelul dept (referit sau tabel părinte).
Valoarea unei chei externe trebuie să se potrivească cu o valoare existentă în tabelul părinte
sau să fie NULL.
Constrângerile cheii externe pot fi definite la nivelul constrângerilor de tabel sau de coloană.
O cheie externă compusă este creată folosind definițiile la nivel tabel.
Exemplul de mai sus definește o constrângere de tip cheie externă în coloana nr.dept din
tabela ang. Numele constrângerii este ang_nr.dept_fk.
6
ON DELETE SET NULL convertește valorile foreign key în valori nule atunci
când valoarea părinte este ștearsă.
Constrângerile externe sunt definite în tabelul copil și tabelul care conține coloana la care se
face referință devine părinte.
Fără opțiunea ON DELETE CASCADE, rândul din tabelul părinte nu va putea fi șters dacă
este referit în tabelul copil.
Sintaxa:
Pentru tabelul pers se poate impune o constrângere de tip check la nivelul vârstei (pentru a fi
angajat, trebuie să fii major).
pers
nume matricol nr.depr vârsta copii pasiuni
Ionescu 1489 1 25 1 citit
Popescu 7852 1 39 2 scris
Vasilescu 2598 2 45 1 ascultat
Andronache 12358 3 34 1 vorbit
Georgescu 2466 4 62 3 mancare
Tache 1587 2 40 0 bautura
Iancu 675 5
se va termina cu succes:
1 row(s) affected
7
iar inserarea
se va termina cu eșec:
Observație:
Denumirea constrângerii este opțională, dar recomandată. Dacă nu se dă nume
constrângerilor, sistemul va genera nume implicit SYS_Cn .
Exemplu: Se doreşte ca pe coloana nume a tabelului pers să nu existe valori nule sau identice
şi lungimea minimă să fie de 6 caractere:
Sintaxa generală:
ALTER TABLE tabel
DROP PRIMARY KEY| UNIQUE (coloană)|CONSTRAINT nume_constrângere
[CASCADE];
8
Defalcat:
ALTER TABLE tabel
DROP PRIMARY KEY [CASCADE];
Exemplu:
Eliminarea constrângerii de tip cheie primară din tabelul dept precum și eliminarea
constrângerii externe asociate la coloana ang-nr.dept.
Table altered.
Dezactivarea constrângerilor
Dezactivarea constrângerii se efectuează cu declaraţia ALTER TABLE însoţită de clauza
DISABLE.
Sintaxa:
Exemplu:
9
Table altered.
Clauza DISABLE se poate folosi atât în funcția CREATE TABLE cât și în funcția ALTER
TABLE.
Clauza CASCADE dezactivează constrângerile de integritate dependente.
Activarea constrângerilor
Activarea unei constrângeri de integritate care este dezactivată se face utilizând ALTER
TABLE cu clauza ENABLE..
Sintaxa:
ALTER TABLE tabel
ENABLE CONSTRAINT nume_constrângere [CASCADE];
Table altered.
Dacă se activează o constrângere, constrângerea este aplicată tuturor datelor din tabel.
Toate datele din tabel trebuie să îndeplinească condițiile din constrângere.
Dacă se activează o constrângere de tip unic sau cheie primară, atunci este creat în mod
automat un index de tip unic.
Clauza ENABLE se poate folosi atât în funcția CREATE TABLE cât și în funcția ALTER
TABLE.
Vizualizarea constrângerilor
După crearea unui tabel, se poate confirma existența sa prin folosirea comenzii DESCRIBE.
Singura constrângere care poate fi verificată în această situație este constrângerea NOT NULL.
Pentru a vedea toate constrângerile din tabel, este necesară interogarea tabelului
USER_CONSTRAINTS.
Interogarea tabelului USER_CONSTRAINTS pentru a putea vedea toate numele și definițiile
constrângerilor se face în modul următor:
CONSTRAINT_NAME C SEARCH_CONDITION
SYS_C00674 C A_NUME IS NOT NULL
SYS_C00675 C NR.DEPT IS NOT NULL
ANG_MATRICOL_PK P
…
10
Constrângerilor care nu primesc un nume de la posesorul tabelei, li se atribuie un nume
automat de către sistem. La tipul constrângerii, C provine de la CHECK, P de la PRIMARY
KEY, R de la integritate referențială și U de la UNIQUE. De observat faptul că constrângerea
NOT NULL este o constrângere de tip CHECK.
CONSTRAINT_NAME COLUMN_NAME
ANG_NR.DEPT_FK NR.DEPT
ANG_MATRICOL_PK MATRICOL
SYS_C00675 NR.DEPT
11