Relațiile unu-la-multe într-o bază de date

O relație one-to-many într-o bază de date apare atunci când fiecare înregistrare din tabelul A poate avea multe înregistrări legate în Tabelul B, dar fiecare înregistrare din Tabelul B poate avea numai o înregistrare corespunzătoare în Tabelul A. O relație unu-la-mulți în o bază de date este cel mai comun proiect de bază de date relațională și este în centrul unui design bun.

Luați în considerare relația dintre un profesor și cursurile pe care le predau. Un profesor poate preda mai multe cursuri, dar cursul nu ar avea aceeași relație cu profesorul.

Prin urmare, pentru fiecare înregistrare din tabelul Profesori, ar putea exista multe înregistrări în tabelul Cursuri. Aceasta este o relație una-la-multe: un profesor la mai multe cursuri.

De ce este important să stabiliți o relație One-to-Many

Pentru a reprezenta o relație unu-la-multe, aveți nevoie de cel puțin două mese. Să vedem de ce.

Poate că am creat un tabel de profesori în care vrem să înregistrăm numele și cursurile predate. Am putea proiecta astfel:

Profesori și cursuri
Teacher_ID Numele profesorului Curs
Teacher_001 Carmen Biologie
Teacher_002 Veronica Math
Teacher_003 Jorge Engleză

Ce se întâmplă dacă Carmen predă două sau mai multe cursuri? Avem două opțiuni cu acest design. Am putea doar să o adăugăm la înregistrarea actuală a lui Carmen, astfel:

Profesori și cursuri
Teacher_ID Profesor _Name Curs
Teacher_001 Carmen Biologie, Matematică
Teacher_002 Veronica Math
Teacher_003 Jorge Engleză

Designul de mai sus, cu toate acestea, este inflexibil și ar putea duce la probleme mai târziu atunci când încercați să inserați, să editați sau să ștergeți date.

Aceasta face dificilă căutarea datelor. Acest proiect încalcă primul principiu al normalizării bazei de date, First Normal Form (1NF) , care prevede că fiecare celulă de tabelă trebuie să conțină o singură bucată de date discrete.

O altă alternativă de design ar putea fi să adaugi pur și simplu un al doilea record pentru Carmen:

Profesori și cursuri
Profesorul _ID Profesor _Name Curs
Teacher_001 Carmen Biologie
Teacher_001 Carmen Math
Teacher_002 Veronica Math
Teacher_003 Jorge Engleză

Acest lucru aderă la 1NF, dar este în continuare un design de baze de date slabe deoarece introduce redundanță și ar putea umfla o bază de date foarte mare inutil. Mai important, datele ar putea deveni inconsecvente. De exemplu, dacă numele lui Carmen sa schimbat? Cineva care lucrează cu datele ar putea să își actualizeze numele într-o singură înregistrare și să nu o actualizeze în cea de-a doua înregistrare. Acest proiect încalcă Formularul secundar secundar (2NF), care aderă la 1NF și trebuie, de asemenea, să evite redundanțele mai multor înregistrări prin separarea subseturilor de date în mai multe tabele și crearea unei relații între ele.

Cum de a proiecta o bază de date cu relații one-to-many

Pentru a implementa o relație one-to-many în tabelul Teachers and Courses, rupem tabelele în două și le conectăm folosind o cheie străină .

Aici am eliminat coloana Curs din tabelul Profesorii:

Profesori
Profesorul _ID Profesor _Name
Teacher_001 Carmen
Teacher_002 Veronica
Teacher_003 Jorge

Și aici este masa de cursuri. Rețineți că cheia externă, Teacher_ID, face legătura între un curs și un profesor în tabelul Profesorilor:

Cursuri
Course_ID Numele cursului Teacher_ID
Course_001 Biologie Teacher_001
Course_002 Math Teacher_001
Course_003 Engleză Teacher_003

Am dezvoltat o relație între tabelele profesorilor și cursuri folosind o cheie străină.

Acest lucru ne spune că biologia și matematica sunt predate de Carmen și că Jorge predă limba engleză.

Putem vedea cum acest proiect evită orice posibilă redundanță, permite profesorilor individuali să predea cursuri multiple și implementează o relație unu-la-mulți.

Bazele de date pot implementa, de asemenea, o relație one-to-one și o relație multi-la-multe.