Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Integritatea datelor

Oracle


Integritatea datelor

Ce este integritatea datelor?

O problema critica în gestionarea bazelor de date este asigurarea respectarii unui set predefinit de reguli de catre datele bazei de date. Aceste reguli trebuie sa fie în concordanta cu activitatile comerciale pe care le sustine sistemul. Administratorul bazei de date, programatorul aplicatiei si'reprezentantul de zona sunt responsabili pentru definirea si crearea acestor reguli.



În esenta, integritatea datelor presupune definirea regulilor care restrâng valorile valide pentru o coloana a unui tabel. Restrictiile de integritate sunt definite pentru tabele si prin urmare toate vederile si sinonimele tabelelor sunt supuse restrictiilor de integritate. Daca o instructiune DML încearca sa efectueze o actiune care violeaza o restrictie de integritate, este generata o eroare si tranzactia este derulata înapoi.

De ce se folosesc restrictii de integritate?

Restrictiile de integritate a datelor reprezinta mijloacele utilizate de programul Oracle pentru a preveni introducerea datelor invalide în tabelele bazei de date. Aceste restrictii de integritate sunt definite pentru a impune respectarea regulilor comerciale care sunt asociate cu informatiile din baza de date. Programul Oracle nu permite încalcarea acestor reguli, asigurând astfel integritatea datelor.

Diversele tipuri de restrictii de integritate va permit sa personalizati si sa modelati baza dumneavoastra de date în concordanta cu specificul activitatii companiei dumneavoastra. Acest capitol prezinta diversele tipuri de restrictii de integritate.

Cum se folosesc restrictiile de integritate

Restrictiile de integritate sunt definite asupra tabelelor bazei de date. Vederile si sinonimele tabelelor sunt supuse restrictiilor de integritate definite asupra tabelelor de baza. în acest capitol sunt trecute în revista tipurile de restrictii de integritate si modul de utilizare a lor.

Unde se foloseste integritatea datelor

Este recomandabil sa definiti regulile de integritate a datelor în baza de date si nu în aplicatii. Este mai eficient sa o faceti la nivelul bazei de date decât sa creati rutinele echivalente în aplicatia dumneavoastra. Unul dintre motivele principale pentru a face acest lucru la nivelul bazei de date este faptul ca integritatea datelor la acest nivel asigura performante maxime în ceea ce priveste viteza. De asemenea, toate aplicatiile pot beneficia de aceste restrictii globafe, deci nu este necesar sa repetati structurile logice echivalente în fiecare aplicatie.

Denumirea restrictiilor de integritate

Toate restrictiile au un nume. Puteti denumi o restrictie în timp ce o creati. Daca nu o faceti, programul Oracle îi va atribui un nume. Numele furnizat de utilizator trebuie sa fie diferit de toate celelalte restrictii care va apartin.

Tipuri de restrictii de integritate

În baza de date relationala Oracle, exista urmatoarele tipuri de restrictii de integritate a datelor:

Nuli

Unique

Primary key

Referential

Check

Restrictia de integritate pentru un tabel este stabilita atunci când tabelul este creat sau modificat. Pentru a stabili o restrictie de integritate, puteti include clauza constraint în comenzile create table sau alter table. Exemplul urmator ilustreaza sintaxa generala a clauzei constraint:

CONSTRAINT nume_restrictie tip_restrictie

Tipurile de restrictii sunt tratate în paragrafele care urmeaza.

Restrictia de integritate nuli

In mod prestabilit, toate coloanele unui tabel accepta valori nule. Cu alte cuvinte, este permisa absenta unei valori în orice coloana. Prin stabilirea restrictiei de integritate not nuli impuneti coloanei specificate sa posede o valoare pentru fiecare linie a tabelului.

Instructiunea urmatoare creeaza un tabel în care coloana nume este definita cu restrictia de integritate not nuli. Aceasta înseamna ca pentru fiecare linie adaugata tabelului trebuie sa existe o valoare pentru coloana nume.

Create table ang

(marca_ang number(7),

nume varchar2(20)

constraint s_ang_nume_nn not nuli,

prenume varchar2(20),

nr_dept varchar2(5));

Pentru a afisa restrictiile nuli dintr-un tabel, folositi comanda describe. Comanda describe care urmeaza, afiseaza toate restrictiile not nuli din tabelul ANG.

DESCRIBE ang

Date de iesire:

Name

NULL?

Type

marca ang

NUMBER(7)

Nume

NOT NULL

VARCHAR2 (20)

Prenume

VARCHAR2 (20)

nr dept

VARCHAR2 ( 5 )

Restrictia de integritate unique

Aceasta restrictie de integritate impune ca toate valorile dintr-o coloana sa fie distincte. Nu pot exista valori duplicate într-o coloana care are restrictia de integritate unique. Coloana definita de restrictia unique este cunoscuta sub numele de coloana cu cheie unica. Oracle va permite sa plasati aceasta restrictie pe mai multe coloane, definind astfel o asa numita restrictie de unicitate compusa.

O restrictie de unicitate compusa cere ca o combinatie a coloanei cu cheie unica sa nu se repete.

Instructiunea urmatoare creeaza o restrictie de unicitate asupra coloanei marca_ang a tabelului ANG:

create table ang

(marca_ang number(7)

constraint s_ang_marca_ang_uk unique,

nume varchar2(20)

constraint s_ang_nume_nn not nuli,

prenume varchar2(20),

nr_dept varchar2(5));

In exemplul anterior a fost folosita comanda describe pentru a confirma restrictia de integritate nuli. In schimb pentru a afisa alte tipuri de restrictii definite pentru un tabel, trebuie sa folositi o alta abordare. Consultati paragraful "Afisarea restrictiilor de integritate" care urmeaza ceva mai târziu în acest capitol pentru a vedea care sunt metodele de confirmare a restrictiilor unui tabel.

Restrictia de integritate unique este respectata de coloanele cu valori nule deoarece toate valorile nule sunt considerate unice si distincte din punctul de vedere al acestei restrictii în consecinta, e,ste recomandabil sa plasati restrictia not nuli pe coloanele cu valori unice în acest fel fortati introducerea unei valori pentru coloana respectiva si va asigurati ca valoriie sunt cu adevarat distincte în declaratia tabelului urmator sunt adaugate restrictiile unique si not nuli pe coloana marca_ang:

create table ang

(marca_ang number(7)

constraint s_ang_marca_ang_uk unique

constraint s_ang_marca_ang_nn not nuli,

nume varchar2(20)

constraint s_ang_nume_nn not nuli,

prenume varchar2 (20) ,

nr_dept varchar2(5));

Restrictia de integritate primary key

Restrictia de integritate primary key desemneaza o coloana sau o combinatie de coloane drept cheie principala a tabelului. Cheia principala identifica în mod univoc fiecare linie a tabelului. De asemenea, aceasta restrictie creeaza în mod implicit restrictiile not nuli si unique pe coloana respectiva. Desi Oracle nu impune existenta unei chei principale pentru fiecare tabel, este bine sa va obisnuiti sa o creati. De asemenea, este recomandabil sa desemnati drept cheie principala o coloana sau o combinatie de coloane ale caror valori nu se modifica niciodata.

Instructiunea urmatoare creeaza o restrictie primary key pentru câmpul marca_ang al tabelului ANG:

create table ang

(marca_ang number(7)

constraint s_ang_marca_ang_pk primary key,

nume varchar2(20)

constraint s_ang_nume_nn not nuli,

prenume varchar2 (2()) ,

nr_dept varchar2(5));

Pentru a crea restrictii asupra tabelelor, puteti folosi o a doua sintaxa, cunoscuta sub numele de sintaxa restrictie_tabel. Cu aceasta sintaxa, restrictiile sunt plasate la baza instructiunii create table. Exemplul urmator creeaza acelasi tabel ca în exemplul anterior, folosind sintaxa restrictie_tabel:

create table ang

