Se stabilește o relație între două tabele de bază de date atunci când un tabel folosește o cheie străină care face referire la cheia primară a altui tabel. Acesta este conceptul de bază din spatele termenului bază de date relațională.
Cum funcționează o cheie străină pentru a stabili o relație
O cheie primară identifică în mod unic fiecare înregistrare din tabel. Este un tip de cheie candidată care este de obicei prima coloană dintr-un tabel și poate fi generată automat de baza de date pentru a se asigura că este unică. O cheie străină este o altă cheie candidată (nu cheia primară) utilizată pentru a lega o înregistrare la datele dintr-un alt tabel.
De exemplu, luați în considerare aceste două tabele care identifică profesorul care predă ce curs. Aici, cheia primară a tabelului Courses este Course_ID. Cheia străină este Teacher_ID:
Course_ID | Nume_curs | Teacher_ID |
---|---|---|
Curs_001 | Biologie | Teacher_001 |
Curs_002 | Mate | Teacher_002 |
Curs_003 | engleză | Teacher_003 |
Puteți vedea că cheia externă din Cursuri se potrivește cu o cheie primară din Profesori:
Teacher_ID | Nume_Profesor |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
Putem spune că cheia externă Teacher_ID a ajutat la stabilirea unei relații între tabelele Cursuri și Profesori.
Tipuri de relații cu baze de date
Folosind chei externe sau alte chei candidate, puteți implementa trei tipuri de relații între tabele:
Unu-la-unu
Acest tip de relație permite doar o înregistrare pe fiecare parte a relației. Cheia primară se referă la o singură înregistrare (sau la niciuna) dintr-un alt tabel. De exemplu, într-o căsătorie, fiecare soț are doar un alt soț. Acest tip de relație poate fi implementat într-un singur tabel și, prin urmare, nu utilizează o cheie străină.
Unul-la-Mulți
O relație unu-la-mai multe permite ca o singură înregistrare dintr-un tabel să fie asociată cu mai multe înregistrări dintr-un alt tabel. Luați în considerare o companie cu o bază de date care conține tabele Clienți și Comenzi.
Un singur client poate achiziționa mai multe comenzi, dar o singură comandă nu a putut fi conectată la mai mulți clienți. Prin urmare, tabelul Comenzi ar conține o cheie externă care se potrivește cu cheia primară a tabelului Clienți, în timp ce tabelul Clienți nu ar avea o cheie externă care să indice tabelul Comenzi.
Mulți-la-Mulți
Aceasta este o relație complexă în care multe înregistrări dintr-un tabel se pot conecta la multe înregistrări dintr-un alt tabel. De exemplu, afacerea noastră are nevoie probabil de tabelele Clienți și Comenzi și probabil are nevoie și de un tabel de produse.
Din nou, relația dintre tabelul Clienți și Comenzi este unul la mai mulți, dar luați în considerare relația dintre tabelul Comenzi și Produse. O comandă poate conține mai multe produse, iar un produs poate fi legat de mai multe comenzi, deoarece mai mulți clienți pot trimite o comandă care conține unele dintre aceleași produse. Acest tip de relație necesită cel puțin trei tabele.
De ce sunt importante relațiile cu baze de date?
Stabilirea de relații consistente între tabelele bazei de date ajută la asigurarea integrității datelor, contribuind la normalizarea bazei de date. De exemplu, ce se întâmplă dacă nu am lega niciun tabel printr-o cheie străină și, în schimb, am combina datele din tabelele Cursuri și Profesori, astfel:
Teacher_ID | Nume_Profesor | Curs |
---|---|---|
Teacher_001 | Carmen | Biologie, matematică |
Teacher_002 | Veronica | Mate |
Teacher_003 | Jorge | engleză |
Acest design este inflexibil și încalcă primul principiu al normalizării bazei de date, First Normal Form, care prevede că fiecare celulă de tabel ar trebui să conțină o singură bucată de date discretă.
Sau poate am decis să adăugăm un al doilea record pentru Carmen, pentru a impune 1NF:
Teacher_ID | Nume_Profesor | Curs |
---|---|---|
Teacher_001 | Carmen | Biologie |
Teacher_001 | Carmen | Mate |
Teacher_002 | Veronica | Mate |
Teacher_003 | Jorge | engleză |
Acesta este încă un design slab, care introduce dublari inutile și ceea ce se numește anomalii de inserare a datelor, ceea ce înseamnă că ar putea contribui la date inconsecvente. De exemplu, dacă un profesor are mai multe înregistrări, ce se întâmplă dacă unele date trebuie editate, dar persoana care efectuează editarea datelor nu realizează că există mai multe înregistrări? Tabelul ar conține apoi date diferite pentru aceeași persoană, fără nicio modalitate clară de a o identifica sau de a o evita.
Împărțirea acestui tabel în două tabele, Profesori și Cursuri, creează o relație adecvată între date și, prin urmare, ajută la asigurarea coerenței și acurateței datelor.