SQL Definirea Constrangerilor

Embed Size (px)

Citation preview

Definirea constrngerilor

Obiectiven aceast lecie vei nva : S definii i descriei constrngerile S definii constrngerile la nivel de tabel S definii constrngerile la nivel de coloan

Dobndirea cunotinelorAa cum am precizat n partea de proiectare a bazelor de date, orice baz de date trebuie s stabileasc regulile de integritate care s garanteze c datele introduse sunt corecte i valide. Asta nseamn c dac exist o regul sau restricie asupra unei entiti, atunci datele introduse n baza de date respect aceste restricii.

Dobndirea cunotinelorRegulile de integritate se definesc la crearea tabelelor folosind constrngerile. n funcie de nivelul la care sunt definite avem: - constrngeri la nivel de tabel care pot aciona asupra unei combinaii de coloane - constrngeri la nivel de coloan

Dobndirea cunotinelorConstrngerile pot fi clasificate n: - constrngeri de domeniu, care definesc valorile pe care le poate lua un atribut ( NOT NULL, UNIQUE, CHECK) - constrngeri de integritate a tabelei, preciznd cheia primar a acesteia - constrngeri de integritate referenial, care asigur coerena ntre cheile primare i cheile strine corespunztoare

Dobndirea cunotinelorOrice constrngere ntr-o baz de date are un nume. Numele l putem da noi la crearea constrngerii , ca de exemplu clienti_id_client_pk , sau nu i n acest caz sistemul denumete constrngerea, ca de exemplu SYS_C00585417. Un mod de a denumi o constrngere este o combinaie ntre numele tabelei, numele coloanei la care se refer i tipul constrngerii(uk, nn, ck, pk, fk):

Dobndirea cunotinelorConstrngerea NOT NULL

Exemplu:

Necompletarea n tabel a unei celule conduce la completarea ei cu valoarea NULL, semnificnd faptul c celula respectiv are de fapt o valoare nedefinit.

