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

Cuprins:

Relații unu-la-mai multe într-o bază de date
Relații unu-la-mai multe într-o bază de date
Anonim

O relație unu-la-mai multe într-o bază de date apare atunci când fiecare înregistrare din tabelul A poate avea mai multe înregistrări legate în tabelul B, dar fiecare înregistrare din tabelul B poate avea o singură înregistrare corespunzătoare în tabelul A.

O relație unu-la-mulți într-o bază de date este cel mai comun design de baze de date relaționale și se află în centrul unui design bun.

Bazele de date pot implementa, de asemenea, o relație unu-la-unu și o relație multi-la-mulți.

Image
Image

Exemplu de relație unu-la-mulți

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

De aceea, pentru fiecare înregistrare dintr-un tabel Profesori, ar putea exista multe înregistrări în tabelul Cursuri. Acest exemplu ilustrează o relație unu-la-mai mulți: un profesor la mai multe cursuri.

De ce este importantă stabilirea unei relații unu-la-mulți

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

Aderarea la primul design de formă normală

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

Teacher_ID Nume_Profesor Curs
Teacher_001 Carmen Biologie
Teacher_002 Veronica Mate
Teacher_003 Jorge engleză

Dar dacă Carmen predă două sau mai multe cursuri? Avem două opțiuni cu acest design. L-am putea adăuga la înregistrarea existentă a lui Carmen, astfel:

Teacher_ID Profesor_Nume Curs
Teacher_001 Carmen Biologie, matematică
Teacher_002 Veronica Mate
Teacher_003 Jorge engleză

Cu toate acestea, designul de mai sus este inflexibil și ar putea duce la probleme mai târziu când inserați, editați sau ștergeți date. Îngreunează căutarea datelor.

Acest design încalcă, de asemenea, primul principiu al normalizării bazei de date, First Normal Form (1NF), care prevede că fiecare celulă de tabel ar trebui să conțină o singură bucată de date discretă.

A doua regulă a formei normale

O altă alternativă de design ar putea fi adăugarea unui al doilea record pentru Carmen:

Profesor_ID Profesor_Nume Curs
Teacher_001 Carmen Biologie
Teacher_001 Carmen Mate
Teacher_002 Veronica Mate
Teacher_003 Jorge engleză

Această abordare aderă la 1NF, dar este încă un design slab al bazei de date, deoarece introduce redundanță și ar putea umfla o bază de date mare în mod inutil. Mai important, datele ar putea deveni inconsecvente.

De exemplu, ce se întâmplă dacă numele lui Carmen s-ar schimba? Cineva care lucrează cu datele ar putea să-și actualizeze numele într-o înregistrare și să nu reușească să-l actualizeze în a doua înregistrare.

Acest design încalcă standardul a doua formă normală (2NF), care aderă la 1NF și, de asemenea, trebuie să evite redundanțele înregistrărilor multiple. Regula 2NF realizează acest lucru prin separarea subseturi de date în mai multe tabele și creând o relație între ele.

Cum să proiectați o bază de date cu relații unu-la-mai multe

Pentru a implementa o relație unu-la-mai mulți în tabelul Profesori și cursuri, împărțiți tabelele în două și conectați-le folosind o cheie străină.

Aici, am eliminat coloana Curs din tabelul Profesori:

Profesor_ID Profesor_Nume
Teacher_001 Carmen
Teacher_002 Veronica
Teacher_003 Jorge

Și aici este tabelul de cursuri. Rețineți că cheia sa externă, Teacher_ID, leagă un curs la un profesor din tabelul Profesori:

Course_ID Nume_curs Teacher_ID
Curs_001 Biologie Teacher_001
Curs_002 Mate Teacher_001
Curs_003 engleză Teacher_003

Am dezvoltat o relație între profesori și tabelul de cursuri folosind o cheie străină. Acest aranjament ne spune că Carmen predă atât biologie, cât și matematică și că Jorge predă engleză.

Putem vedea cum acest design evită orice posibile redundanțe, permite profesorilor individuali să predea mai multe cursuri și implementează o relație unu-la-mai mulți.

Recomandat: