Relacions d'un a molts en una base de dades

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 de professors on volíem registrar el nom i els cursos impartits. Podríem dissenyar-ho així:

Professors i Cursos
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í:

Professors i Cursos
Teacher_ID ProfessorName _Name 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:

Professors i Cursos
_ID del professor ProfessorName _Name 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:

Professors
_ID del professor ProfessorName _Name
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:

Cursos
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.