Una relació d'un a molts en una base de dades es produeix quan cada registre de la Taula A pot tenir molts registres vinculats a la Taula B, però cada registre a la Taula B pot tenir només un registre corresponent a la Taula A. Una relació d'un a molts una base de dades és el disseny de base de dades relacional més comú i és el cor del bon disseny.
Considereu la relació entre un professor i els cursos que imparteixen. Un professor pot ensenyar diversos cursos, però el curs no tindria la mateixa relació amb el professor.
Per tant, per a cada registre de la taula de professors, hi ha molts registres a la taula de cursos. Aquesta és una relació d'un a molts: un professor a diversos cursos.
Per què és important establir una relació entre persones
Per representar una relació d'un a molts, necessiteu almenys dues taules. Vegem per què?
Potser hem creat una taula on volíem registrar el nom i els cursos impartits. Podríem dissenyar-ho així:
Teacher_ID | Teacher_Name | Curs |
---|---|---|
Professor_001 | Carmen | Biologia |
Professor_002 | Veronica | Matemàtiques |
Professor_003 | Jorge | Anglès |
Què passa si Carmen ensenya dos o més cursos? Tenim dues opcions amb aquest disseny. Podríem afegir-lo al registre actual de Carmen, així:
Teacher_ID | Professor_Nom | Curs |
---|---|---|
Professor_001 | Carmen | Biologia, matemàtiques |
Professor_002 | Veronica | Matemàtiques |
Professor_003 | Jorge | Anglès |
El disseny anterior, però, és inflexible i pot provocar problemes més endavant quan intenteu inserir, editar o eliminar dades.
Fa que sigui difícil buscar dades. Aquest disseny infringeix el primer principi de normalització de la base de dades, First Normal Form (1NF), que indica que cada cel · la de la taula ha de contenir una única i discreta informació.
Una altra alternativa de disseny podria ser simplement afegir un segon disc de Carmen:
Professor_ID | Professor_Nom | Curs |
---|---|---|
Professor_001 | Carmen | Biologia |
Professor_001 | Carmen | Matemàtiques |
Professor_002 | Veronica | Matemàtiques |
Professor_003 | Jorge | Anglès |
Això s'adhereix a 1NF, però encara és un disseny de base de dades deficient perquè introdueix redundància i pot innecessàriament fer innecessàriament una base de dades molt gran. Més important encara, les dades podrien ser incompatibles. Per exemple, què passa si el nom de Carmen ha canviat? Algú que treballi amb les dades podria actualitzar el seu nom en un registre i no actualitzar-lo en el segon registre. Aquest disseny infringeix el segon formulari normal (2NF), que s'adhereix a 1NF i també ha d'evitar el redundància de diversos registres, separant subconjunts de dades en múltiples taules i creant una relació entre ells.
Com dissenyar una base de dades amb relacions d'un a molts
Per implementar una relació d'un a molts en la taula de Professors i Cursos, trencem les taules en dos i enllaçem-les utilitzant una clau externa.
Aquí, hem eliminat la columna Curs a la taula de professors:
Professor_ID | Professor_Nom |
---|---|
Professor_001 | Carmen |
Professor_002 | Veronica |
Professor_003 | Jorge |
I aquí teniu la taula de cursos. Tingueu en compte que la seva clau externa, Teacher_ID, vincula un curs a un professor a la taula Teachers:
Curs_ID | Nom del curs | Teacher_ID |
---|---|---|
Curs_001 | Biologia | Professor_001 |
Curs_002 | Matemàtiques | Professor_001 |
Curs_003 | Anglès | Professor_003 |
Hem desenvolupat una relació entre la taula de professors i els cursos amb una clau externa.
Això ens diu que tant la biologia com la matemàtica són impartides per Carmen i que Jorge ensenya anglès.
Podem veure com aquest disseny evita possibles redundàncies, permet que els professors individuals imparteixin múltiples cursos i implementi una relació d'un a molts.
Les bases de dades també poden implementar una relació d'un a un i una relació de molts a molts.