Una relació d'un a molts en una base de dades es produeix quan cada registre de la taula A pot tenir molts registres enllaçats a la taula B, però cada registre de la taula B pot tenir només un registre corresponent a la taula A.
Una relació d'un a molts en una base de dades és el disseny de base de dades relacional més comú i és el centre d'un bon disseny.
Les bases de dades també poden implementar una relació un a un i una relació de molts a molts.
Exemple d'una relació d'un a molts
Considereu la relació entre un professor i els cursos que imparteix. Un professor pot impartir diverses classes, però el curs no tindria la mateixa relació amb el professor.
Per tant, per a cada registre d'una taula de professors, hi podria haver molts registres a la taula de cursos. Aquest exemple il·lustra una relació d'un a molts: un professor a diversos cursos.
Per què és important establir una relació un a molts
Per representar una relació d'un a molts, necessiteu almenys dues taules. Vegem per què.
Adhesió al primer disseny de forma normal
Potser hem creat una taula en la qual volem anotar el nom i els cursos impartits. Podríem dissenyar una taula de professors i cursos com aquesta:
Teacher_ID | Nom_del_professor | Curs |
---|---|---|
Teacher_001 | Carmen | Biologia |
Teacher_002 | Veronica | Matemàtiques |
Teacher_003 | Jorge | Anglès |
I si la Carmen imparteix dos o més cursos? Tenim dues opcions amb aquest disseny. El podríem afegir al registre existent de Carmen, com aquest:
Teacher_ID | Professor_Nom | Curs |
---|---|---|
Teacher_001 | Carmen | Biologia, matemàtiques |
Teacher_002 | Veronica | Matemàtiques |
Teacher_003 | Jorge | Anglès |
No obstant això, el disseny anterior és inflexible i podria provocar problemes més tard quan inseriu, editeu o suprimiu dades. Dificulta la cerca de dades.
Aquest disseny també infringeix el primer principi de normalització de bases de dades, First Normal Form (1NF), que estableix que cada cel·la de la taula ha de contenir una única peça de dades discreta.
La segona regla de la forma normal
Una altra alternativa de disseny podria ser afegir un segon registre per a Carmen:
Professor_ID | Professor_Nom | Curs |
---|---|---|
Teacher_001 | Carmen | Biologia |
Teacher_001 | Carmen | Matemàtiques |
Teacher_002 | Veronica | Matemàtiques |
Teacher_003 | Jorge | Anglès |
Aquest enfocament s'adhereix a 1NF, però encara és un disseny de base de dades deficient perquè introdueix redundància i podria inflar una base de dades gran innecessàriament. Més important encara, les dades podrien tornar-se incoherents.
Per exemple, què passaria si el nom de Carmen canviés? És possible que algú que treballi amb les dades actualitzi el seu nom en un registre i no l'actualitzi al segon registre.
Aquest disseny infringeix l'estàndard de la segona forma normal (2NF), que s'adhereix a 1NF i també ha d'evitar la redundància de diversos registres. La regla 2NF aconsegueix això separant subconjunts de dades en diverses taules i creant una relació entre elles.
Com dissenyar una base de dades amb relacions d'un a molts
Per implementar una relació d'un a molts a la taula de professors i cursos, divideix les taules en dues i enllaça-les amb una clau estrangera.
Aquí hem eliminat la columna Curs de la taula Professors:
Professor_ID | Professor_Nom |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
I aquí teniu la taula de cursos. Tingueu en compte que la seva clau estrangera, Teacher_ID, enllaça un curs amb un professor a la taula de professors:
Course_ID | Nom_del_curs | Teacher_ID |
---|---|---|
Curs_001 | Biologia | Teacher_001 |
Curs_002 | Matemàtiques | Teacher_001 |
Curs_003 | Anglès | Teacher_003 |
Hem desenvolupat una relació entre el professorat i la taula de cursos mitjançant una clau estrangera. Aquesta disposició ens diu que la Carmen ensenya biologia i matemàtiques i que Jorge ensenya anglès.
Podem veure com aquest disseny evita possibles acomiadaments, permet als professors individuals impartir diversos cursos i implementa una relació d'un a molts.