(marca_ang number(7),

nume varchar2(20),

prenume varchar2(20),

nr_dept varchar2(5),

constraint s_ang_marca_ang_pk primary key (marca_ang));

Sistemul Oracle impune existenta a maxim o cheie principala pentru fiecare tabel. Cheia principala nu poate fi de tip long sau long raw. Nu puteti desemna aceeasi coloana sau combinatie de coloane atât drept cheie principala cât si drept cheie'unica sau atât drept cheie principala cât si drept cheie de grup. Daca încercati sa faceti acest lucru, programul Oracle genereaza o eroare.

Exemplul urmator adauga o cheie principala compusa pe coloanele nume si prenume ale tabelului ANG:

alter table ang

add primary key

(nume, prenume);

alter table ang enable primary key

Restrictia de integritate prin referinta

Restrictiile de integritate prin referinta sunt folosite pentru a impune regulile comerciale care dicteaza relatiile dintre coloanele diverselor tabele. Cu acest tip de restrictie, între tabele se creeaza o relatie parinte-fiu. Tabelul parinte contine cheia referita iar tabelul fiu contine cheia externa.

De exemplu, sa presupunem ca aveti un tabel parinte care contine o lista de 50 de state. Tabelul fiu poate fi un tabel de adrese care contine numele si adresa cunoscutilor dumneavoastra Tabelul de adrese are o restrictie priri referinta care stabileste ca singurele adrese valide sunt cele în care statul se regaseste în tabelul parinte de state. Daca încercati sa adaugati o noua adresa în care prescurtarea statului este ZZ, inserarea va esua deoarece ZZ, nu exista printre cele 50 de state ale tabelului parinte. Exemplul urmator creeaza aceasta restrictie de integritate prin referinta asupra tabelului de adrese:

alter table adrese add constraint fk_abr_stat foreign key (abr_stat) references abr_stat(abr_stat) ;

Iata o lista a principalilor termeni folositi la stabilirea unei restrictii de integritate prin referinta:

Cheie externa

Coloana sau setul de coloane incluse în definitia restrictiei de integritate prin referinta

Cheie referita

Cheia unica sau cheia principala a aceluiasi tabel sau a unui alt tabel la care face referire cheia externa

Tabel dependent

Tabelul care contine cheia externa

Tabel referit

Tabelul care este referit de cheia externa

Sistemul Oracle impune câteva restrictii în legatura cu manipularea cheilor prin referinta. Nu puteti sa modificati sau sa eliminati cheia referita daca cheia rezultanta ar viola restrictiile de integritate prin referinta. De exemplu, nu puteti elimina o valoare a cheii referite deoarece acest lucru ar duce la violarea restrictiilor prin referinta. Totusi, puteti elimina valorile cheii referite daca nu exista nici o linie dependenta.

Eliminarea în cascada a cheilor externe

Exista totusi cazuri când este întradevar necesar sa eliminati o valoare a cheii referite. Atunci când nu exista valori ale cheii externe care sa faca referire la valoarea respectiva, puteti elimina fara probleme valoarea cheii referite. De cele mai multe ori însa, exista linii având asociata restrictia f oreign key care va împiedica sa eliminati valoarea cheii referite.

Pentru a rezolva aceasta problema, stabiliti asupra cheii referite restrictia on delete cascade. Restrictia on delete cascade permite eliminarea din tabelul parinte a oricaror valori ale cheii referite care au Unii dependente în tabelul fiu. Atunci când este eliminata o asemenea valoare în tabelul parinte, programul Oracle elimina automat liniile corespunzatoare din tabelul fiu.

Restrictia de integritate check

Restrictia de integritate check defineste în mod explicit o conditie care trebuie sa fie adevarata. Pentru a satisface aceasta restrictie, fiecare linie a tabelului trebuie sa respecte conditia. Conditia poate fi evaluata si la valoarea Unknown pentru a permite prezenta valorii nuli. Daca se încearca executarea unei instructiuni care ar duce la nerespectarea conditiei, instructiunea este derulata înapoi.

Restrictia check prezinta urmatoarele limitari:

Nu poate sa contina subinterogari

