Termenul de bază de date "relațional" sau "relație" descrie modul în care sunt conectate datele din tabele.
Cei nou-veniți în lumea bazelor de date au adesea dificultăți în a vedea diferența dintre o bază de date și o foaie de calcul. Ei văd tabele de date și recunosc că bazele de date vă permit să organizați și să interogați date în moduri noi, dar nu înțelegeți semnificația relațiilor dintre datele care conferă tehnologiei bazei de date relaționale numele.
Relațiile vă permit să descrieți legăturile dintre diferitele tabele de baze de date în moduri puternice. Aceste relații pot fi apoi utilizate pentru a efectua interogări puternice de tip cross-table, cunoscute sub numele de "join".
Tipuri de relații baze de date
Există trei tipuri diferite de relații baze de date, fiecare numit în funcție de numărul de rânduri de tabel care pot fi implicate în relație. Fiecare dintre aceste trei tipuri de relații există între două tabele.
- Relațiile unu-la-unu apar atunci când fiecare intrare din primul tabel are unul și o singură corespondență în al doilea tabel. Relațiile unu-la-unu sunt rareori utilizate, deoarece este adesea mai eficient să se pună pur și simplu toate informațiile într-o singură masă. Unii designeri de baze de date profită de această relație prin crearea de tabele care conțin un subset de date dintr-un alt tabel.
- Relațiile one-to-many sunt cele mai comune tipuri de relații de bază de date. Acestea apar atunci când fiecare înregistrare din tabelul A corespunde uneia sau mai multor înregistrări din Tabelul B, dar fiecare înregistrare din Tabelul B corespunde unei singure înregistrări din Tabelul A. De exemplu, relația dintre un tabel al Profesorilor și un Tabel de Studenți într-o școală elementară baza de date ar fi probabil o relație una-la-multe, deoarece fiecare student are doar un profesor, dar fiecare profesor are mai mulți studenți. Acest design unu-la-multe ajută la eliminarea datelor duplicat.
- Relațiile multi-la-multe apar atunci când fiecare înregistrare din tabelul A corespunde uneia sau mai multor înregistrări din tabelul B și fiecare înregistrare din tabelul B corespunde uneia sau mai multor înregistrări din tabelul A. De exemplu, relația dintre un profesor și un curs tabel ar fi probabil multi-la-multi, deoarece fiecare profesor poate instrui mai mult de un curs, și fiecare curs poate avea mai mult de un instructor.
Relații de auto-referință: un caz special
Relațiile de auto-referință apar atunci când există doar un singur tabel implicat. Un exemplu obișnuit este un tabel al angajaților care conține informații despre supraveghetorul fiecărui angajat. Fiecare supraveghetor este, de asemenea, un angajat și are propriul său supraveghetor. În acest caz, există o relație de auto-referință unu-la-multe, deoarece fiecare angajat are un supraveghetor, dar fiecare supraveghetor poate avea mai mult de un angajat.
Crearea relațiilor cu cheile externe
Creați relații între tabele, specificând o cheie străină . Această cheie spune baza de date relațională cum sunt legate tabelele. În multe cazuri, o coloană din Tabelul A conține cheile primare care sunt menționate din Tabelul B.
Luați din nou în considerare exemplul meselor profesorilor și studenților. Tabelul Profesorilor conține doar o coloană de identificare, nume și coloană:
InstructorID | Numele profesorului | Curs |
---|---|---|
001 | John Doe | Engleză |
002 | Jane Schmoe | Math |
Tabelul Studenți include un cod, un nume și o coloană de chei străine:
Carnet de student | Numele studentului | Teacher_FK |
---|---|---|
0200 | Lowell Smith | 001 |
0201 | Brian Short | 001 |
0202 | Corky Mendez | 002 |
0203 | Monica Jones | 001 |
Coloana Teacher_FK din tabelul Studenți face referire la valoarea cheii primare a unui instructor din tabelul Profesorii.
Frecvent, designerii bazei de date vor folosi "PK" sau "FK" în numele coloanei pentru a identifica cu ușurință o cheie primară sau o coloană de chei străine.
Rețineți că aceste două tabele ilustrează o relație una-la-multe între profesori și studenți.
Relațiile și integritatea referențială
Odată ce ați adăugat o cheie străină la o masă, puteți crea o constrângere bazată pe baza de date care impune integritatea referențială între cele două tabele. Acest lucru asigură faptul că relațiile dintre tabele rămân în concordanță. Atunci când un tabel are o cheie străină la un alt tabel, conceptul de integritate referențială prevede că orice valoare cheie străină din Tabelul B trebuie să se refere la o înregistrare existentă în Tabelul A.
Implementarea relațiilor
În funcție de baza de date, implementați relațiile dintre tabele în moduri diferite. Microsoft Access oferă un expert care vă permite cu ușurință să conectați tabelele și să impuneți și integritatea referențială.
Dacă scrieți direct SQL, mai întâi creați tabelul Profesorii, declarând o coloană ID drept cheie primară:
CREATE TABLE Profesorii (
InstructorID INT AUTO_INCREMENT PRIMAR CHEIE,
Teacher_Name VARCHAR (100),
Curs VARCHAR (100)
);
Când creați tabelul Studenți, declarați că coloana Teacher_FK este o cheie străină care face referire la coloana InstructorID din tabelul Profesorilor:
CREATE TABLE Studenții (
StudentID INT AUTO_INCREMENT PRIMAR CHEIE,
Student_Name VARCHAR (100), Teacher_FK INT,
FOREIGN KEY (Teacher_FK) REFERINȚE Profesori (InstructorID))
);
Utilizarea relațiilor pentru a intra în tabele
Odată ce ați creat una sau mai multe relații în baza de date, puteți utiliza puterea lor utilizând interogările SQL JOIN pentru a combina informațiile din mai multe tabele. Cel mai obișnuit tip de conectare este SQL INNER JOIN sau o simplă conexiune. Acest tip de intrare returnează toate înregistrările care îndeplinesc condiția de conectare din mai multe tabele. De exemplu, această condiție JOIN va reveni la Student_Name, Teacher_Name și Curs unde cheia străină din tabelul Studenți se potrivește cu cheia primară din tabelul Profesorii:
SELECT Studenți.Student_Name, Teachers.Teacher_Name, Teachers.Course
Din studenți
INNER JOIN Profesori
ON Students.Teacher_FK = Teachers.InstructorID;
Această afirmație produce un tabel ca acesta:
Tabel întors din declarația de conectare SQL
Student_NameTeacher_NameCourseLowell SmithJohn DoeEnglishBrian ShortJohn DoeEnglishCorky MendezJane SchmoeMathMonica JonesJohn DoeEngleză