n exemplul de mai jos valoarea cmpului nume nu poate fi NULL, deoarece se va genera o eroare. CREATE TABLE agenti_inchirieri (id_ang NUMBER(5),

Coloanele dintr-o tabel nume VARCHAR2(20) NOT NULL, corespunztoare atributelor obligatorii

Dobndirea cunotinelor Constrngerea UNIQUEAceasta desemneaz o coloan sau o combinaie de coloane ca o cheie unic. Dou linii n aceeai tabel nu pot avea aceeai valoare pentru aceast cheie. Coloanele definite ca UNIQUE pot conine valori NULL, iar acestea pot fi oricte, adic valoarea NULL este singura valoare ce poate fi duplicat ntr-o coloan UNIQUE, alte valori nu pot fi duplicate. Sintaxa constrngerii la nivel de tabel: [CONSTRAINT nume constrangere] UNIQUE (Coloana, Coloana, ...) Sintaxa constrngerii la nivel de coloan: [CONSTRAINT nume constrangere] UNIQUE

Exemplu:

CREATE TABLE altii (id_ang NUMBER(5), nume VARCHAR2(20), data_ang DATE, salariu NUMBER(5), id_adresa NUMBER(5) UNIQUE, id_sef NUMBER(5), functia VARCHAR2(20) , CONSTRAINT altii_uk

CaConstrngere primar foreaz i la cheile unice, o cheie de cheie unicitatea unei coloane sau combinaii de primar coloane implicate i un index unic este creat pentru a conduce aceasta.

Dobndirea cunotinelor

Exemplu: CREATE TABLE inchirieri ( id_locuinta NUMBER(5), id_client NUMBER(5), data_preluarii DATE, data_predarii DATE,

NULL-urile nu sunt permise n coloanele de chei primare. Sintaxa constrngerii la nivel de tabel : [CONSTRAINT nume constrangere] PRIMARY KEY (Coloana, Coloana, ...) Sintaxa constrngerii la nivel de coloan :

CONSTRAINT [CONSTRAINT nume constrangere] PRIMARY inchirieri_pk PRIMARY KEY KEY(id_locuinta, Aceeai combinaie de coloane nu poate fi folosit id_client)) i pentru o cheie primar i pentru una unic. n exemplul de mai sus

Dobndirea cunotinelorConstrngere de cheie strinCheile strine furnizeaz reguli de integritate de referin nuntrul unei tabele sau ntre tabele. O cheie strin este folosit oriunde ntr-o relaie cu fiecare cheie primar sau unic. Sintaxa constrngerii la nivel de tabel: [CONSTRAINT nume constrangere] FOREIGN KEY (Coloana, Coloana, ...) REFERENCES tabela (Coloana, Coloana,...) Sintaxa constrngerii la nivel de coloan: [CONSTRAINT nume constrangere] REFERENCES tabela (Coloana) Cuvintele 'FOREIGN KEY' nu sunt folosite n cazul constrngerii la nivel de coloan a sintaxei.

Exemplu:CREATE TABLE clienti (id_client NUMBER(5) PRIMARY KEY, nume VARCHAR2(20),

id_adresa NUMBER(5) REFERENCES adrese(id_adresa), id_ang NUMBER(5), CONSTRAINT clienti_fk FOREIGN KEY (id_ang) REFERENCES agenti_inchirieri (id_ang))

Dobndirea cunotinelorn cazul exemplului anterior am definit:

o constrngere referenial la nivel de tabel, care pune n legtur tabela clienti i tabela agenti_inchirieri prin intermediul cmpului de legtur id_ang, care este cheie primar n tabela agenti_inchirieri i cheie strin n tabela clienti o constrngere referenial la nivel de coloan, care leag tabela clienti de

Dobndirea cunotinelorLa rularea exemplului anterior vom observa c se va genera o eroare, deoarece tabela adrese i tabela agenti_inchirieri au fost create fr a se specifica cheia primar (la momentul crerii acelor tabele nu am avut cunotine despre noiunea de cheie primar). n momentul de fa nu putem s crem tabela clienti mpreun cu constrngerea de cheie strin, acest lucru fiind posibil dup ce vom nva cum se adaug o

Dobndirea cunotinelor La definirea unei chei strine

Exemplu: se poate utiliza o clauz suplimentar ON DELETE CASCADE care precizeaz c CREATE TABLE clienti la tergerea unei linii din tabela (id_client NUMBER(5) printe se vor terge automat din tabela copil acele linii care PRIMARY KEY, fac referire la linia ce se terge nume VARCHAR2(20), din tabela printe.Prin folosirea acestei opiuni n id_adresa NUMBER(5) exemplul alturat, la tergerea REFERENCES unei adrese se vor terge toi adrese(id_adresa) clienii de la adresa respectiv.

ON DELETE CASCADE,

Dobndirea cunotinelorO alt opiune este ON DELETE SET NULL care face ca la tergerea unei tabele printe, valorile cheii strine din liniile tabelei copil care fac referire la linia tears vor fi setate pe NULL. n exemplul alturat la tergerea unei adrese, Exemplu: CREATE TABLE clienti (id_client NUMBER(5), nume VARCHAR2(20), id_adresa NUMBER(5) REFERENCES adrese(id_adresa) ON

Dobndirea cunotinelor Constrngerea deverificare (CHECK) Constrngerea CHECK definete explicit o condiie pe care fiecare linie trebuie s o satisfac . Sintaxa:

Exemplu:

CREATE TABLE imbunatatiri ( id_imbunatatiri NUMBER(3) PRIMARY KEY,

[CONSTRAINT nume mobilat VARCHAR2(2), constrangere] CHECK (conditie) termopane VARCHAR2(2), aer_conditionat VARCHAR2(2),

Dobndirea Observai greelile efectuate cunotinelorla definirea constrngerilor n exemplul de mai jos i comentai-le:Facei clic pentru a edita stilurile de text Coordonator Al doilea nivel Al treilea nivel Al patrulea nivel Al cincilea nivel