Nu poate sa contina functiile sysdate, uid, user si userenv

Nu poate utiliza pseudo-coloanele currval, nextval, level si rownum

Exemplul urmator creeaza o restrictie check asupra coloanei oras din tabelul adresa_filiala:

create table adresa_filiala

(nr_filiala number(5),

nume_filiala varchar2(50),

oras varchar2(50)

constraint verificare_oras

check oras in ( "Dallas'", "Denver", "Indianapolis") ,

stat varchar2(50));

Nu exista nici o limitare în legatura cu numarul de restrictii check permise pe o coloana. O singura coloana poate avea mai multe restrictii check.

Afisarea restrictiilor de integritate

în paragrafele anterioare, a fost utilizata comanda describe pentru afisarea restrictiilor nuli impuse coloanelor. Tabelul USER_CONSTRAINTS contine informatii complete despre toate restrictiile impuse unui tabel.

În continuare sunt prezentate coloanele tabelului USER_CONSTRAINTS:

owner

Utilizatorul care este proprietarul definitiei restrictiei.

constraint_name

Numele definitiei restrictiei.

constraint_type

Tipul restrictiei. Tipurile sunt C pentru check, P pentru cheie principala, U pentru cheie unica si R pentru cheie externa.

table name

Numele tabelului asociat cu definitia restrictiei.

search condition

Textul conditiei de cautare pentru o conditie check.

r_owner

Proprietarul tabelului la care se face referire într-o restrictie prin referinta.

r_constraint names

Numele restrictiei de integritate primary key pentru coloana referita de o restrictie prin referinta.

delete rule

Modul de tratare a cheilor externe care fac referire la o cheie principala sau la o cheie unica eliminate. Cele doua optiuni sunt

delete cascade si no action

status

Valoare utilizata intern de serverul Oracle.

Pentru a afisa restrictiile asociate unui anumit tabel, efectuati o operatiune select: asupra tabelului USER_CONSTRAINTS pentru tabelul vizat be exemplu, instructiunea urmatoare afiseaza restrictiile asociate tabelului LST_ARTICOLE:

select constraint_name "Nume"

constraint_type "Tip"

from user_constraints

where table_name = 'lst_articole';

Date de iesire:

Nume

Tip

S_COD_ARTICOLE_FK

R

S_NR_ARTICOLE_UK

U

S_ID_ARTICOLE_PK

P

Tabelul USER_CONS_COLUMN va furnizeaza informatii suplimentare în legatura cu restrictiile impuse unui tabel în continuare sunt prezentate coloanele tabelului USER_CONS_COLUMN:

owner

Utilizatorul care este proprietarul definitiei restrictiei.

constraint_name

Numele definitiei restrictiei.

table_name

Numele tabelului asociat cu definitia restrictiei.

column_name

Numele coloanei specificate în definitia restrictiei.

position

Pozitia initiala a coloanei în definitia restrictiei.

Instructiunea urmatoare afiseaza informatiile referitoare la restrictiile impuse coloanelor tabelului CLIENt

select constraint_name "Restrictie",

column_name "Coloana"

froin iiser_cons_column where table_name = "client";

Date de iesire:

Restrictie

Coloana

S_CLIENT_ID_PK

CLIENT ID

S_ZONA_VANZARI_CLIENT_FK

ZONA_VANZARI

Afisarea exceptiilor de la restrictiile de integritate

Pentru a obtine asistenta la depanarea exceptiilor de la restrictii, includeti optiunea exceptions în clauza enable a comenzilor create 'table sau a'lter table. Optiunea exceptions depune identificatorul liniei (rowid), proprietarul tabelului, numele tabelului si numele restrictiei, pentru toate liniile care fac exceptie de la restrictii, într-un tabel predefinit EXCEPTIONS. Sistemul Oracle dispune de un script, numit utlexcpt. sql, care creeaza tabelul EXCEPTIONS.

Instructiunea urmatoare modifica un tabel si adauga o noua restrictie cu optiunea exceptions:

alter table personal,

enable primary key

