ce sunt cheile și constrângerile?
o bază de date trebuie să adere la anumite proprietăți pentru a menține integritatea și calitatea datelor pe care le stochează. Cheile și constrângerile sunt reguli care definesc ce valori de date sunt permise în anumite coloane de date. Ele sunt un concept important de bază de date și fac parte din definiția schemei unei baze de date. Definirea cheilor și a constrângerilor face parte din procesul de proiectare a bazei de date și se asigură că datele dintr-o bază de date sunt fiabile și își mențin integritatea. Constrângerile se pot aplica unei anumite coloane, unui tabel întreg, mai multor tabele sau unei scheme întregi. Un sistem de baze de date de încredere asigură că constrângerile dețin în orice moment. Cheile sunt un tip special de constrângere folosit pentru a stabili relații și unicitate.
cheie primară
o parte necesară a stabilirii relațiilor dintre două entități sau două bucăți de date este identificarea corectă a datelor. În SQL, datele de identificare unică sunt critice. O cheie primară este un identificator unic pentru un rând de date. În analogia foii de calcul pe care am folosit-o până acum, a existat întotdeauna o coloană id
. În timp ce orice coloană poate servi drept cheie primară, utilizarea unei coloane numite id
este ușoară din motive mnemonice și este o convenție populară. Într-un RDBMS, fiecare tabel poate avea o singură cheie primară.
o cheie primară este un identificator unic garantat pentru un rând dintr-un tabel. Din această cauză, putem folosi valoarea cheii primare a unui rând pentru a face referire la acel rând din alte tabele. În capitolul precedent, am stabilit relații între mai multe tabele bazate pe asta, dar bazele de date relaționale au nevoie de o modalitate de a se raporta între ele, iar coloana cheie primară este o modalitate de a face acest lucru eficient. În PostgreSQL, cheile primare primesc, de asemenea, beneficii de performanță, deoarece se știe că vor fi utilizate frecvent pentru a căuta date, în special în căutările cu mai multe tabele.
rețineți că nu toate coloanele denumite „id” sunt chei primare; aceasta este doar o convenție. În plus, cheile primare pot avea orice nume.
am văzut deja sintaxa pentru a desemna o coloană ca coloană cheie primară în capitolele anterioare:
să aruncăm o privire la comanda de mai sus care creează un tabel numit users
, din perspectiva înțelegerii cheilor primare.
-
id
coloana este cheia primară a acestui tabel. De asemenea, putem spune că constrângerea cheii primare a fost aplicată coloaneiid
. -
id
poate conține numai valori numerice (int
). - pentru fiecare rând nou adăugat la tabel, câmpul
id
va fi incrementat automat cu 1. Cu multe RDBMS, se utilizează cuvântul cheieAUTO_INCREMENT
. Cu PostgreSQL, folosim serial pentru a incrementa automat ID-urile noastre și a seta tipul lor ca întreg. Nu este necesar să specificați manual valoarea cheii primare de fiecare dată când introduceți date, PostgreSQL o va face pentru dvs. dacă specificați serial ca tip pentru id.
cheie străină
coloanele cheie străine sunt utilizate pentru a face referire la un alt rând de date, poate într-un alt tabel. Pentru a face referire la un alt rând, baza de date are nevoie de un identificator unic pentru acel rând. Prin urmare, coloanele cheii străine conțin valoarea cheii primare a rândului de referință. De exemplu, un tabel ar putea avea o coloană numită user_id
ca coloană cheie străină, care corespunde coloanei id
a tabelului users
. Cheile străine sunt modul în care RDBMS stabilește relații între rânduri de date, fie în același tabel, fie în tabele.
puteți vedea din instrucțiunea SQL de mai sus că linia pentru a stabili această relație este
FOREIGN KEY (book_id) REFERENCES books(id) ON DELETE CASCADE
în exemplul de mai sus id
este cheia primară a tabelului books
, care este utilizată pentru a stabili o relație cu tabelul de recenzii. Datele id
sunt stocate în tabelul recenzii din câmpul book_id
pentru a mapa cărțile cu recenziile. Clauza ON DELETE CASCADE
indică faptul că, dacă o carte este ștearsă, toate recenziile asociate cu acea carte sunt, de asemenea, șterse.
cheie compozită ca cheie primară
în capitolul precedent am creat o relație mulți-La-mulți, în care cheia noastră primară era formată din două coloane. user_id
și book_id
ambele împreună au format cheia primară pentru tabelul de referință încrucișată, așa cum se poate vedea în această linie a instrucțiunii SQL.
PRIMARY KEY (user_id, book_id)
când o cheie primară constă dintr-o pereche unică PRIMARY KEY (user_id, book_id)
, este cunoscută sub numele de cheie compozită. De obicei apare în relații multe-la-multe și trebuie să adăugăm un tabel suplimentar pentru a stoca aceste date despre relații. Cheia compozită asigură că datele din tabel vor fi unice pentru relația dintre utilizator și carte. Exemplu:
|User_id | Book_id | | 1 | 1 | | 1 | 2 | | 2 | 1 |
constrângeri unice
pe lângă cheia primară, o bază de date permite, de asemenea, aplicarea unei constrângeri unice pe orice coloană din Baza de date. De exemplu, în tabelul Cărți, putem alege nu numai să avem book_id
ca cheie primară unică, ci și să stocăm numărul ISBN al cărții. ISBN, International Standard Book Number este un număr unic de 10 cifre pentru o carte. Putem alege să proiectăm Baza noastră de date pentru a face această coloană unică. Chiar dacă aceasta nu este o cheie primară, ISBN-urile duplicate nu vor fi permise în tabelul cărți, iar calitatea datelor va fi menținută.
constrângerea unică nu permite intrarea duplicată în tabelul cărți pentru valoarea coloanei isbn.
constrângeri NOT NULL
am văzut „NOT NULL” în multe dintre declarațiile noastre SQL. Constrângerea NOT NULL
împiedică o coloană să permită o valoare nulă (adică această coloană trebuie să conțină date). Acest lucru este important pentru domeniile cheie. De exemplu: dacă doriți să adăugați un utilizator la o bază de date, trebuie să furnizați un nume de utilizator. Fără această constrângere, baza de date s-ar umple cu valori nule și ar deveni mai puțin utilă.
cum gestionează SQL aceste relații?
PostgreSQL permite relații între schema și datele diferitelor tabele prin utilizarea cheilor străine și a unei operații numite JOIN
. După cum sugerează și numele, scopul este de a se alătura tabelelor. Prin acest mecanism putem obține, de exemplu, detaliile complete ale autorului tabelului de recenzii prezentat mai sus, deoarece are un câmp user_id
care se referă la tabelul user
. Iată un exemplu rapid:
acum că înțelegem cum să creăm mai multe tabele și cheile de rol joacă în stabilirea relațiilor, vom arunca o privire mai profundă asupra diferitelor asocieri și a modului în care interogările SQL sunt construite folosind aceste asocieri pentru a prelua datele necesare din mai multe tabele.