Articles

Definirea constrângerilor din tabelul creare în Oracle 12c

puteți utiliza instrucțiunea Creare tabel pentru a impune mai multe tipuri diferite de constrângeri pe un tabel: chei candidat, chei primare, chei străine și condiții de verificare. O clauză de constrângere poate constrânge o singură coloană sau un grup de coloane dintr-un tabel. Scopul acestor constrângeri este de a determina Oracle să facă cea mai mare parte a muncii în menținerea integrității bazei de date. Cu cât adăugați mai multe constrângeri la o definiție a tabelului, cu atât mai puțină muncă trebuie să faceți în aplicații pentru a menține datele. Pe de altă parte, cu cât există mai multe constrângeri într-un tabel, cu atât este nevoie de mai mult timp pentru a actualiza datele.

puteți specifica constrângeri într-unul din două moduri: ca parte a definiției coloanei (cunoscută sub numele de constrângere de coloană) sau la sfârșitul instrucțiunii Creare tabel (cunoscută sub numele de constrângere de tabel). Clauzele care constrâng mai multe coloane trebuie să fie constrângeri de tabel.

cheia candidat

o cheie candidat este o combinație de una sau mai multe coloane, ale căror valori identifică în mod unic fiecare rând al unui tabel. Următoarea listă arată crearea unei constrângeri unice pentru tabelul de probleme:

cheia pentru acest tabel este combinația dintre oraș și SAMPLE_DATE. Observați că ambele coloane sunt, de asemenea, declarate a nu fi nule. Această caracteristică necesită să specificați valori pentru anumite coloane pentru ca rândurile să fie inserate. În mod clar, informațiile despre temperatură și precipitații nu sunt utile fără a ști unde sau când au fost colectate. Această tehnică este comună pentru coloanele care sunt cheia primară a tabelului, dar este utilă și dacă anumite coloane sunt esențiale pentru ca rândul de date să fie semnificativ. Dacă nu este specificat NOT NULL, coloana poate avea valori NULL.

când creați o constrângere unică, Oracle creează un index unic pentru a impune unicitatea valorilor. În cadrul unei constrângeri cheie primară, cel puțin una dintre coloanele din cheia primară pentru fiecare rând nu trebuie să fie nulă.

cheia primară

cheia primară a unui tabel este una dintre cheile candidate cărora le oferiți câteva caracteristici speciale. Puteți avea o singură cheie primară, iar o coloană cheie primară nu poate conține nuluri.

următoarea instrucțiune Creare tabel are același efect ca cea precedentă, cu excepția faptului că puteți avea mai multe constrângeri unice, dar numai o singură constrângere cheie primară:

pentru tastele primare sau candidate cu o singură coloană, puteți defini cheia de pe coloană cu o constrângere coloană în loc de o constrângere tabel:

în acest caz, coloana author_name este cheia primară, iar Oracle va genera un nume pentru constrângerea cheii primare. Acest lucru nu este recomandat dacă doriți să impuneți un standard comun de denumire pentru chei, așa cum s-a discutat mai târziu în „constrângeri de denumire.”

desemnarea spațiilor de tabele Index

constrângerile cheie unice și primare creează indici. Cu excepția cazului în care spuneți Oracle diferit, acești indici sunt plasați în spațiul de tabel implicit. Pentru a specifica un spațiu de tabelă diferit, utilizați clauza utilizarea spațiului de tabelă INDEX din comanda Creare tabel, așa cum se arată în următoarea listă:

indexul asociat cu constrângerea cheii primare AUTHOR_PK va fi plasat în spațiul de tabelă al utilizatorilor.

notă

în majoritatea instalărilor implicite, spațiul de tabelă al utilizatorilor este creat și este spațiul de tabelă implicit.

cheia străină

o cheie străină este o combinație de coloane cu valori bazate pe valorile cheii primare dintr-un alt tabel. O constrângere cheie străină, cunoscută și sub numele de constrângere de integritate referențială, specifică faptul că valorile cheii străine corespund valorilor reale ale cheii primare din celălalt tabel. În tabelul raft, de exemplu, coloana CATEGORY_NAME se referă la valori pentru coloana CATEGORY_NAME din tabelul Categorie:

puteți face referire la o cheie primară sau unică, chiar și în același tabel. Cu toate acestea, nu se poate face referire la un tabel într-o bază de date la distanță în clauza referințe. Puteți utiliza formularul de tabel (care este utilizat mai devreme pentru a crea o cheie primară în tabelul de probleme) în locul formularului de coloană pentru a specifica cheile străine cu mai multe coloane.

uneori este posibil să doriți să ștergeți aceste rânduri dependente atunci când ștergeți rândul de care depind. În cazul raftului de cărți și al categoriei, dacă ștergeți un nume de categorie din categorie, poate doriți să faceți valorile corespunzătoare ale coloanei numelor de categorii de cărți nule. Într-un alt caz, poate doriți să ștergeți întregul rând. Clauza de ștergere cascadă adăugată la clauza referințe îi spune Oracle să șteargă rândul dependent atunci când ștergeți rândul corespunzător din tabelul părinte. Această acțiune menține automat integritatea referențială.

constrângerea de verificare

multe coloane trebuie să aibă valori care se află într-un anumit interval sau care îndeplinesc anumite condiții. Cu o constrângere de verificare, puteți specifica o expresie care trebuie să fie întotdeauna adevărată pentru fiecare rând din tabel. De exemplu, tabelul de evaluare stochează evaluări valide; pentru a limita valorile disponibile dincolo de limitele impuse de definiția coloanei, puteți utiliza o constrângere de verificare, așa cum se arată în următoarea listă:

o constrângere de verificare la nivel de coloană nu se poate referi la valori din alte rânduri; nu poate utiliza pseudo-coloanele precum SYSDATE, USER, CURRVAL, NEXTVAL, LEVEL și ROWNUM. Puteți utiliza formularul de constrângere a tabelului (spre deosebire de formularul de constrângere a coloanei) pentru a face referire la mai multe coloane dintr-o constrângere de verificare.

constrângeri de denumire

puteți numi constrângerile dvs. Dacă utilizați o schemă de denumire eficientă pentru numele dvs. de constrângere, veți putea identifica și gestiona mai bine constrângerile. Numele unei constrângeri ar trebui să identifice tabelul pe care acționează și tipul de constrângere pe care îl reprezintă. De exemplu, cheia primară din tabelul de probleme ar putea fi numită TROUBLE_PK.

puteți specifica un nume pentru o constrângere atunci când creați constrângerea. Dacă nu specificați un nume pentru constrângere, Oracle generează un nume. Majoritatea numelor de constrângeri generate de Oracle sunt de forma sys_c##### # (de exemplu, sys_c000145). Deoarece numele de constrângere generat de sistem nu vă spune nimic despre tabel sau constrângere, ar trebui să vă denumiți constrângerile.

în exemplul următor, constrângerea cheie primară este creată și denumită, ca parte a comenzii Creare tabel pentru tabelul de probleme (observați clauza constrângere):

clauza de constrângere a comenzii CREATE TABLE numește constrângerea (în acest caz, TROUBLE_PK). Puteți utiliza acest nume de constrângere mai târziu atunci când activați sau dezactivați constrângerile.