exceptions into exceptions;

Odata creat tabelul EXCEPTIONS, puteti efectua asupra lui o operatie de selectare pentru a obtine liniile care violeaza o anumita restrictie. Exemplul urmator foloseste ojeuniune pentru a afisa liniile de date care intra în conflict cu regulile tabelului în acest exemplu, în tabelul DEPT exista o valoare duplicata a cheii unice.

Select nr_dept, nume_dept, dir_dept from dept, exceptions

where exceptions-constraint = "s nume_dept_uk"

and dept.rowid = exceptions.row_Td;

Date de iesire:

NR_DEPT

NUME_DEPT

DIR_DEPT

Ambalare

Ambalare

Riley

Riley

Activarea si dezactivarea restrictiilor de integritate

O restrictie de integritate definita asupra unui tabel se poate afla în doua stari: activa si inactiva. Atunci când o restrictie este activa, este impusa respectarea regulilor stabilite în definitia restrictiei. Atunci când restrictia este inactiva, nu este impusa respectarea acestor reguli.

Daca se încearca activarea unei restrictii asupra unui tabel care nu respecta regulile restrictiei de integritate, programul Oracle genereaza o eroare de exceptie iar instructiunea în cauza este derulata înapoi. Daca exista o exceptie, nu puteti activa restrictia pâna când exceptia nu este actualizata sau eliminata

Pentru activarea si dezactivarea restrictiilor se folosesc comenzile create table si alter table. Exemplul urmator dezactiveaza exceptiile impuse tabelului LST_ARTICOLE:

alter table lst articole

disable constraTnt s_cod_articole_fk;

Exista momente când este cu adevarat necesara dezactivarea temporara a restrictiilor. Acest lucru este necesar pe parcursul încarcarii datelor prin intermediul SQL*Loader si pe parcursul proceselor de import si export în ambele cazuri, dezactivarea temporara a restrictiilor poate îmbunatati eficienta operatiei.

Vederi predefinite pentru afisarea restrictiilor de integritate

Toate informatiile referitoare la restrictiile de integritate sunt stocate în dictionarul de date. Sistemul Oracle va pune la dispozitie mai multe vederi pe care le puteti folosi pentru a vedea definitiile curente ale restrictiilor de integritate din dictionarul de date. Aceste vederi sunt urmatoarele:

all_constraints

Definitiile restrictiilor pentru toate tabelele accesibile

all_cons_columns

Informatii în legatara cu coloanele accesibile care apar în definitiile restrictiilor

user_constraints

Definitiile restrictiilor asociate tabelelor utilizatorului

user_cons_columns

Informatii în legatara cu coloanele care apar în definitiile restrictiilor apartinând utilizatorului

dba_constraints

Definitiile restrictiilor pentru toate tabelele bazei de date

dba_cons_columns

Informatii în legatara cu toate coloanele care apar în definitiile restrictiilor

Distrugerea restrictiilor de integritate

Pentru a distrage o restrictie de integritate, lansati comanda alter table cu clauza drop. In instructiunea urmatoare, este distrusa restrictia din tabelul

lst_articole:

alte"r table lst_articole

drop constraint s cod articole fk;

Rezumat

Integritatea datelor asigura respectarea de catre baza de date a unui set predefinit de reguli stabilite de administratorul bazei de date si de programatorul aplicatiei. Atât administratorul cât si programatorul preiau aceste reguli din zona de activitate a companiei pe care o sustine baza de date. Practic, activitatea comerciala este cu adevarat cea care impune si defineste integritatea datelor.

Integritatea datelor si restrictiile de integritate sunt mecanismele folosite de serverul Oracle pentru a preveni introducerea datelor invalide în baza de date. Aceste restrictii asupra datelor asigura respectarea cu strictete a regulilor companiei.

În acest capitol, ati facut cunostinta cu diverse tipuri de restrictii de integritate si ati învatat sa le aplicati la nivel'de tabel. De asemenea, au fost prezentate modurile de gestionare a restrictiilor.


Document Info


Accesari: 10288
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )